CephFS使用

news2024/11/24 15:31:59

CephFS使用

  • 一、CephFS架构
  • 二、部署CepfFS服务
      • 1、部署MDS服务
      • 2、创建CephFS metadata和data存储池
      • 3、创建cephFS并验证
      • 4、创建客户端账户
      • 5、安装ceph客户端并同步认证文件
      • 6、内核空间挂载ceph-fs
          • 6.1 客户端通过key文件挂载
          • 6.2 开机自动挂载
      • 7、客户端模块挂载
          • 7.1 用户空间挂载ceph-fs
            • 7.1.1 安装ceph-fuse
            • 7.2 ceph-fuse挂载
  • 三、Ceph MDS高可用
      • 1、高可用介绍
      • 2、 查看当前mds
      • 3、 当前文件系统状态
      • 4、 设置处理激活状态mds的数量
      • 5、 MDS高可用优化
      • 6、主从切换过程
  • 四、通过ganesha将cephfs导出为NFS
      • 4.1 服务端配置
      • 4.2 客户端挂载测试

一、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2101066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​​​​​​​《黑神话:悟空》—— 高科技点亮西游神话璀璨之路

《黑神话&#xff1a;悟空》作为一款以中国神话为背景的西游题材单机游戏&#xff0c;自诞生起便备受瞩目。它以中国古典名著《西游记》为蓝本&#xff0c;文化内涵深厚&#xff0c;承载着无数国人的童年回忆和文化情感。凭借高科技打造出美轮美奂的画面——细腻逼真的环境场景…

代理服务器详解(proxy server)

什么是代理服务器 (proxy server) 代理服务器&#xff08;Proxy Server&#xff09;是一个中间服务器&#xff0c;位于客户端和目标服务器之间。它代表客户端向目标服务器发送请求&#xff0c;并将目标服务器的响应返回给客户端&#xff0c;其模型如下图所示&#xff1a; 客户…

2024年“羊城杯”粤港澳大湾区网络安全大赛Misc 部分解析

2024年“羊城杯”粤港澳大湾区网络安全大赛Misc 部分解析 前言&#xff1a;数据安全&#xff1a;不一样的数据库_2&#xff1a;Misc - hiden&#xff1a;Misc - miaoro&#xff1a; 前言&#xff1a; 本次 解析是后期复现 当时没时间打 用于交流学习&#xff0c;感谢支持&…

代码随想录算法训练营第三十二天(动态规划 一)

前几天有点忙加上贪心后面好难QWQ 暂时跳过两天的贪心&#xff0c;开始学动归 动态规划理论基础: 文章链接:代码随想录 文章思维导图: 文章摘要: 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&…

运动耳机哪个牌子的好?五大口碑爆棚的骨传导运动耳机全方位分析

随着健康意识的提高和运动文化的普及&#xff0c;越来越多的人开始注重运动时的舒适度和体验感。在众多运动装备中&#xff0c;耳机作为不可或缺的一部分&#xff0c;其选择对运动体验有着直接的影响。传统的入耳式耳机在运动时可能会因为汗水、滑落等问题影响使用体验&#xf…

‘聊天不要太正经,越调戏对方越爱你的搞笑句子’

01 02 03 04 05 06 07 免费小程序《字形绘梦》上线啦&#xff01; 欢迎大家体验&#xff01;

自动驾驶技术软件教学平台

1、基本介绍 自动驾驶技术软件教学平台是中智讯公司开发的一款面向人工智能相关专业自动驾驶方向的综合型实验平台&#xff0c;主要满足&#xff1a;机器人控制技术、机器人操作系统、机器视觉技术、机器语言技术、智能边缘计算、人工智能中间件、机器人协作、SLAM导航等课程的…

餐饮行业的数字化转型——霸王餐API接口对接

霸王餐API接口对接对餐饮行业的数字化转型具有显著的推动作用&#xff0c;其关键优势和特点包括&#xff1a; 提升运营效率&#xff1a;通过自动化管理&#xff0c;减少人工操作&#xff0c;提高工作效率和减少错误。优化消费者体验&#xff1a;提供实时的菜品信息、下单和支付…

《软件工程导论》(第6版)第9章 面向对象方法学引论 复习笔记

第9章 面向对象方法学引论 一、面向对象方法学概述 1&#xff0e;要点 面向对象方法学已经成为人们在开发软件时首选的范型。面向对象技术已成为当前最好的软件开发技术。 &#xff08;1&#xff09;基本原则 面向对象方法学的出发点和基本原则&#xff0c;是尽可能模拟人…

