CephFS使用

一、CephFS架构

Ceph 文件系统(CephFS)是 Ceph 提供的分布式文件系统。它建立在 Ceph 的对象存储之上,利用 RADOS(Reliable Autonomic Distributed Object Store)来实现文件数据和元数据的分布式存储与管理。
CephFS就是Ceph Filesystem 可以实现文件系统功能功能(符合POSIX标准-可移植操作系统接口),以实现内核中的ceph客户端模块被应用程序调用,客户端通过ceph协议挂载并使用ceph集群作为数据存储服务器。
在这里插入图片描述

在这里插入图片描述

CephFS需要运行Meta Data Services(MDS)服务,守护进程为ceph-mdsceph-mds进程管理与CephFS上存储的文件相关的元数据,并协调对ceph存储集群的访问。

在 linux 系统使用 ls 等操作查看某个目录下的文件的时候,会有保存在磁盘上的分区表记录文件的名称创建日期大小inode及存储位置等元数据信息,在 cephfs 由于数据是被打散为若干个离散的 object进行分布式存储,因此并没有统一保存文件的元数据,而且将文件的元数据保存到一个单独的存储池matedata pool,但是客户端并不能直接访问matedata pool 中的元数据信息,而是在读写数的时候有由MDS(matadata server)进行处理,读数据的时候由 MDS 从 matedata pool 加载元数据然后缓存在内存(用于后期快速响应其它客户端的请求)并返回给客户端,写数据的时候由 MDS 缓存在内存并同步到 matedatapool。

在这里插入图片描述

Cephfs的mds的数据结构类似于linux系统的根形目录结构及nginx中的缓存目录分层一样
在这里插入图片描述
nginx缓存目录:

[root@Cnpereading5-2 cache]# pwd 
/var/cache/nginx/cache
[root@Cnpereading5-2 cache]# ll
total 64
drwx------ 239 root root 4096 Sep  3 11:42 0
drwx------ 233 root root 4096 Sep  3 12:50 1
drwx------ 237 root root 4096 Sep  3 11:41 2
drwx------ 239 root root 4096 Sep  3 12:24 3
drwx------ 236 root root 4096 Sep  3 11:39 4
drwx------ 242 root root 4096 Sep  3 12:23 5
drwx------ 240 root root 4096 Sep  3 11:43 6
drwx------ 233 root root 4096 Sep  3 10:53 7
drwx------ 239 root root 4096 Sep  3 12:34 8
drwx------ 231 root root 4096 Sep  3 11:24 9
drwx------ 234 root root 4096 Sep  3 12:50 a
drwx------ 241 root root 4096 Sep  3 12:50 b
drwx------ 239 root root 4096 Sep  3 12:40 c
drwx------ 242 root root 4096 Sep  3 12:23 d
drwx------ 237 root root 4096 Sep  3 12:50 e
drwx------ 242 root root 4096 Sep  3 12:48 f
[root@Cnpereading5-2 cache]# ll 0/ff
total 64
-rw------- 1 root root 16890 Sep  3 10:22 4fdb35100a5cbe2b065b1c382ad1fff0
-rw------- 1 root root 23236 Sep  2 17:24 63439860f8f25d1e37e1e17e21c2bff0
-rw------- 1 root root 19591 Sep  3 10:51 f36dd93588e69e3acc997b2cb0b9dff0

二、部署CepfFS服务

1、部署MDS服务

如果要使用cephFS,需要部署mds服务

