参考文档:

  1. CEPH FILESYSTEM:http://docs.ceph.com/docs/master/cephfs/
  2. CephFS best practices:http://docs.ceph.com/docs/master/cephfs/best-practices/
  3. MDS STAT:http://docs.ceph.com/docs/master/cephfs/mds-states/
  4. Mount CephFS with the Kernel Driver:http://docs.ceph.com/docs/master/cephfs/kernel/
  5. Mount CephFS using FUSE:http://docs.ceph.com/docs/master/cephfs/fuse/
  6. Ceph PGs per Pool Calculator:https://ceph.com/pgcalc/
  7. CEPH pg/pgs:https://www.xiaobo.li/?p=1004

一.环境准备

1. CephFS

CEPH FILESYSTEM-LMLPHP

2. 环境

《CEPH LIO iSCSI Gateway》中的环境为基础,即:

Hostname

IP

Service

Remark

ceph01

public:172.30.200.57

cluster:192.30.200.57

 

1. centos7.5 with kernel v4.18.7-1;

2. ceph-13.2.1 mimic (stable),已部署

3. ntp已部署;

4. 禁用selinux,firewalld或iptables。

ceph02

public:172.30.200.58

cluster:192.30.200.58

 

ceph03

public:172.30.200.59

cluster:192.30.200.59

 

ceph-client

172.30.200.50

 

ceph-fuse-12.2.8-0(ceph yum)

二.部署CephFS

1. 创建ceph mds

Ceph元数据服务器(MetaDataServer,MDS)主要用于管理文件系统的命名空间。Ceph集群中的元数据与数据均存储在对象存储集群中,MDS类似于元数据的代理缓存服务器(不负责存储元数据),但为了实现扩展性,两者是分开独立管理

Ceph MDS不是一个必需角色,只在使用CephFS的时需要,CephFS至少需要1台MDS,最佳实践中也建议部署1台,但可以部署多台,默认是主备关系。

# 通过部署服务器部署,格式:ceph-deploy mds create HOST1[:OSD-DAEMON-NAME];
# 后期增加MDS也可通过此方式
[root@ceph01 ~]# su - cephde
[cephde@ceph01 ~]$ cd cephcluster/
[cephde@ceph01 cephcluster]$ ceph-deploy mds create ceph01 ceph02

CEPH FILESYSTEM-LMLPHP

# 查看mds守护服务,ceph02节点同理;
# 删除mds步骤:首先停止mds守护服务;再通过”ceph mds fail X”删除
[cephde@ceph01 cephcluster]$ sudo systemctl status ceph-mds@ceph01

CEPH FILESYSTEM-LMLPHP

2. 创建pool

# 1个Cephfs至少需要两个pool,MDS与数据独立管理;
# 粗略的 <pg_num> 的设定规则:
# 若少于 5 个 OSD, 设置 pg_num 为 128;
# 5~10 个 OSD,设置 pg_num 为 512;
# 10~50 个 OSD,设置 pg_num 为 4096;
# 除了<pg_num> ,还有一个可选参数 <pgp_num> ,可不设置,pgp是为了管理placement而存在的专门的pg,其pg的数量应该保持一致;
# pg数只能增加,无法减少;增加pg_num后必须同时增减pgp_num
[root@ceph01 ~]# ceph osd pool create metadata 64
[root@ceph01 ~]# ceph osd pool create data 64

3. 创建CephFS

# 格式:ceph fs new CEPHFS-NAME METADATA-POOL DATA-POOL;
# 删除cephfs需要提前删除mds:ceph fs rm CEPHFS-NAME --yes-i-really-mean-it;
# 查看:ceph fs ls
[root@ceph01 ~]# ceph fs new cephfs metadata data

CEPH FILESYSTEM-LMLPHP

# 同步观察ceph集群名为cephfs的文件系统状态变化;
# 部署在ceph02节点的MDS被确认为主MDS,被分配”rank 0”,处于active状态
[root@ceph02 ~]# ceph -w

CEPH FILESYSTEM-LMLPHP

# 或:ceph mds stat;
# 可用的文件系统一定有1个mds处于”up:active”状态;在创建cephfs前,通过”ceph mds stat”可见mds状态处于”up:standby”
[root@ceph01 ~]# ceph -s

CEPH FILESYSTEM-LMLPHP

三.挂载CephFS

在ceph-client节点挂载cephfs,CephFS有两种挂载方式:

  1. 通过内核模块挂载,性能相对更佳;
  2. 通过FUSE(Filesystem in Userspace,用户空间文件系统)挂载,fuse客户端基本可与服务器同步。

