v14.2.8
内核驱动依赖:
https://docs.ceph.com/docs/master/cephfs/kernel-features/
https://docs.ceph.com/docs/master/cephfs/
Ceph文件系统或CephFS是在Ceph的分布式对象存储RADOS之上构建的POSIX兼容文件系统。
文件元数据与文件数据存储在单独的pool中,并通过可调整大小的元数据服务器或MDS集群提供服务,该集群可扩展以支持更高吞吐量的元数据工作负载。文件系统的客户端可以直接访问RADOS以读取和写入文件数据块。
前提,已经安装了mds。
一、创建文件系统
一个Ceph文件系统至少需要两个Pool,一个用于数据,另一个用于元数据。
数据与元数据都是存储到OSD里。
创建pool
[root@cephnode1 ~]# ceph osd pool create cephfs_data 128 128
pool 'cephfs_data' created
[root@cephnode1 ~]# ceph osd pool create cephfs_metadata 32 32
pool 'cephfs_metadata' created
[root@cephnode1 ~]#
通常,元数据池最多具有几GB的数据。因此,通常建议使用较少的PG。实际上,大型群集通常使用64或128。
我这里只是测试就32了。
创建文件系统
ceph fs new <fs_name> <metadata> <data>
[root@cephnode1 ~]# ceph fs new mycephfs cephfs_metadata cephfs_data
new fs with metadata pool 14 and data pool 13
查看信息
[root@cephnode1 ~]# ceph mds stat
mycephfs:1 {0=cephnode2=up:active} 2 up:standby
[root@cephnode1 ~]#
主备模式, cephnode2为主。
状态信息:
[root@cephnode1 ~]# ceph fs status mycephfs
mycephfs - 0 clients
========
+------+--------+-----------+---------------+-------+-------+
| Rank | State | MDS | Activity | dns | inos |
+------+--------+-----------+---------------+-------+-------+
| 0 | active | cephnode2 | Reqs: 0 /s | 10 | 13 |
+------+--------+-----------+---------------+-------+-------+
+-----------------+----------+-------+-------+
| Pool | type | used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata | 1536k | 27.8G |
| cephfs_data | data | 0 | 27.8G |
+-----------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
| cephnode3 |
| cephnode1 |
+-------------+
MDS version: ceph version 14.2.8 (2d095e947a02261ce61424021bb43bd3022d35cb) nautilus (stable)
查询cephfs列表:
[root@cephnode1 ~]# ceph fs ls
name: mycephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
客户端授权
[root@cephnode1 ~]# ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs_data, allow rw pool=cephfs_metadata'
[client.cephfs]
key = AQDAV3NeMMdCLBAAr/YtWYB9kI9ZKFlewUEaKA==
查看授权信息:
[root@cephnode1 ~]# ceph auth get client.cephfs
exported keyring for client.cephfs
[client.cephfs]
key = AQDAV3NeMMdCLBAAr/YtWYB9kI9ZKFlewUEaKA==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rw pool=cephfs_data, allow rw pool=cephfs_metadata"
[root@cephnode1 ~]#
二、挂载文件系统
挂载有两种方式:
内核挂载,就可客户端使用mount挂载。
FUSE挂载,使用ceph客户端工具挂碍。
如何选择
https://docs.ceph.com/docs/master/cephfs/mount-prerequisites/
FUSE客户端是最易于访问且最容易升级到存储集群使用的Ceph版本的,而内核客户端将始终提供更好的性能。
内核挂载
https://docs.ceph.com/docs/master/cephfs/mount-using-kernel-driver/
作为一个粗略的指导,从Ceph 10.x(Jewel)开始,您应该至少使用4.x内核。如果使用旧的内核,则应使用FUSE客户端而不是内核客户端。
如果您使用的Linux发行版包含CephFS支持,则此建议不适用,因为在这种情况下,发行商将负责将修补程序反向移植到其稳定的内核:请与供应商联系。
我这里挂载没问题: centos 7.6
挂载命令:
mount -t ceph {device-string}:{path-to-mounted} {mount-point} -o {key-value-args} {other-args}
device-string
: monitor
节点地址
path-to-mounted
: 要挂载的目录,一般都是挂载根/
。
mount-point
: 挂载点
key-value-args
: 指定CephX凭据, 如果禁用了CephX,可以省略。
比如:
[root@client /]# mount -t ceph 172.100.102.91:6789,172.100.102.92:6789,172.100.102.93:6789:/ /mnt/mycephfs -o name=cephfs,secret=AQDAV3NeMMdCLBAAr/YtWYB9kI9ZKFlewUEaKA==
name
: 指定的是用户名的id,不是完整的type.id用户名。
[root@client mycephfs]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda2 xfs 146G 1.6G 145G 2% /
devtmpfs devtmpfs 990M 0 990M 0% /dev
tmpfs tmpfs 1000M 0 1000M 0% /dev/shm
tmpfs tmpfs 1000M 8.9M 991M 1% /run
tmpfs tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
tmpfs tmpfs 200M 0 200M 0% /run/user/0
172.100.102.91:6789,172.100.102.92:6789,172.100.102.93:6789:/ ceph 28G 0 28G 0% /mnt/mycephfs
为了防止shell历史记录里有秘钥,也可以从文件里读取秘钥。secretfile
指定文件。 文件权限最好是600
。
mount -t ceph :/ /mnt/mycephfs -o name=foo,secretfile=/etc/ceph/foo.secret
如果集群中有多个文件系统,非默认的需要添加参数fs
参数。
我这个版本的ceph,多文件系统还是实验功能,这个fs
参数不能用。新版本可能支持了。
mount -t ceph :/ /mnt/mycephfs2 -o name=fs,fs=mycephfs2
永久生效
写到fstab里永久生效
[{ipaddress}:{port}]:/ {mount}/{mountpoint} ceph [name=username,secret=secretkey|secretfile=/path/to/secretfile],[{mount.options}]
比如:
172.100.102.91:6789,172.100.102.92:6789,172.100.102.93:6789:/ /mnt/mycephfs ceph name=cephfs,secret=AQDAV3NeMMdCLBAAr/YtWYB9kI9ZKFlewUEaKA==,_netdev,noatime 0 0
FUSE挂载
因为ceph-fuse
是安装在用户空间的, 所以性能可能相对较低, 但是更易于管理。
安装ceph-fuse
使用之前安装ceph的yum源。
[root@cephnode1 yum.repos.d]# cat ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
将集群的ceph.conf拷贝到客户端并且把客户端使用的key放到文件里。
[root@client ~]# ls /etc/ceph
ceph.client.cephfs.keyring ceph.conf
ceph.client.cephfs.keyring
文件是手动创建的,内容就是授权给客户端使用的key。
[root@client ~]# cat /etc/ceph/ceph.client.cephfs.keyring
[client.cephfs]
key = AQDAV3NeMMdCLBAAr/YtWYB9kI9ZKFlewUEaKA==
[root@client ~]#
把key文件权限给一下。为了安全。
chmod 600 ceph.client.cephfs.keyring
挂载
挂载命令:
ceph-fuse {mountpoint} {options}
如:
[root@client ceph]# ceph-fuse --keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m 172.100.102.91:6789,172.100.102.92:6789,172.100.102.93:6789 /mnt/mycephfs/
ceph-fuse[1437]: starting ceph client
2020-03-19 19:56:06.417 7f79f1ae0e00 -1 init, newargv = 0x557ebbb0c870 newargc=7
ceph-fuse[1437]: starting fuse
[root@client ceph]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda2 xfs 146G 1.8G 145G 2% /
devtmpfs devtmpfs 990M 0 990M 0% /dev
tmpfs tmpfs 1000M 0 1000M 0% /dev/shm
tmpfs tmpfs 1000M 8.8M 991M 1% /run
tmpfs tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
tmpfs tmpfs 200M 0 200M 0% /run/user/0
ceph-fuse fuse.ceph-fuse 28G 28M 28G 1% /mnt/mycephfs
永久生效
也是添加到fstab。
none /mnt/mycephfs fuse.ceph ceph.id={user-ID}[,ceph.conf={path/to/conf.conf}],_netdev,defaults 0 0
如:
none /mnt/mycephfs fuse.ceph ceph.id=cephfs,ceph.conf=/etc/ceph/ceph.conf,_netdev,defaults 0 0
[root@client ceph]# mount -a
ceph-fuse[1561]: starting ceph client
2020-03-19 20:43:09.051 7f1ac5334e00 -1 init, newargv = 0x55712f0a1850 newargc=9
ceph-fuse[1561]: starting fuse
想要挂载子目录,添加一个ceph.client_mountpoint
参数就可以。
none /mnt/mycephfs fuse.ceph ceph.id=cephfs,ceph.client_mountpoint=/etc,ceph.conf=/etc/ceph/ceph.conf,_netdev,defaults 0 0
三、mds主从与多主模式
https://docs.ceph.com/docs/master/cephfs/multimds/
建议使用Linux内核客户端> = 4.14。
默认情况下,每个CephFS文件系统都为一个活动的MDS守护程序配置。为了扩展大型系统的元数据性能,您可以启用多个活动的MDS守护程序,这些守护程序将彼此共享元数据工作负载。
什么时候应该使用多主
当默认运行的单个MDS上的元数据性能出现瓶颈时,应配置多个活动的MDS守护程序。
添加更多守护程序可能不会提高所有工作负载的性能。通常,除非单个应用程序并行执行大量元数据操作,否则运行在单个客户端上的单个应用程序将不会受益于MDS守护程序数量的增加。
通常,受益于许多活动MDS守护程序的工作负载是具有许多客户端的工作负载,这些工作负载可能在多个单独的目录上工作。
需要有备用的mds
即使有多个活动的MDS守护程序,如果运行活动的守护程序的任何服务器发生故障,高可用性系统仍需要备用守护程序来接管。
因此,活动mds的最大数量最多只能比系统中MDS服务器的总数少一,也就是说最少要有一个是处于备用状态。
为了在多个服务器发生故障时保持可用,请增加系统中的备用守护程序的数量,与您希望承受的服务器故障的数量相匹配。
设置
每个CephFS文件系统都有一个max_mds设置,可以用来修改活动的mds数量。
ceph fs set <fs_name> max_mds 2
先看一下mds当前的状态, mycephfs文件系统中是1个up并且活动状态,2个up并且备用状态:
[root@cephnode1 ~]# ceph mds stat
mycephfs:1 {0=cephnode2=up:active} 2 up:standby
[root@cephnode1 ~]# ceph fs set mycephfs max_mds 2
修改以后,mycephfs文件系统,2活动(cephnode2与cephnode3),1备用
[root@cephnode1 ~]# ceph mds stat
mycephfs:2 {0=cephnode2=up:active,1=cephnode3=up:active} 1 up:standby
在重新设置为1个主以后,其他的主会慢慢退出活动状态,需要几秒到几分钟时间, 这时处于stopping状态。
[root@cephnode1 ~]# ceph mds stat
mycephfs:2 {0=cephnode2=up:active,1=cephnode1=up:stopping} 1 up:standby