使用ceph的文件存储CephFS

1、准备Ceph管理节点

需要将Ceph存储库添加到ceph-deploy管理节点,然后安装ceph-deploy软件包,我的管理节点在IP 192.168.18.74上。

导入存储库密钥:

wget -q -O- ‘https://download.ceph.com/keys/release.asc’ | sudo apt-key add –

将Ceph存储库添加到你的系统,将{ceph-stable-release}替换为稳定的Ceph版本:

echo deb https://download.ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list

这个安装会做Ceph mimic:

echo deb https://download.ceph.com/debian-mimic/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list

更新你的存储库并安装ceph-deploy:

sudo apt update

sudo apt -y install ceph-deploy

Ceph FS是一个支持POSIX接口的文件系统,它使用 Ceph 存储集群来存储数据。文件系统对于客户端来说可以方便的挂载到本地使用。Ceph FS构建在RADOS之上,继承RADOS的容错性和扩展性,支持冗余副本和数据高可靠性。

注意:当前, CephFS 还缺乏健壮得像 ‘fsck’ 这样的检查和修复功能。存储重要数据时需小心使用,因为灾难恢复工具还没开发完。

准备MDS元数据服务器

Ceph 文件系统要求 Ceph 存储集群内至少有一个 Ceph 元数据服务器。

新增一个MDS很简单,可参考ceph新增节点

1. 环境清理