root@ceph-node1:~# apt install ceph-mds 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ceph-mds is already the newest version (18.2.4-1jammy).
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy  mds create ceph-node1
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadmin/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/local/bin/ceph-deploy mds create ceph-node1
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : create
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x74edce589500>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function mds at 0x74edce5df1d0>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  mds                           : [('ceph-node1', 'ceph-node1')]
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.mds][DEBUG ] Deploying mds, cluster ceph hosts ceph-node1:ceph-node1
[ceph-node1][DEBUG ] connection detected need for sudo
[ceph-node1][DEBUG ] connected to host: ceph-node1 
[ceph-node1][DEBUG ] detect platform information from remote host
[ceph-node1][DEBUG ] detect machine type
[ceph_deploy.mds][INFO  ] Distro info: debian bookworm/sid sid
[ceph_deploy.mds][DEBUG ] remote host will use systemd
[ceph_deploy.mds][DEBUG ] deploying mds bootstrap to ceph-node1
[ceph-node1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph-node1][WARNIN] mds keyring does not exist yet, creating one
[ceph-node1][DEBUG ] create a keyring file
[ceph-node1][DEBUG ] create path if it doesn't exist
[ceph-node1][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.ceph-node1 osd allow rwx mds allow mon allow profile mds -o /var/lib/ceph/mds/ceph-ceph-node1/keyring
[ceph-node1][INFO  ] Running command: sudo systemctl enable ceph-mds@ceph-node1
[ceph-node1][WARNIN] Created symlink /etc/systemd/system/ceph-mds.target.wants/ceph-mds@ceph-node1.service → /lib/systemd/system/ceph-mds@.service.
[ceph-node1][INFO  ] Running command: sudo systemctl start ceph-mds@ceph-node1
[ceph-node1][INFO  ] Running command: sudo systemctl enable ceph.target

到node1上查看进程是否启动

root@ceph-node1:~# ps -ef| grep mds 
ceph       34607       1  3 13:16 ?        00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id ceph-node1 --setuser ceph --setgroup ceph
root       34669   34319  0 13:16 pts/2    00:00:00 grep --color=auto mds

2、创建CephFS metadata和data存储池

使用CephFS之前需要事先于集群中创建一个文件系统,并为他分别指定元数据和数据相关的存储池。下面创建一个名为cephfs的文件系统用于测试,它使用cephfs-metadata为元数据存储池,使用cephfs-data为数据存储池,我事先已经创建好了

cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool create nginxFS-metadata 32 32 
pool 'nginxFS-metadata' created
cephadmin@ceph-deploy:~/ceph-cluster$ 
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool create nginxFS-data 128 128 
pool 'nginxFS-data' created
cephadmin@ceph-deploy:~/ceph-cluster$ ceph -s 
  cluster:
    id:     74d6f368-8875-4340-857f-0daa3e96b5dc
    health: HEALTH_WARN
            1 pool(s) do not have an application enabled
 
  services:
    mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 2h)
    mgr: ceph-mgr1(active, since 6d), standbys: ceph-mgr2
    mds: 1/1 daemons up, 1 standby
    osd: 16 osds: 16 up (since 3d), 16 in (since 4d)
    rgw: 1 daemon active (1 hosts, 1 zones)
 
  data:
    volumes: 1/1 healthy
    pools:   10 pools, 353 pgs
    objects: 422 objects, 147 MiB
    usage:   1.8 GiB used, 3.1 TiB / 3.1 TiB avail
    pgs:     353 active+clean
 

3、创建cephFS并验证

nginxFS 为cephfs名称,nginxFS-metadata 元数据池,nginxFS-data 数据池,顺序不能乱

cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs new nginxFS nginxFS-metadata nginxFS-data 
  Pool 'nginxFS-data' (id '16') has pg autoscale mode 'on' but is not marked as bulk.
  Consider setting the flag by running
    # ceph osd pool set nginxFS-data bulk true
new fs with metadata pool 15 and data pool 16

在这里插入图片描述
验证cephfs状态,状态为active则为正常

cephadmin@ceph-deploy:~/ceph-cluster$ ceph mds  stat
mycephfs:1 nginxFS:1 {mycephfs:0=ceph-mgr1=up:active,nginxFS:0=ceph-node1=up:active}

4、创建客户端账户

# 创建用户
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth add client.lisi mon 'allow r' mds 'allow rw' osd 'allow rwx pool=nginxFS-data'
added key for client.lisi