1. 通过内核驱动挂载CephFS

通过内核挂载cephfs,对内核版本有一定要求,最佳实践中并未给出最低版本的要求,只是建议如果从Ceph 10.x (Jewel) 算起,最好用 4.x 以上的内核,但v3.x基本支持

1)挂载

# 创建挂载点
[root@ceph-client ~]# mkdir -p /cephfs # 注意MDS的状态:up:active
# 挂载格式:mount -t ceph Mon-IP:6789:/ /MOUNTPOINT [-o name=amdin,secret=Keyring\secretfile=/Path/to/Secretfile];
# 默认采用ceph-deploy部署ceph集群是开启了cephx认证,需要挂载secret-keyring,即集群mon节点/etc/ceph/ceph.client.admin.keyring文件中的”key”值,采用secretfile可不用暴露keyring,但有1个bug(https://bugzilla.redhat.com/show_bug.cgi?id=1030402),始终报错:libceph: bad option at 'secretfile=/etc/ceph/admin.secret';
# 如果ceph集群含多个文件系统(默认只能创建1个文件系统,多文件系统属于实验性质,需打开开关),挂载时需要指定,参数:-o mds_namespace=CEPHFS-Name,
[root@ceph-client ~]# mount -t ceph 172.30.200.57:6789:/ /cephfs -o name=admin,secret=AQBzx5hbtt2iJxAAE4dsque5hpNzWOEYzGNzBw==

2)查看挂载情况

# 3副本环境,ceph集群450GB的总容量合并为140GB左右
[root@ceph-client ~]# df -Th

CEPH FILESYSTEM-LMLPHP

# 也可通过”dmesg | tail”观察挂载情况
[root@ceph-client ~]# dmesg | tail

CEPH FILESYSTEM-LMLPHP

3)设置开机启动挂载

# filesystem列设置为”ceph”,filesystem parameters列设置挂载user/key,时间等;
# noatime:禁止更新文件与目录的inode访问时间,以获得更快的访问速度;
# _netdev:标识文件系统位于网络上,防止网络启动前挂载
[root@ceph-client ~]# vim /etc/fstab
# cephfs
172.30.200.57:6789:/ /cephfs ceph name=admin,secret=AQBzx5hbtt2iJxAAE4dsque5hpNzWOEYzGNzBw==,noatime,_netdev 0 0

2. 通过FUSE挂载CephFS

1)准备

# 安装ceph-fuse客户端,需要提前设置ceph yum源
[root@ceph-client ~]# yum install ceph-fuse -y # 客户端挂载cephfs时,默认在/etc/ceph目录下读取需要的文件,即ceph集群mon节点的ceph.conf文件与ceph.client.admin.keyring文件
[root@ceph-client ~]# mkdir -p /etc/ceph
[root@ceph-client ~]# scp [email protected]:/etc/ceph/ceph.c* /etc/ceph/ # 卸载通过内核挂载的cephfs
[root@ceph-client ~]# umount /cephfs/

2)挂载

# 格式1:ceph-fuse /MOUNTPOINT,ceph-fuse读取ceph.conf文件,选择可用的mon节点挂载,此方式具备冗余性(依赖mon节点的冗余);
# 格式2:ceph-fuse [-k <keyring_path>/ceph.client.admin.keyring]-m Mon-IP:6789 /MOUNTPOINT,挂载效果同格式1;
# 格式3:首先启动ceph-fuse.target服务:systemctl start ceph-fuse.target;再(依赖前者)启动挂载:systemctl start ceph-fuse@/MOUNTPOINT.service,unit文件为/usr/lib/systemd/system/[email protected],需要根据挂载点启动服务,挂载效果与前两种方式相同
[root@ceph-client ~]# ceph-fuse /cephfs

CEPH FILESYSTEM-LMLPHP

3)查看挂载情况

# 命令”dmesg | tail”也可查看;
# 通过格式1挂载,filesystem源是ceph-fuse,并未绑定特定mon节点,文件系统是fuse.ceph-fuse
[root@ceph-client ~]# df -Th

CEPH FILESYSTEM-LMLPHP

4)设置开机启动挂载

# device列设置“ceph-fuse”或“id=admin”都可以;
# filesystem列设置为”fuse.ceph”,注意不是” fuse.ceph-fuse”;
# filesystem parameters列设置挂载时间
[root@ceph-client ~]# vim /etc/fstab
# cephfs
ceph-fuse /cephfs fuse.ceph noatime,_netdev 0 0
05-08 14:53