sudo stop ceph-all                              
//停止所有CEPH进程
ceph-deploy uninstall  [{ceph-node}]                       
//卸载所有ceph程序
ceph-deploy purge   [[ceph-node} [{ceph-node}]    
//删除ceph相关的包
ceph-deploy purgedata {ceph-node} [{ceph-node}]                       
// 删除ceph相关的包
ceph-deploy forgetkeys                                                                  
//删除key

2. 修改hosts

修改/etc/hosts,使主机名对应本机的IP地址(若选择回环地址127.0.0.1貌似解析不了域名)。注:以下主机名都为monster,读者需将其改为自己的主机名

10.10.105.78    monster
127.0.0.1       localhost

3 准备存储卷

准备两个块设备(可以是硬盘也可以是LVM卷),这里我们使用LVM
可以使用fsck从已有的盘中切割创建需要的LVM卷。

例如我们创建的卷为

4. 安装ceph-deploy

sudo apt-get install ceph-deploy

5. 创建集群

mkdir ceph-cluster
cd ceph-cluster
ceph-deploy new  monster 
//创建一个新集群,并写入CLUSTER.conf和keyring等等

因为我们是在单节点上工作,因此需要修改一下配置文件

echo "osd crush chooseleaf type = 0" >> ceph.conf
echo "osd pool default size = 1" >> ceph.conf
echo "osd journal size = 100" >> ceph.conf

6. 安装Ceph

首先安装基本库(ceph,ceph-common, ceph-fs-common, ceph-mds)

ceph-deploy install monster

7. 创建一个集群监视器

ceph-deploy mon create monster

8. 收集远程节点上的密钥到当前文件夹

ceph-deploy gatherkeys monster

9. 增加OSD

就在我们挂载虚拟磁盘的目录

ceph-deploy osd create --data /dev/vg_group/data1 $HOSTNAME 
ceph-deploy osd create --data /dev/vg_group/data2 $HOSTNAME 
ceph-deploy mds create master
ceph-deploy mgr create master

mount -t ceph 192.168.1.60:6789:/ /mnt/ -o name=admin,secret=AQBtHl9fuNCYFhAA8e9msw55sxMvd04KNqUfVQ==

创建Ceph文件系统

一个 Ceph 文件系统需要至少两个 RADOS 存储池,一个用于数据、一个用于元数据。配置这些存储池时需考虑:
1、为元数据存储池设置较高的副本水平,因为此存储池丢失任何数据都会导致整个文件系统失效。
2、为元数据存储池分配低延时存储器(像 SSD ),因为它会直接影响到客户端的操作延时。

关于存储池的管理可参考官网 存储池

要用默认设置为文件系统创建两个存储池,你可以用下列命令:
比如我们使用120个pg。cephfs_data和cephfs_metadata是两个存储池的名称。

ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128

创建好存储池后,你就可以用 fs new 命令创建文件系统了:

ceph fs new cephfs cephfs_metadata cephfs_data

cephfs是文件系统的名称。

使用下面的命令可以查看创建的CephFS

ceph fs ls

文件系统创建完毕后, MDS 服务器就能达到 active 状态了,比如在一个单 MDS 系统中,使用命令查看

ceph mds stat

成功运行输出如下:

[zzq@ceph4 osd]$ ceph osd pool create cephfs_data 128
pool 'cephfs_data' created
[zzq@ceph4 osd]$ ceph osd pool create cephfs_metadata 128
pool 'cephfs_metadata' created
[zzq@ceph4 osd]$ ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1
[zzq@ceph4 osd]$ ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[zzq@ceph4 osd]$
[zzq@ceph4 osd]$ ceph mds stat
e3: 1/1/1 up {0=ceph4=up:active}
[zzq@ceph4 osd]$

挂载CephFS (客户端节点执行)

要挂载 Ceph 文件系统,如果你知道监视器 IP 地址可以用 mount 命令、或者用 mount.ceph 工具来自动解析监视器 IP 地址。

假如我们有4个monitor监视器,ip分别为192.168.199.81,192.168.199.82,192.168.199.83,192.168.199.84。
则使用mount命令挂载到目录/mycephfs,如下:

sudo mkdir /mycephfs
sudo mount -t ceph 192.168.199.81:6789,192.168.199.82:6789,192.168.199.83:6789,192.168.199.84:6789:/  /mycephfs

Ceph v0.55 及后续版本默认开启了 cephx 认证。
如果启用了cephx认证的Ceph文件系统,挂载时我们必须指定用户名、密钥。
secret在/etc/ceph/ceph.client.admin.keyring可以查到。

cat /etc/ceph/ceph.client.admin.keyring
sudo mount -t ceph 192.168.199.81:6789,192.168.199.82:6789,192.168.199.83:6789,192.168.199.84:6789:/ /mycephfs -o name=admin,secret=AQD/9AZb41OsJRAAhgKm6sw/LItSdb33wFQRpA==

上述用法会把密码遗留在 Bash 历史里,更安全的方法是从文件读密码。例如:

sudo mount -t ceph 192.168.199.81:6789,192.168.199.82:6789,192.168.199.83:6789,192.168.199.84:6789:/ /mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret

正确输出如下:

[zzq@localhost /]$ cat /etc/ceph/ceph.client.admin.keyring

key = AQD/9AZb41OsJRAAhgKm6sw/LItSdb33wFQRpA== caps mds = “allow” caps mon = “allow *” caps osd = “allow *”

[zzq@localhost /]$ sudo mount -t ceph 192.168.199.81:6789,192.168.199.82:6789,192.168.199.83:6789,192.168.199.84:6789:/ /mycephfs -o name=admin,secret=AQD/9AZb41OsJRAAhgKm6sw/LItSdb33wFQRpA== [sudo] password for zzq:

[zzq@localhost /]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_localhost-lv_root 18G 2.2G 15G 14% / tmpfs 482M 0 482M 0% /dev/shm /dev/sda1 477M 86M 362M 20% /boot /dev/rbd0 3.9G 8.0M 3.8G 1% /cephAll 192.168.199.81:6789,192.168.199.82:6789,192.168.199.83:6789,192.168.199.84:6789:/ 33G 14G 19G 41% /mycephfs

[zzq@localhost /]$

要卸载 Ceph 文件系统,可以用 unmount 命令,例如:

sudo umount /mycephfs

可能遇到的问题

可能出现的错误
1.mount error 5 = Input/output error
2. mount error 22 = Invalid argument
第一个,首先先查mds服务是正常,不存在则添加
第二个,密钥不正确,检查密钥

用户空间挂载 CEPH 文件系统 (客户端服务器执行)

Ceph v0.55 及后续版本默认开启了 cephx 认证。

从用户空间挂载Ceph 文件系统前,确保客户端主机有一份Ceph 配置副本、和具备 Ceph元数据服务器能力的密钥环。

在客户端主机上,把监视器主机上的Ceph 配置文件拷贝到客户端服务器的 /etc/ceph/目录下。

sudo mkdir -p /etc/ceph
scp ceph1:/etc/ceph/ceph.client.admin.keyring /etc/ceph
scp ceph1:/etc/ceph/ceph.conf /etc/ceph

确保客户端机器上的 Ceph 配置文件和密钥环都有合适的权限位,如chmod 644 。

要把 Ceph 文件系统挂载为用户空间文件系统,可以用 ceph-fuse 命令,例如:

sudo mkdir /home/zzq/cephfs
sudo ceph-fuse -m 192.168.199.81:6789 /home/zzq/cephfs

启动时自动挂载

普通目录

启动时自动挂载需要把挂载信息按下列格式添加到 /etc/fstab :

sudo vi  /etc/fstab

在末尾输入内容如下:

192.168.199.81:6789,192.168.199.82:6789,192.168.199.83:6789,192.168.199.84:6789:/ /mycephfs ceph  name=admin,secret=AQD/9AZb41OsJRAAhgKm6sw/LItSdb33wFQRpA==,noatime    0       2

相关参数

 /etc/fstab下面分为6个字段:
1、要挂载的设备(可以使用LABEL、UUID、设备文件)
2、挂载点
3、文件系统类型
4、挂载选项(defaults使用默认挂载选线,如需同时指明,则:defaults,acl)
5、转储频率
  0:从不备份
  1:每天备份
  2:每隔一天备份
6、自检次序
  0:不自检
  1:首先自检,通常只用于根文件系统
  2:次级自检

Was this helpful?

0 / 0

发表评论 0

Your email address will not be published. Required fields are marked *