#验证用户
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.lisi
[client.lisi]
        key = AQBZntZmXCzTNxAArxGewqOwNoYPvyyhdXmByA==
        caps mds = "allow rw"
        caps mon = "allow r"
        caps osd = "allow rwx pool=nginxFS-data"
              
# 创建keyring文件
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.lisi -o ceph.client.lisi.keyring 
# 创建key文件
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth print-key client.lisi > lisi.key 
cephadmin@ceph-deploy:~/ceph-cluster$ 
cephadmin@ceph-deploy:~/ceph-cluster$ cat ceph.client.lisi.keyring 
[client.lisi]
        key = AQBZntZmXCzTNxAArxGewqOwNoYPvyyhdXmByA==
        caps mds = "allow rw"
        caps mon = "allow r"
        caps osd = "allow rwx pool=nginxFS-data"

5、安装ceph客户端并同步认证文件

在客户端执行

root@ceph-node1:/etc/ceph# vim ceph.client.lisi.keyring
root@ceph-node1:/etc/ceph# 
root@ceph-node1:/etc/ceph# cat ceph.client.lisi.keyring 
[client.lisi]
        key = AQBZntZmXCzTNxAArxGewqOwNoYPvyyhdXmByA==
        caps mds = "allow rw"
        caps mon = "allow r"
        caps osd = "allow rwx pool=nginxFS-data"
root@ceph-node1:/etc/ceph#  
root@ceph-node1:/etc/ceph# 
root@ceph-node1:/etc/ceph# ceph --id lisi -s 
  cluster:
    id:     74d6f368-8875-4340-857f-0daa3e96b5dc
    health: HEALTH_WARN
            insufficient standby MDS daemons available
            1 pool(s) do not have an application enabled
 
  services:
    mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 2h)
    mgr: ceph-mgr1(active, since 6d), standbys: ceph-mgr2
    mds: 2/2 daemons up
    osd: 16 osds: 16 up (since 3d), 16 in (since 4d)
    rgw: 1 daemon active (1 hosts, 1 zones)
 
  data:
    volumes: 2/2 healthy
    pools:   12 pools, 428 pgs
    objects: 444 objects, 147 MiB
    usage:   1.9 GiB used, 3.1 TiB / 3.1 TiB avail
    pgs:     428 active+clean

6、内核空间挂载ceph-fs

客户端挂载一般有几种方式:

  1. 内核客户端(Kernel Client):使用内置于 Linux 内核中的 Ceph 文件系统模块(ceph 模块)进行挂载。这种方式性能较高,适合需要高吞吐量和低延迟的应用场景。
  2. FUSE 客户端(Filesystem in Userspace):使用 ceph-fuse 工具在用户空间挂载 CephFS。这种方式不需要特权操作,适合在不方便修改内核或没有内核支持的环境中使用。
  3. CIFS/SMB 方式挂载:通过 Samba 服务将CephFS共享出来,然后使用 CIFS/SMB 协议挂载。这种方式适合需要跨平台文件共享的场景。
  4. NFS 方式挂载:通过 Ceph 提供的 NFS-Ganesha 服务将 CephFS 共享出来,然后使用 NFS 协议挂载。这种方式适合需要跨平台文件共享和传统 NFS 客户端的场景。
    最常用的就是内核空间挂载。
