Ceph 文件系统(四)

一、文件存储系统介绍

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"

猜你喜欢

转载自www.cnblogs.com/cyleon/p/12308366.html