NPDP|如何在传统行业中做好产品管理的策略与建议

在当今这个快速变化的数字时代&#xff0c;传统行业面临着前所未有的挑战与机遇。产品管理作为连接市场需求与企业生产的核心环节&#xff0c;其重要性不言而喻。对于传统行业而言&#xff0c;做好产品管理不仅意味着保持竞争力&#xff0c;更是实现转型升级、拥抱未来的关键。…

MATLAB进行天线阵列方向图综合

摘要&#xff1a;本次推文将介绍如何利用MATLAB的Sensor Array Analyzer进行天线阵列的方向图综合。 1. 阵列方向图综合理论 对于均匀平面阵列而言&#xff0c;其阵因子公式可以写成 当阵列是三角网格布置或者圆环阵时&#xff0c;《ANTENNA THEORY ANALYSIS AND DESIGN》等相…

前端跨域问题详解与解决方案指南

什么是跨域问题 跨域问题通常是由浏览器的同源策略&#xff08;Same-OriginPolicy&#xff0c;SOP&#xff09;引起的访问问题 同源策略是浏览器的一个重要安全机制&#xff0c;它用于限制一个来源的文档或脚本如何能够与另一个来源的资源进行交互 同源策略的定义 同源策略要…

【MySQL_JDBC】Day23-Day28 数据库基础、JDBC基础、聊天室3.0

数据库 数据库基本概念 数据库DataBase 定义: 保存数据的仓库就称为数据库 例如 编写一个用户管理系统&#xff0c;可以让用户在我们编写的系统上进行注册等操作&#xff0c;此时就涉及到了保存用户数据的操作&#xff0c;目前我们的做法可以将一个用户信息以一个User对象…

【精选】大型体育场管理系统的设计与实现(全网最新定制,独一无二)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Unity(2022.3.41LTS) - UI详细介绍-Dropdown(下拉列表)

目录 零.简介 一、基本功能与用途 二、组件介绍 三、使用方法 四、优化和注意事项 五.代码实例 零.简介 在 Unity 中&#xff0c;下拉列表&#xff08;Dropdown&#xff09;是一种常用的 UI 组件&#xff0c;用于提供一组选项供用户选择。 一、基本功能与用途 选项选择…

【出行计划 / 2】

题目 思路 暴力 O ( m ⋅ n ) O(m \cdot n) O(m⋅n) \;\;\;\;\; 不可行 树状数组差分 O ( m ⋅ l o g ( 5 e 5 ) ) O(m \cdot log(5e^{5})) O(m⋅log(5e5)) \;\;\;\;\; 可行 具体思路&#xff1a; t [ i ] ∈ [ q k − c [ i ] 1 , q k ] t[i] \in [qk-c[i]1, \;qk…

stm32的内部时钟源 | RC震荡电路

文章目录 前言学习了解 前言 了解到 内部高速RC振荡器&#xff08;HSI&#xff09;就是RC震荡器实现的&#xff0c;故想对RC震荡做些了解与分析。 学习了解 【不需要晶振&#xff0c;也可产生时钟脉冲&#xff01;RC振荡器的工作原理&#xff0c;维恩电桥振荡器&#xff01;…

电脑连接公司服务器记住了账户密码,怎么换账户呢?

今天&#xff0c;有同事找到我&#xff0c;说共享连不上去了&#xff0c;我去试了下&#xff0c;知道了原因&#xff1a;由于我将之前使用这台电脑的人的账户在后台禁用了&#xff0c;所以这台电脑连不上服务器了&#xff0c;也不是连不上&#xff0c;而是之前是记住了账户密码…

基于vue框架的超市商品管理系统m9o29(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;商品信息,商品分类,进货入库,员工,销售出库 开题报告内容 基于Vue框架的超市商品管理系统开题报告 一、研究背景与意义 在快速变化的零售市场中&#xff0c;超市作为商品销售的重要渠道&#xff0c;其商品管理效率直接影响到顾客满意…

dbeaver配置hive连接

环境 os: windows 11 dbeaver: 22.3.1 hive: version&#xff1a; apache-hive-3.1.2 配置dbaeaver hive driver 点击编辑驱动设置 1、删除默认驱动配置 2、添加hive 安装文件 jdbc 中驱动文件 3、点击找到类 &#xff0c;配置正确跳出驱动类 4、确认 点击测试链接 成功之后…