6.1 客户端通过key文件挂载
root@ceph-node1:/etc/ceph# mkdir /data 
# 6789是mon的端口,secret就是上面导出的lisi的key
# fs=xxx 挂载的时候指定挂载哪个mds(因为我这里创建了2个mds,如果只有1个则不用写)
root@ceph-node1:~# mount -t ceph 192.168.31.51:6789,192.168.31.52:6789,192.168.31.53:6789:/ /data -o name=lisi,secret=AQBZntZmXCzTNxAArxGewqOwNoYPvyyhdXmByA==,fs=nginxFS 
root@ceph-node1:/etc/ceph# df -h 
Filesystem                                                  Size  Used Avail Use% Mounted on
tmpfs                                                       1.6G  2.0M  1.6G   1% /run
/dev/sda3                                                   196G   13G  173G   7% /
tmpfs                                                       7.8G     0  7.8G   0% /dev/shm
tmpfs                                                       5.0M  4.0K  5.0M   1% /run/lock
/dev/sda2                                                   512M  6.1M  506M   2% /boot/efi
tmpfs                                                       1.6G   44K  1.6G   1% /run/user/1000
tmpfs                                                       7.8G   76K  7.8G   1% /var/lib/ceph/osd/ceph-0
tmpfs                                                       7.8G   76K  7.8G   1% /var/lib/ceph/osd/ceph-1
tmpfs                                                       7.8G   76K  7.8G   1% /var/lib/ceph/osd/ceph-2
tmpfs                                                       7.8G   76K  7.8G   1% /var/lib/ceph/osd/ceph-3
192.168.31.51:6789,192.168.31.52:6789,192.168.31.53:6789:/ 1013G     0 1013G   0% /data

# 验证写入数据
root@ceph-node1:/data# dd if=/dev/zero of=/data/testfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.913114 s, 115 MB/s
root@ceph-node1:/data# 
root@ceph-node1:/data# ll /data/
total 102404
drwxr-xr-x  2 root root         2  9月  3 13:53 ./
drwxr-xr-x 21 root root      4096  8月 30 14:43 ../
-rw-r--r--  1 root root         0  9月  3 13:49 232.txt
-rw-r--r--  1 root root 104857600  9月  3 13:53 testfile
# 查看挂载点信息
root@ceph-node1:/data# stat -f /data 
  File: "/data"
    ID: 5e084a4700000002 Namelen: 255     Type: ceph
Block size: 4194304    Fundamental block size: 4194304
Blocks: Total: 259199     Free: 259174     Available: 259174
Inodes: Total: 25         Free: -1
6.2 开机自动挂载
root@ceph-node1:~# cat /etc/fstab 
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda3 during installation
UUID=150a8624-6c19-4017-b12b-ef299c2bbbde /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sda2 during installation
UUID=18E6-2957  /boot/efi       vfat    umask=0077      0       1
/swapfile                                 none            swap    sw              0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0
192.168.31.51:6789,192.168.31.52:6789,192.168.31.53:6789:/   /data    ceph  defaults,name=lisi,secret=AQBZntZmXCzTNxAArxGewqOwNoYPvyyhdXmByA==,fs=nginxFS,_netdev 0 0 
root@ceph-node1:~# mount -a 

7、客户端模块挂载

客户端内核加载 ceph.ko 模块挂载 cephfs 文件系统

在这里插入图片描述

libcrc32c.ko 是 Linux 内核中提供的 CRC32C 算法的模块,其作用是为内核和其他模块提供CRC32C 校验功能。CRC32C 是一种循环冗余校验(CRC)算法,通常用于检测数据的完整性,特别适用于网络通信、存储系统等领域,可以在数据传输、存储过程中使用 CRC32C 校验来检测数据是否被篡改或损坏。

7.1 用户空间挂载ceph-fs

如果内核本较低而没有 ceph 模块,那么可以安装 ceph-fuse 挂载,但是推荐使用内核模块挂载。

