CephFS简介
官方文档:https://docs.ceph.com/en/quincy/cephfs
CephFS即ceph filesystem,可以实现文件系统共享功能(POSIX标准),客户端通过ceph协议挂载并使用CephFS存储数据。
CephFs需要用到MDS(metadata-service)服务,其守护进程为ceph-mds,ceph-mds进程管理CephFS上存储的文件相关的元数据,并协调对ceph集群的访问。
在linux系统使用ls等操作查看某个目录下的文件时,会由保存在磁盘上的分区表记录文件的名称、创建日期、大小、inode及存储位置等元数据信息。在cephfs中,由于数据被分散为若干个object进行分布式存储,因此并没有统一的保存文件元数据,而是将元数据保存到一个单独的存储池(metadata pool),但是客户端并不能直接访问metadata pool中的元数据,而是在读写数据的时候由mds进行处理,读数据的时候由mds从metadata pool中加载元数据然后缓存在内存中(用于后期快速响应其它客户端请求)并返回给客户端,写数据的时候由MDS缓存在内存并定期同步到metadata pool。
如下图,mds的数据结构类似于linux系统的根型目录结构以及nginx中的缓存目录分层一样,是一个倒置的树状结构。使用多个mds时,cephfs会将文件系统树分割成子树,每个子树可以交给特定的MDS进行权威管理,从而达到了随着元数据服务器数量的增加,集群性能线性地扩展。例如,集群中有3个active的mds,假设根目录下有3个子目录/a、、/b和/c,此时/a的元数据可以交给mds1处理,/b的元数据可以交给mds2处理,/c的元数据可以交给mds2处理,这样就可以提升cephfs的性能。
启用cephfs
首先确认集群中已经部署了至少一个mds服务
创建两个存储池:cephfs_data和cephfs_metadata,前者用于存储cephfs的数据,后者用于存储cephfs的元数据
ceph osd pool create cephfs_data 32 32
ceph osd pool create cephfs_metatdata 64 64
创建一个CephFS,并验证其状态
ceph fs new cephfs cephfs_metatdata cephfs_data
ceph fs ls
ceph fs status cephfs
cephalexin
客户端挂载
客户端挂载CephFS时支持两种方式,分别是:
- 内核空间挂载,需要内核支持ceph模块
- 用户空间挂载,需要安装ceph-fuse,不建议使用,性能较差
创建客户端认证
ceph auth get-or-create client.cephfs-user \
mon 'allow r' osd 'allow rwx pool=cephfs_data' mds 'allow' \
-o /etc/ceph/ceph.client.cephfs-user.keyring
ceph auth print-key client.cephfs-user -o /etc/ceph/cephfs-user.key
将keyring文件和ceph.conf分发至客户端
scp /etc/ceph/ceph.conf /etc/ceph/ceph.client.cephfs-user.keyring /etc/ceph/cephfs-user.key root@192.168.211.15:/etc/ceph/
内核挂载
客户端安装ceph-common
apt -y install ceph-common
挂载cephfs
mount -t ceph 192.168.211.23:6789,192.168.211.24:6789,192.168.211.25:6789:/ /data -o name=cephfs-user,secretfile=/etc/ceph/cephfs-user.key
挂载点写入数据测试
cd /data/
cp /var/log/syslog ./
dd if=/dev/zero of=/data/testfile bs=1M count=100
stat /data
配置开机自动挂载
vim /etc/fstab
192.168.211.23:6789,192.168.211.24:6789,192.168.211.25:6789:/ /data ceph defaults,name=cephfs-user,secretfile=/etc/ceph/cephfs-user.key,_netdev,noatime 0 0
用户空间挂载
如果内核版本较低而没有ceph模块,那么可以使用用户空间挂载,但是推荐使用内核挂载
客户端安装ceph-fuse
apt -y install ceph-fuse
挂载cephfs
ceph-fuse -n client.cephfs-user -m 192.168.211.23:6789,192.168.211.24:6789,192.168.211.25:6789 /mnt
挂载点读写数据测试
cd /mnt
cp /etc/hosts ./
cat ./hosts
卸载cephfs
fusermount -u /mnt
设置开机自动挂载
vim /etc/fstab
none /mnt fuse.ceph ceph.id=cephfs-user,ceph.conf=/etc/ceph/ceph.conf,_netdev,defaults 0 0
MDS高可用
MDS作为CephFS的访问入口,需要实现高性能及数据备份,ceph支持多MDS结构,以实现MDS的高可用和高性能。集群存在多个MDS服务时,MDS的高可用实现方式有以下两种:
- 专用备份mds,每个主mds都有一个专用的备mds,主mds故障时,它的专用备用mds会接替它提供服务,切换速度快
- 公用备份mds,多个主mds共用一个或多个备mds,主mds故障时,会有一个公用的备mds来接替它提供服务,切换速度较慢,因为备mds需要重新从元数据池加载元数据
例如有4个mds服务,可以设置3个为主,一个为共用的备,也可以设置两个为主,剩余两个设置为一一对应两个主做备份,如下图所示:
设置备份mds常用的选项如下:
- max_standby_replay:true或false,true表示开启replay模式,这种模式下主mds内的数据会实时与备mds同步,如果主故障,备可以快速的切换。如果为false,只有故障的时候才会去同步数据这样会有一段时间的中端。将备mds设置为某个主mds的专用备份时需要设置为true
- mds_standby_for_name:设置当前mds只用于备份指定名称的mds
- mds_standby_for_rank:设置当前mds只用于备份指定rank编号的mds
- mds_standby_for_fscid:指定CephFS文件系统ID,需要联合mds_standby_rank使用,如果设置mds_standby_rank,那么就是用于备份指定文件系统中指定rank编号的mds,如果没有设置,就是用于备份指定文件系统中所有rank编号的mds
另外可以使用max_mds参数来控制处于启用状态的mds的数量
查看集群中当前mds的状态
ceph fs status
如上图所示,集群中有4个mds服务,处于激活状态的mds有一个,处于备份状态的mds有3个
可以通过以下两种方式优化mds的结构,实现高可用:
- 设置其中3个为主mds,剩余一个为备mds(公用备份)
ceph fs set cephfs max_mds 3
ceph fs status
- 设置mon-01、mon-02上的mds为主,设置mon-03上的mds为mon-01上mds的专用备份,设置osd-01上的mds为mon-02上mds的专用备份
ceph fs set cephfs max_mds 2
vim /etc/ceph.conf 添加以下内容
[mds.ceph-mon-03]
mds_standby_replay = true
mds_standby_for_name = ceph-mon-01
[mds.ceph-osd-01]
mds_standby_replay = true
mds_standby_for_name = ceph-mon-02
[mds.ceph-mon-01]
mds_standby_replay = true
mds_standby_for_name = ceph-mon-03
[mds.ceph-mon-02]
mds_standby_replay = true
mds_standby_for_name = ceph-osd-01
systemctl restart ceph-mds.target
ceph fs status
如下图所示,目前mon-1和mon-02为主mds,osd-01和mon-03为备mds
测试停掉mon-01的mds服务,验证是否是mon-03来接替它
systemctl stop ceph-mds@ceph-mon-01.service
ceph fs status
如下图所示,停掉mon-01的mds后,mon-03的mds成为主
通过ganesha将CephFS导出为NFS使用
首先将ceph.client.admin.keyring和ceph.conf拷贝只ganesha服务端
scp /etc/ceph/ceph.conf /etc/ceph/ceph.client.admin.keyring root@192.168.122.15:/etc/ceph/
然后安装配置ganesha服务端
apt -y install nfs-ganesha-ceph
vim /etc/ganesha/ganesha.conf
NFS_CORE_PARAM {
Enable_NLM = false;
Protocols = 3,4;
Enable_RQUOTA = false;
}
EXPORT_DEFAULTS {
Access_Type = RW;
}
EXPORT
{
Export_Id = 1;
Path = /;
Pseudo = /data;
Access_Type = RW;
Squash = No_root_squash;
Sectype = sys;
FSAL {
Name = CEPH;
hostname = "192.168.211.15";
}
}
LOG {
Default_Log_Level = WARN;
}
systemctl restart nfs-ganesha
tail -f /var/log/ganesha/ganesha.log
客户端挂载使用
apt -y install nfs-common
mount -t nfs 192.168.211.15:/data /mnt
cd /mnt
cat hosts
dd if=/dev/zero of=./file1 bs=1M count=50
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)