• 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"
  • 相关阅读:
    THUWC2020 游记
    USACO14MAR The Lazy Cow(Gold)
    luogu P3768 简单的数学题
    2017/9/22模拟赛
    2017/9/20模拟赛
    2017/9/15模拟赛
    刷屏代码·稳 from林凯
    2017/9/13模拟赛
    【9018:1368】八数码
    2017/9/10模拟赛
  • 原文地址:https://www.cnblogs.com/cyleon/p/12308366.html
Copyright © 2020-2023  润新知