7.1.1 安装ceph-fuse
root@ceph-node2:~# apt install ceph-fuse 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  ceph-fuse
0 upgraded, 1 newly installed, 0 to remove and 8 not upgraded.
Need to get 831 kB of archives.
After this operation, 2,451 kB of additional disk space will be used.
Get:1 https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-reef jammy/main amd64 ceph-fuse amd64 18.2.4-1jammy [831 kB]
Fetched 831 kB in 8s (103 kB/s)                                                                                                                        
Selecting previously unselected package ceph-fuse.
(Reading database ... 197408 files and directories currently installed.)
Preparing to unpack .../ceph-fuse_18.2.4-1jammy_amd64.deb ...
Unpacking ceph-fuse (18.2.4-1jammy) ...
Setting up ceph-fuse (18.2.4-1jammy) ...
Created symlink /etc/systemd/system/remote-fs.target.wants/ceph-fuse.target → /lib/systemd/system/ceph-fuse.target.
Created symlink /etc/systemd/system/ceph.target.wants/ceph-fuse.target → /lib/systemd/system/ceph-fuse.target.
Processing triggers for man-db (2.10.2-1) ...
root@ceph-node2:~# apt install ceph-common
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ceph-common is already the newest version (18.2.4-1jammy).
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
7.2 ceph-fuse挂载
root@ceph-node2:/etc/ceph# ceph-fuse  --name client.lisi -m 192.168.31.51:6789,192.168.31.52:6789,192.168.31.53:6789 /data  
2024-09-03T14:25:26.454+0800 73c375c14580 -1 init, newargv = 0x6210954f5950 newargc=15
ceph-fuse[28611]: starting ceph client
ceph-fuse[28611]: starting fuse
root@ceph-node2:/etc/ceph# 
root@ceph-node2:/etc/ceph# df -h 
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.6G  1.9M  1.6G   1% /run
/dev/sda3       196G   13G  173G   7% /
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/sda2       512M  6.1M  506M   2% /boot/efi
tmpfs           1.6G   44K  1.6G   1% /run/user/1000
tmpfs           7.8G   76K  7.8G   1% /var/lib/ceph/osd/ceph-4
tmpfs           7.8G   76K  7.8G   1% /var/lib/ceph/osd/ceph-5
tmpfs           7.8G   76K  7.8G   1% /var/lib/ceph/osd/ceph-6
tmpfs           7.8G   76K  7.8G   1% /var/lib/ceph/osd/ceph-7
ceph-fuse      1013G     0 1013G   0% /data
root@ceph-node2:/etc/ceph# 
root@ceph-node2:/etc/ceph# ll /data/
total 5
drwxr-xr-x  2 root root    0  9月  3 13:43 ./
drwxr-xr-x 21 root root 4096  9月  3 14:25 ../
-rw-r--r--  1 root root    0  9月  3 13:43 issue
-rw-r-----  1 root root    0  9月  3 13:43 syslog
-rw-r--r--  1 root root    0  9月  3 13:43 testfile

在这里插入图片描述

三、Ceph MDS高可用

1、高可用介绍

Ceph MDS 作为ceph的访问入口,需要实现高性能及数据备份,而MDS支持多MDS结构,甚至还能实现redis cluster的多主从结构,以实现MDS服务的高性能和高可用,假设启动4个MDS进程,设置最大max_mds为2,这时候有2个mds称为主节点,另外的两个mds作为备用节点。
在这里插入图片描述
在这里插入图片描述

