一、文件存储系统介绍
Ceph文件系统提供了任何大小的符合posix标准的分布式文件系统,它使用Ceph RADOS存储数据。要实现Ceph文件系统,您需要一个正在运行的Ceph存储集群和至少一个Ceph元数据服务器(MDS)来管理其元数据并使其与数据分离,这有助于降低复杂性和提高可靠性。下图描述了Ceph FS的架构视图及其接口:
libcephfs库在支持其多个客户机实现方面发挥着重要作用。它具有本机Linux内核驱动程序支持,因此客户机可以使用本机文件系统安装,例如,使用mount命令。它与SAMBA紧密集成,支持CIFS和SMB。 Ceph FS使用cephfuse模块扩展到用户空间(FUSE)中的文件系统。它还允许使用libcephfs库与RADOS集群进行直接的应用程序交互。作为Hadoop HDFS的替代品, Ceph FS越来越受欢迎。
只有Ceph FS才需要Ceph MDS;其他存储方法的块和基于对象的存储不需要MDS服务。 Ceph MDS作为一个守护进程运行,它允许客户机挂载任意大小的POSIX文件系统。 MDS不直接向客户端提供任何数据;数据服务仅由OSD完成。MDS提供了一个带有智能缓存层的共享连贯文件系统,因此大大减少了读写操作。它将其优势扩展到动态子树分区,并为单个元数据提供单个MDS。
MDS不存储本地数据,这在某些情况下非常有用。如果MDS守护程序死亡,我们可以在任何具有群集访问权限的系统上重新启动它。Metadata Server的守护程序配置为主动或被动。主MDS节点变为活动状态,其余节点将进入待机状态。在主MDS发生故障的情况下,第二个节点负责并被提升为活动状态。为了更快地恢复,您可以指定备用节点应该跟随其中一个活动节点,这将在内存中保留相同的数据以预先填充缓存。
客户端我们一般有两种方式,一种是 Linux 内核提供的,一种是 FUSE 客户端,内核客户端性能会好一些,而 FUSE 客户端功能会强大些,比如强制配额。
二、部署cephfs
2.1 在ceph01节点使用 ceph-deploy 部署 cephfs
必须至少部署一个元数据服务器守护程序才能使用CephFS。
[cephadmin@ceph01 ~]$ cd my-cluster/
[cephadmin@ceph01 my-cluster]$ ceph-deploy mds create ceph01 ceph02 ceph03
2.2 创建ceph存储池
Ceph文件系统至少需要两个RADOS池,一个用于数据,一个用于元数据。在配置这些池时,可以考虑:
- 为元数据池使用更高的复制级别,因为这个池中的任何数据丢失都可能使整个文件系统无法访问。
- 为元数据池使用低延迟存储(如ssd),因为这将直接影响客户机上文件系统操作的观察延迟。
[cephadmin@ceph01 my-cluster]$ ceph osd pool create cephfs_data 128 [cephadmin@ceph01 my-cluster]$ ceph osd pool create cephfs_metadata 128
# 启用文件系统 [cephadmin@ceph01 my-cluster]$ ceph fs new cephfs cephfs_metadata cephfs_data
查看文件系统
[cephadmin@ceph01 my-cluster]$ ceph mds stat cephfs-1/1/1 up {0=ceph03=up:active}, 2 up:standby
[cephadmin@ceph01 my-cluster]$ ceph osd pool ls ………… cephfs_data cephfs_metadata
[cephadmin@ceph01 my-cluster]$ ceph fs ls name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
2.3 创建用户(可选,因为部署时,已经生成,我们最好再创建一个普通用户)
[cephadmin@ceph01 my-cluster]$ ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow r, allow rw path=/' osd 'allow rw pool=cephfs_data' -o ceph.client.cephfs.keyring
2.4 查看生成的key
[cephadmin@ceph01 my-cluster]$ cat ceph.client.cephfs.keyring [client.cephfs] key = AQBjVUZeJMQKBRAAh1Lp7p7A0YdBnw7VeZPJtQ== [cephadmin@ceph01 my-cluster]$ ceph auth get-key client.cephfs AQBjVUZeJMQKBRAAh1Lp7p7A0YdBnw7VeZPJtQ==
三、通过内核驱动挂载Ceph FS
在Linux内核2.6.34和以后的版本中添加了对Ceph的支持。
3.1 在客户端创建挂载目录
[root@192-168-5-70 ~]# mkdir /mnt/cephfs
3.2 在客户端进行挂载(方法1):
# secret为上面生成的key
[root@192-168-5-70 ~]# mount -t ceph 192.168.5.91:/ /mnt/cephfs -o name=cephfs,secret=AQBjVUZeJMQKBRAAh1Lp7p7A0YdBnw7VeZPJtQ== [root@192-168-5-70 ~]# df -h /mnt/cephfs/ Filesystem Size Used Avail Use% Mounted on 192.168.5.91:/ 8.4G 0 8.4G 0% /mnt/cephfs [root@192-168-5-70 ~]# umount /mnt/cephfs
# 使用多个mon进行挂载 [root@192-168-5-70 ~]# mount -t ceph 192.168.5.91,192.168.5.92,192.168.5.93:/ /mnt/cephfs -o name=cephfs,secret=AQBjVUZeJMQKBRAAh1Lp7p7A0YdBnw7VeZPJtQ== [root@192-168-5-70 ~]# df -h /mnt/cephfs/ Filesystem Size Used Avail Use% Mounted on 192.168.5.91,192.168.5.92,192.168.5.93:/ 8.4G 0 8.4G 0% /mnt/cephfs
3.3 在客户端不显示key挂载(方法2):
[root@192-168-5-70 ~]# umount /mnt/cephfs [root@192-168-5-70 ~]# mkdir /etc/ceph [root@192-168-5-70 ~]# echo 'AQBjVUZeJMQKBRAAh1Lp7p7A0YdBnw7VeZPJtQ==' > /etc/ceph/cephfskey
# 把key使用文件的方式进行挂载,端口默认为6789可以省略不写 [root@192-168-5-70 ~]# mount -t ceph 192.168.5.91:6789:/ /mnt/cephfs -o name=cephfs,secretfile=/etc/ceph/cephfskey [root@192-168-5-70 ~]# df -h /mnt/cephfs/ Filesystem Size Used Avail Use% Mounted on 192.168.5.91:6789:/ 8.4G 0 8.4G 0% /mnt/cephfs
3.4 设置开机自动进行挂载
[root@192-168-5-70 ~]# echo '192.168.5.91:6789:/ /mnt/cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfskey,_netdev,noatime 0 0' >> /etc/fstab # 测试写入数据 [root@192-168-5-70 ~]# umount /mnt/cephfs [root@192-168-5-70 ~]# mount /mnt/cephfs [root@192-168-5-70 ~]# dd if=/dev/zero of=/mnt/cephfs/file1 bs=1M count=1024
四、通过 FUSE 挂载 Ceph FS
Ceph文件系统由LINUX内核本地支持;但是,如果您的主机在较低的内核版本上运行,或者您有任何应用程序依赖项,您总是可以使用FUSE客户端让Ceph挂载Ceph FS。
4.1 安装ceph-fuse
[root@192-168-5-70 ~]# cat /etc/yum.repos.d/ceph.repo [ceph] name=ceph baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/ gpgcheck=0 [ceph-noarch] name=cephnoarch baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ gpgcheck=0 [root@192-168-5-70 ~]# yum install ceph-fuse -y
4.2 把服务端生成的key文件拷贝到客户端
[cephadmin@ceph01 ~]$ scp my-cluster/ceph.client.cephfs.keyring root@192.168.5.70:/etc/ceph/
4.3 ceph-fuse进行挂载
# 先取消之前的挂载 [root@192-168-5-70 ~]# umount /mnt/cephfs [root@192-168-5-70 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 50G 2.2G 48G 5% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 17M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/rbd0 4.0G 233M 3.8G 6% /mnt/ceph-disk1 /dev/rbd2 2.0G 33M 2.0G 2% /mnt/ceph-disk2 tmpfs 799M 0 799M 0% /run/user/0 # 进行挂载 [root@192-168-5-70 ~]# ceph-fuse --keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m 192.168.5.91:6789 /mnt/cephfs/ 2020-02-14 16:38:42.460 7f0bed64fc00 -1 init, newargv = 0x55a6a780bd40 newargc=7ceph-fuse[388766]: starting ceph client ceph-fuse[388766]: starting fuse [root@192-168-5-70 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 50G 2.2G 48G 5% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 17M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/rbd0 4.0G 233M 3.8G 6% /mnt/ceph-disk1 /dev/rbd2 2.0G 33M 2.0G 2% /mnt/ceph-disk2 tmpfs 799M 0 799M 0% /run/user/0 ceph-fuse 8.3G 1.0G 7.3G 13% /mnt/cephfs
4.4 设置开机自动挂载
[root@192-168-5-70 ~]# vim /etc/ceph/ceph.conf [global] mon_host = 192.168.5.91,192.168.5.92,192.168.5.93 [root@192-168-5-70 ~]# vim /etc/fstab none /mnt/cephfs fuse.ceph ceph.id=cephfs,_netdev,defaults 0 0
五、Ceph配额管理
CephFS允许在系统中的任何目录上设置配额。配额可以限制 目录层次结构中该点下面的字节数或文件数。
5.1 限制
- CephFS配额 依赖 于正在挂载文件系统的 客户端 的合作,以在达到限制时停止写入,不应依赖配额来防止在客户端完全不受信任的环境中写入。
- 配额是不精确的。写入文件系统的进程将在达到配额限制后的短时间内停止。它们将不可避免地被允许在配置的限制上写入一些数据。他们能够走多远的配额主要 取决于时间量 ,而不是数据量。一般来说,编写者将在超过配置限制的十秒内停止 。
- 配额在 内核客户端4.17 及更高版本中实现。 用户空间客户端(libcephfs,ceph-fuse)支持配额。Linux内核客户端> = 4.17支持CephFS配额,但仅限于 mimic+ 集群 。内核客户端(甚至是最新版本)将无法处理旧群集上的配额,即使它们可能能够设置配额扩展属性。
5.2 先拷贝管理员权限的key
[cephadmin@ceph01 ~]$ scp my-cluster/ceph.client.admin.keyring root@192.168.5.70:/etc/ceph/
5.3 重新进行客户端挂载
[root@192-168-5-70 ~]# ceph-fuse --keyring /etc/ceph/ceph.client.admin.keyring --name client.admin -m 192.168.5.91:6789 /mnt/cephfs/
5.4 设置配额文件最大容量100MB,文件数量不大于3
[root@192-168-5-70 ~]# yum install attr -y [root@192-168-5-70 ~]# cd /mnt/cephfs/ [root@192-168-5-70 cephfs]# mkdir quotadir [root@192-168-5-70 cephfs]# setfattr -n ceph.quota.max_bytes -v 100000000 quotadir [root@192-168-5-70 cephfs]# setfattr -n ceph.quota.max_files -v 3 quotadir
5.5 显示配额
[root@192-168-5-70 cephfs]# getfattr -n ceph.quota.max_bytes quotadir # file: quotadir ceph.quota.max_bytes="100000000" [root@192-168-5-70 cephfs]# getfattr -n ceph.quota.max_files quotadir # file: quotadir ceph.quota.max_files="3"