CephFS
客户端连接mds服务获得文件的对象编号Inode,之后根据对象编号从data pool中取出数据,client是访问不到metadata pool的。元数据放在进程的内存中,定时同步到metadata pool中。
客户端挂载CephFS的方式:
1、内核文件系统:ceph,libcephfs
2、用户空间文件系统(FUSE):libcephfs
启用CephFS
CephFS需要至少运行一个元数据服务器MDS的守护进程metadata server,至少两个pool。
启动MDS服务:
ceph-deploy mds create ceph02
查看MDS状态:
]$ ceph mds stat , 1 up:standby
创建元数据池:
ceph osd pool create cephfs-metadata 32 32
创建数据池:
ceph osd pool create cephfs-data 64 64
将数据池和元数据池关联:
ceph fs new cephfs cephfs-metadata cephfs-data
显示cephfs相关信息:
ceph fs status cephfs cephfs - 0 clients ====== +------+--------+--------+---------------+-------+-------+ | Rank | State | MDS | Activity | dns | inos | +------+--------+--------+---------------+-------+-------+ | 0 | active | ceph01 | Reqs: 0 /s | 10 | 13 | +------+--------+--------+---------------+-------+-------+ +-----------------+----------+-------+-------+ | Pool | type | used | avail | +-----------------+----------+-------+-------+ | cephfs-metadata | metadata | 2286 | 32.0G | | cephfs-data | data | 0 | 32.0G | +-----------------+----------+-------+-------+ +-------------+ | Standby MDS | +-------------+ +-------------+ MDS version: ceph version 13.2.8 (5579a94fafbc1f9cc913a0f5d362953a5d9c3ae0) mimic (stable)
查看mds状态:
ceph mds stat
客户端使用
创建账号:
ceph auth get-or-create client.fsclient mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs-data' -o ceph.client.fsclient.keyring
查看权限信息:
]$ ceph auth get client.fsclient exported keyring for client.fsclient [client.fsclient] key = AQBArUtec3BRBxAAj2w0dCpJuCuq5blbBkczKQ== caps mds = "allow rw" caps mon = "allow r" caps osd = "allow rwx pool=cephfs-data"
将key保存到文件:
ceph auth print-key client.fsclient > fsclient.key
将key和ceph.conf文件复制到客户端:
scp fsclient.key ceph.conf root@192.168.1.12:/etc/ceph/
客户端安装ceph-common:
yum install ceph-common -y
查看客户端的linux内核是否有ceph模块:
modinfo ceph | grep ceph.ko
在客户端创建挂载目录:
mkdir /data
挂载目录:-t 文件系统类型,-o 名称,secretfile=秘钥文件
mount -t ceph ceph01:6789,ceph02:6789,ceph03:6789:/ /data -o name=fsclient,secretfile=/etc/ceph/fsclient.key
查看是否已经挂载:
mount | grep ceph
查看文件系统类型:
stat -f /data
cephfs是可共享挂载的,其他客户端也可以挂载使用,文件也是共享的。相比nfs cephfs因为底层是rados集群所以具有冗余的功能,不存在单点。还有io能力扩展性等等都是cephfs的优势。
设置开机自动挂载:_netdev不在线则跳过,noatiom不实时更新访问时间戳
ceph01:6789,ceph02:6789,ceph03:6789:/ /data ceph name=fsclient,secretfile=/etc/ceph/fsclient.key,_netdev,noatime 0 0
FUSE客户端
当内核没有ceph模块时可以使用FUSE客户端来挂载使用cephfs。这是安装在用户空间的应用,所以性能上比不上内核级别的客户端。
安装ceph-fuse:
yum install ceph-fuse -y
提供配置文件ceph.conf和keyring文件:
ceph auth get-or-create client.fsclient mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs-data' -o ceph.client.fsclient.keyring scp ceph.client.fsclient.keyring ceph.conf root@192.168.1.12:/etc/ceph/
使用fuse客户端挂载使用:
]# ceph-fuse -n client.fsclient -m ceph01:6789,ceph02:6789,ceph03:6789 /data ceph-fuse[3030]: starting ceph client 2020-02-18 06:22:26.759 7ff837906c00 -1 init, newargv = 0x559c7eac0300 newargc=7 ceph-fuse[3030]: starting fuse
查看是否挂载:
mount | grep fuse
开机自动挂载:编辑/etc/fstab
none /data fuse.ceph ceph.id=fsclient,ceph.conf=/etc/ceph/ceph.conf,_netdev,defaults 0 0
测试挂载:
]# mount -a 2020-02-18 08:17:13.700 7faec3560c00 -1 init, newargv = 0x55abd1d579d0 newargc=9 ceph-fuse[3218]: starting ceph client ceph-fuse[3218]: starting fuse
MDS扩展
metadata server元数据的扩展涉及到写同步,所以很难分散。动态子树分区或者叫Multi MDS,一个目录一个分区,当某个目录负载量变的跟大时会自动将某个子目录切换分区,切换到负载较轻的mds。多个mds其中一个负责根将子分配给其他mds。rank0代表管理跟节点,rank1、rank2...没有等级关系,都是rank0的子树。rank值通过max_mds参数来管理。
mds冗余问题,找一个mds专门做冗余,谁坏掉给谁备份,或者每个mds都有一个mds备份。
读负载均衡是对目录创建多个副本实现的。
当mds名额数量多于mds数量,多出来的名额就处于备用模式。
查看mds状态:
ceph mds stat cephfs-1/1/1 up {0=ceph01=up:active}
创建多个mds节点:
ceph-deploy mds create ceph02 ceph03
查看mds状态:此时多出两个备用状态
ceph mds stat cephfs-1/1/1 up {0=ceph01=up:active}, 2 up:standby
设置rank值:
ceph fs set cephfs max_mds 2
再次查看状态:已近有一个standby转为active了
ceph mds stat cephfs-2/2/2 up {0=ceph01=up:active,1=ceph03=up:active}, 1 up:standby
也可以使用如下命令查看:
]$ ceph fs status cephfs - 0 clients ====== +------+--------+--------+---------------+-------+-------+ | Rank | State | MDS | Activity | dns | inos | +------+--------+--------+---------------+-------+-------+ | 0 | active | ceph01 | Reqs: 0 /s | 10 | 13 | | 1 | active | ceph03 | Reqs: 0 /s | 10 | 13 | +------+--------+--------+---------------+-------+-------+ +-----------------+----------+-------+-------+ | Pool | type | used | avail | +-----------------+----------+-------+-------+ | cephfs-metadata | metadata | 6996 | 32.0G | | cephfs-data | data | 0 | 32.0G | +-----------------+----------+-------+-------+ +-------------+ | Standby MDS | +-------------+ | ceph02 | +-------------+ MDS version: ceph version 13.2.8 (5579a94fafbc1f9cc913a0f5d362953a5d9c3ae0) mimic (stable)
查看cephfs更详细的信息:
ceph fs get cephfs
MDS故障转移设置参数
mds_standby_for_name:让某个standby接管指定的mds。
mds_standby_for_rank:让某个standby接管指定的mds,但是设置的是rank,而不是名称,可以夸多个文件系统,必须结合mds_standby_for_fscid 来使用,这个是来指定用在那个文件系统上的。
mds_standby_for_fscid:指定了某个文件系统,但是没有指定那个rank,也就是说可以为某一个文件系统内的任意多个rank备用。设置条件为:同时设置了mds_standby_for_rank,但未设置mds_standby_for_rank。
mds_standby_replay:备用某个mds时,因为备用的没有数据所以要从pool中复制数据,中间有间隔会造成卡顿,所以这个参数可以让备用的节点同步要被备用mds的数据,就是两个mds都有数据,其中一个有问题另一个可以无间隙的顶替上去。
这些配置需要配置在ceph.conf中,配置后要推送到各个节点。
配置示例:在配置文件加上如下配置即可。
ceph02备用于名称为cephfs文件系统的任意一个mds。
[mds.ceph02] mds_standby_for_fscid = cephfs
ceph02被用于ceph03,而且是replay模式,如果有多个备用mds那就再多写一个配置段即可。
[mds.ceph02] mds_standby_for_name = ceph03 mds_standby_replay = true [mds.ceph04] mds_standby_for_name = ceph01 mds_standby_replay = true
推送到各个节点:修改管理节点下的配置,然后推送到集群各个节点
ceph-deploy --overwrite-conf config push ceph01 ceph02 ceph03