设置每个主节点专用的备份MDS,也就是如果此主节点出现问题马上切换到另个MDS接管主MDS并继续对外提供元数据读写,设置备份MDS的常用选项如下:
mds_standby_replay:值为 true 或 false,true 表示开启 replay 模式,这种模式下主 MDS缓存的元数据将实时与从 MDS 同步,如果主宕机,从可以快速的切换。如果为 false 只有宕机的时候才去同步数据,这样会有一段时间的中断。
mds_standby_for_name:设置当前 MDS 进程只用于备份于指定名称的 MDS。
mds_standby_for_rank:设置当前 MDS 进程只用于备份于哪个 Rank((上级节点),通常为Rank编号。另外在存在多个 CephFS 文件系中,还可以使用 mds_standby_for_fscid 参数来为指定不同的文件系统。
mds_standby_for_fscid:指定 CephFS 文件系统 ID,需要联合 mds_standby_for_rank生效,如果设置 mds_standby_for_rank,那么就是用于指定文件系统的指定 Rank,如果没有设置,就是指定文件系统的所有Rank。

2、 查看当前mds

cephadmin@ceph-deploy:~/ceph-cluster$ ceph mds stat 
mycephfs:1 nginxFS:1 {mycephfs:0=ceph-mgr1=up:active,nginxFS:0=ceph-node1=up:active} 

添加MDS服务器
ceph-mon1ceph-mon2ceph-mon3 作为 mds 服务角色添加至 ceph 集群,最后实两主两备的 mds 高可用和高性能结构。

#mds 服务器安装 ceph-mds 服务
[root@ceph-mon1 ~]# apt install ceph-mds -y
[root@ceph-mon2 ~]# apt install ceph-mds -y
[root@ceph-mon3 ~]# apt install ceph-mds -y
#添加 mds 服务器
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy mds create ceph-mon1
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy mds create ceph-mon2
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy mds create ceph-mon3
#验证 mds 服务器当前状态:
# 当前处于激活状态的 mds 服务器有两台,处于备份状态的 mds 服务器有三台。
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status 
mycephfs - 2 clients
========
RANK  STATE      MDS        ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  ceph-mgr1  Reqs:    0 /s    16     17     12      6   
      POOL         TYPE     USED  AVAIL  
cephfs-metadata  metadata   267k  1012G  
  cephfs-data      data       0   1012G  
nginxFS - 1 clients
=======
RANK  STATE      MDS         ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  ceph-node1  Reqs:    0 /s    12     15     12      3   
      POOL          TYPE     USED  AVAIL  
nginxFS-metadata  metadata   177k  1012G  
  nginxFS-data      data     300M  1012G  
STANDBY MDS  
 ceph-mon2   
 ceph-mon1   
 ceph-mon3   
MDS version: ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)
cephadmin@ceph-deploy:~/ceph-cluster$ ceph mds stat 
mycephfs:1 nginxFS:1 {mycephfs:0=ceph-mgr1=up:active,nginxFS:0=ceph-node1=up:active} 3 up:standby

在这里插入图片描述

在 CephFS 文件系统中,DNS、INOS、DIRS 和 CAPS 分别代表以下内容:
Rank:当前 MDS (Metadata Server)实例的唯一编号。
Activity: 列会显示当前正在处理的请求数量和类型。
DNS: 表示分布式命名空间(Distributed Namespace)的数量,即文件系统中的命名空间数量。
/myfiles/
├── file1.txt
├── dir1/
│ ├── file2.txt
│ └── file3.txt
└── dir2/
├── file4.txt
└── file5.txt
在上面的示例中,/myfiles 命名空间保存了所有文件和目录的信息,包括文件和目录的名称、大小、权限、创建和修改时间等元数据信息,此外,还包含了文件和目录之间的层次结构,即 dir1和 dir2 是/myfiles 下的两个子目录,而 file1.txt、dir1 和 dir2 位于 myfiles 下、file2.txt 和 file3.txt位于 dir1、file4.txt 和 file5.txt 位于 dir2、但是他们都位于 /myfiles 下。
INOS: 代表当前文件系统中的 inode(index node)对象的数量。
DIRS: 表示目录(directory)的数量
CAPS: 代表文件系统中的 capability 的数量,这些 capability 用于控制对文件和目录的访问权
限。

3、 当前文件系统状态

cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs get mycephfs
Filesystem 'mycephfs' (1)
fs_name mycephfs
epoch   4
flags   12 joinable allow_snaps allow_multimds_snaps
created 2024-08-30T14:07:50.936780+0800
modified        2024-08-30T14:07:51.943940+0800
tableserver     0
root    0
session_timeout 60
session_autoclose       300
max_file_size   1099511627776
max_xattr_size  65536
required_client_features        {}
last_failure    0
last_failure_osd_epoch  0
compat  compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,7=mds uses inline data,8=no anchor table,9=file layout v2,10=snaprealm v2}
max_mds 1
in      0
up      {0=5850}
failed
damaged
stopped
data_pools      [12]
metadata_pool   11
inline_data     disabled
balancer
bal_rank_mask   -1
standby_count_wanted    1
[mds.ceph-mgr1{0:5850} state up:active seq 18 addr [v2:192.168.31.54:6802/7355217,v1:192.168.31.54:6803/7355217] compat {c=[1],r=[1],i=[7ff]}]

