CephFs使用

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。

CephFs使用_第1张图片

如下图,mds的数据结构类似于linux系统的根型目录结构以及nginx中的缓存目录分层一样,是一个倒置的树状结构。使用多个mds时,cephfs会将文件系统树分割成子树,每个子树可以交给特定的MDS进行权威管理,从而达到了随着元数据服务器数量的增加,集群性能线性地扩展。例如,集群中有3个active的mds,假设根目录下有3个子目录/a、、/b和/c,此时/a的元数据可以交给mds1处理,/b的元数据可以交给mds2处理,/c的元数据可以交给mds2处理,这样就可以提升cephfs的性能。

CephFs使用_第2张图片

启用cephfs

首先确认集群中已经部署了至少一个mds服务
CephFs使用_第3张图片

创建两个存储池:cephfs_data和cephfs_metadata,前者用于存储cephfs的数据,后者用于存储cephfs的元数据

ceph osd pool create cephfs_data 32 32
ceph osd pool create cephfs_metatdata 64 64

CephFs使用_第4张图片

创建一个CephFS,并验证其状态

ceph fs new cephfs cephfs_metatdata cephfs_data	#创建一个名为cephfs的文件系统
ceph fs ls	#列出集群中所有的文件系统
ceph fs status cephfs	#查看cephfs的状态

CephFs使用_第5张图片

cephalexin

客户端挂载

客户端挂载CephFS时支持两种方式,分别是:

  1. 内核空间挂载,需要内核支持ceph模块
  2. 用户空间挂载,需要安装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 [email protected]:/etc/ceph/

内核挂载

客户端安装ceph-common

apt -y install ceph-common

挂载cephfs

#将cephfs挂载至/data目录
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	#查看挂载点状态

CephFs使用_第6张图片

配置开机自动挂载

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使用_第7张图片

卸载cephfs

fusermount -u /mnt

CephFs使用_第8张图片

设置开机自动挂载

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个为主,一个为共用的备,也可以设置两个为主,剩余两个设置为一一对应两个主做备份,如下图所示:
CephFs使用_第9张图片

设置备份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

CephFs使用_第10张图片
如上图所示,集群中有4个mds服务,处于激活状态的mds有一个,处于备份状态的mds有3个

可以通过以下两种方式优化mds的结构,实现高可用:

  1. 设置其中3个为主mds,剩余一个为备mds(公用备份)
ceph fs set cephfs max_mds 3	#设置最多处于active的mds数量为3
ceph fs status	#验证

CephFs使用_第11张图片

  1. 设置mon-01、mon-02上的mds为主,设置mon-03上的mds为mon-01上mds的专用备份,设置osd-01上的mds为mon-02上mds的专用备份
ceph fs set cephfs max_mds 2	#将主mds的最大数量设置为2

#在所有mds节点修改ceph配置文件,添加以下内容
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
#################################

#依次在所有mds节点重启mds服务
systemctl restart ceph-mds.target

#验证mds状态
ceph fs status

如下图所示,目前mon-1和mon-02为主mds,osd-01和mon-03为备mds

CephFs使用_第12张图片

测试停掉mon-01的mds服务,验证是否是mon-03来接替它

systemctl stop [email protected]

ceph fs status

如下图所示,停掉mon-01的mds后,mon-03的mds成为主
CephFs使用_第13张图片

通过ganesha将CephFS导出为NFS使用

首先将ceph.client.admin.keyring和ceph.conf拷贝只ganesha服务端

scp /etc/ceph/ceph.conf /etc/ceph/ceph.client.admin.keyring [email protected]:/etc/ceph/

然后安装配置ganesha服务端

apt -y install nfs-ganesha-ceph

vim /etc/ganesha/ganesha.conf	#修改ganesha配置
#############################
NFS_CORE_PARAM {
        Enable_NLM = false;
        Protocols = 3,4;
        Enable_RQUOTA = false;
}
EXPORT_DEFAULTS {
        Access_Type = RW;
}
EXPORT
{
        Export_Id = 1;
        Path = /;	#cephfs的路径
        Pseudo = /data;	#对外提供nfs的路径
        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		#重启ganesha服务
tail -f /var/log/ganesha/ganesha.log	#查看ganesha的日志,确没有报错

在这里插入图片描述

客户端挂载使用

#安装nfs客户端
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

在这里插入图片描述
CephFs使用_第14张图片

你可能感兴趣的:(ceph,ceph)