4、 设置处理激活状态mds的数量

目前有五 mds 服务器,但是每个mds一个主三个备,可以优化一下部署架构,设置为每个nfs,两主两备。

cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs set mycephfs max_mds 2
cephadmin@ceph-deploy:~/ceph-cluster$ 
cephadmin@ceph-deploy:~/ceph-cluster$ 
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs set nginxFS max_mds 2
cephadmin@ceph-deploy:~/ceph-cluster$ 
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status 
mycephfs - 2 clients
========
RANK  STATE      MDS        ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  ceph-mgr1  Reqs:    0 /s    16     17     12      6   
 1    active  ceph-mon3  Reqs:    0 /s    10     13     11      0   
      POOL         TYPE     USED  AVAIL  
cephfs-metadata  metadata   339k  1012G  
  cephfs-data      data       0   1012G  
nginxFS - 1 clients
=======
RANK  STATE      MDS         ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  ceph-node1  Reqs:    0 /s    12     15     12      3   
 1    active  ceph-mon1   Reqs:    0 /s    10     13     11      0   
      POOL          TYPE     USED  AVAIL  
nginxFS-metadata  metadata   249k  1012G  
  nginxFS-data      data     300M  1012G  
STANDBY MDS  
 ceph-mon2   
 ceph-node3  
MDS version: ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)

在这里插入图片描述

5、 MDS高可用优化

目前mycephfs的状态是 ceph-mgr1 和 ceph-mon3 分别是 active 状态,ceph-mon3 和 ceph-node3 分别处于 standby 状态,现在可以将 ceph-mon2 设置为 ceph-mgr1 的 standby,将 ceph-node3 设置为 ceph-mon3 的 standby,以实现每个主都有一个固定备份角色的结构,则修改配置文件如下:

cephadmin@ceph-deploy:~/ceph-cluster$ cat ceph.conf 
[global]
fsid = 74d6f368-8875-4340-857f-0daa3e96b5dc
public_network = 192.168.31.0/24
cluster_network = 192.168.91.0/24
mon_initial_members = ceph-mon1,ceph-mon2,ceph-mon3
mon_host = 192.168.31.51,192.168.31.52,192.168.31.53
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

mon clock drift allowed = 2
mon clock drift warn backoff = 30
[mds.ceph-mon2]
mds_standby_for_fscid = mycephfs
mds_standby_for_name = ceph-mgr1
mds_standby_replay = true
[mds.ceph-mgr1]
mds_standby_for_fscid = mycephfs
mds_standby_for_name = ceph-mon2
mds_standby_replay = true
[mds.ceph-mon3]
mds_standby_for_fscid = mycephfs
mds_standby_for_name = ceph-node3
mds_standby_replay = true
[mds.ceph-node3]
mds_standby_for_fscid = mycephfs
mds_standby_for_name = ceph-mon3
mds_standby_replay = true

分发配置文件并重启mds服务

$ ceph-deploy --overwrite-conf config push ceph-mgr1
$ ceph-deploy --overwrite-conf config push ceph-mon2
$ ceph-deploy --overwrite-conf config push ceph-node3
$ ceph-deploy --overwrite-conf config push ceph-mon3

重启备份节点:
[root@ceph-mon2 ~]# systemctl restart ceph-mds@ceph-mon2.service
[root@ceph-mgr2 ~]# systemctl restart ceph-mds@ceph-node3.service
停止不分主节点测试主从切换及 cephfs 可用性:
[root@ceph-mon3 ~]# systemctl restart ceph-mds@ceph-mgr1.service

查看active和standby对应关系

cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs get mycephfs 

在这里插入图片描述
可以看到停止mgr1的mds之后,node3马上就提升为主,就算把mgr1重启之后他还是变成了standby

在这里插入图片描述

6、主从切换过程

1. 故障检测:

Ceph 集群持续监控所有 MDS 的状态。如果活跃 MDS 发生故障(例如崩溃或网络故障),监控系统会立即检测到。

2. 故障报告:

监控系统会将故障信息报告给 Ceph Monitor(MON)节点。MON 节点负责协调和管理集群的状态信息。

3. 选举新的活跃 MDS:

Ceph Monitor 会从备用 MDS 列表中选出一个新的 MDS 接管故障的活跃 MDS 的角色。选举过程包括以下几个步骤:

  • 检查备用 MDS 的健康状态。
  • 确定最合适的备用 MDS(通常是 standby-replay 模式的 MDS,因为它们已经在接收和回放活跃 MDS 的日志,能够快速接管)。

4. 切换过程:

  • 选出的备用 MDS 会通知其他集群组件(包括客户端和 OSD)它即将成为新的活跃 MDS。
  • 备用 MDS 读取并应用故障 MDS 的最新日志(如果在 standby-replay 模式下,日志已经在同步,切换会更快)。
  • 备用 MDS 宣布自己为新的活跃 MDS,并开始接收和处理客户端的请求。

5. 客户端重新连接:

  • 客户端检测到当前连接的活跃 MDS 不可用,会根据 Monitors 提供的信息重新连接到新的活跃 MDS。
  • 客户端恢复正常操作,文件系统继续工作。

四、通过ganesha将cephfs导出为NFS

通过 ganesha 将 cephfs 通过 NFS 协议共享使用。
https://www.server-world.info/en/note?os=Ubuntu_20.04&p=ceph15&f=8

4.1 服务端配置

如果在mgr节点配置,并提前准备号ceph.conf ceph.client.admin.keyring认证文件

root@ceph-mgr1:/etc/ceph# ll ceph.client.admin.keyring  ceph.conf 
-rw------- 1 root root 151  8月 30 14:51 ceph.client.admin.keyring
-rw-r--r-- 1 root root 811  9月  3 15:07 ceph.conf
root@ceph-mgr1:/etc/ceph# apt install nfs-ganesha-ceph 
root@ceph-mgr1:/etc/ceph# cd /etc/ganesha
root@ceph-mgr1:/etc/ganesha# cat ganesha.conf 
NFS_CORE_PARAM {
  # disable NLM
  Enable_NLM = false;
  # disable RQUOTA (not suported on CephFS)
  Enable_RQUOTA = false;
  # NFS protocol
  Protocols = 4;
}
EXPORT_DEFAULTS {
  # default access mode
  Access_Type = RW;
}
EXPORT {
  # uniq ID
  Export_Id = 1;
  # mount path of CephFS
  Path = "/";
  FSAL {
    fs_name = "nginxFS";
    user_id= "lisi";
    name = CEPH;
    # hostname or IP address of this Node
    hostname="192.168.31.54";
  }
  # setting for root Squash
  Squash="No_root_squash";
  # NFSv4 Pseudo path
  Pseudo="/nginx";
  # allowed security options
  SecType = "sys";
}
LOG {
  # default log level
  Default_Log_Level = WARN;
}

root@ceph-mgr1:/etc/ganesha# systemctl restart nfs-ganesha
root@ceph-mgr1:/etc/ganesha# systemctl status nfs-ganesha
root@ceph-mgr1:/etc/ganesha# tail -f /var/log/ganesha/ganesha.log

4.2 客户端挂载测试

root@ceph-mgr1:/etc/ganesha# mount -t nfs 192.168.31.54:/nginx /test 
root@ceph-mgr1:/etc/ganesha#  ll /test/
total 5
drwxr-xr-x  2 root root    0  9月  3 14:41 ./
drwxr-xr-x 22 root root 4096  9月  3 16:02 ../
-rw-r--r--  1 root root    0  9月  3 13:43 issue
-rw-r--r--  1 root root    0  9月  3 14:41 nima
-rw-r-----  1 root root    0  9月  3 13:43 syslog
-rw-r--r--  1 root root    0  9月  3 13:43 testfile
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值