一.熟练管理存储池(创建存储池、删除存储池)、掌握 pg 与 pgp 的基本分配方法

RBD(RADOS Block DEVICES)块存储设备,客户端基于librbd库将RADOS存储集群作为块设备,不过,用于rbd的存储池需要事先启动RBD功能并进行初始化。
$ceph osd pool create myrbd1 64 64 #创建存储池,指定pg和pgp的数量,pgp要对存在于pg的数据进行组合存储,pgp通常等于pg的值

#创建存储池cephadmin@ceph-deploy:~$ ceph osd pool createmyrbd1 64 64pool 'myrbd1' created#对存储池启用rbd功能cephadmin@ceph-deploy:~$ ceph osd pool application enable myrbd1 rbdenabled application 'rbd' on pool 'myrbd1'#使用rbd命令对存储池初始化cephadmin@ceph-deploy:~$ rbd pool init -p myrbd1#创建myrbd1映像cephadmin@ceph-deploy:~$ rbd create myimg1 --size 5G --pool myrbd1cephadmin@ceph-deploy:~$ rbd create myimg2 --size 3G --pool myrbd1 --image-format 2 --image-feature layering#列出指定pool中的imgcephadmin@ceph-deploy:~$ rbd ls --pool myrbd1myimg1myimg2#查看指定的img的信息cephadmin@ceph-deploy:~$ rbd --image myimg1 --pool myrbd1 inforbd image 'myimg1':size 5 GiB in 1280 objectsorder 22 (4 MiB objects)snapshot_count: 0id: 5ef6b2eba38bblock_name_prefix: rbd_data.5ef6b2eba38bformat: 2features: layering, exclusive-lock, object-map, fast-diff, deep-flattenop_features: flags: create_timestamp: Sat Dec 31 21:47:32 2022access_timestamp: Sat Dec 31 21:47:32 2022modify_timestamp: Sat Dec 31 21:47:32 2022cephadmin@ceph-deploy:~$ rbd --image myimg2 --pool myrbd1 inforbd image 'myimg2':size 3 GiB in 768 objectsorder 22 (4 MiB objects)snapshot_count: 0id: 5efbb2203242block_name_prefix: rbd_data.5efbb2203242format: 2features: layeringop_features: flags: create_timestamp: Sat Dec 31 21:49:34 2022access_timestamp: Sat Dec 31 21:49:34 2022modify_timestamp: Sat Dec 31 21:49:34 2022#查看ceph当前状态cephadmin@ceph-deploy:~$ ceph df--- RAW STORAGE ---CLASSSIZE AVAIL USEDRAW USED%RAW USEDhdd60 TiB60 TiB116 MiB 116 MiB0TOTAL60 TiB60 TiB116 MiB 116 MiB0--- POOLS ---POOL IDPGSSTOREDOBJECTSUSED%USEDMAX AVAILdevice_health_metrics 11 0 B0 0 B0 19 TiBmyrbd12 64 405 B748 KiB0 19 TiB

#部署 署 radosgw 服 务,将 ceph-mgr1 服务器部署为 RGW 主机
root@ceph-mgr1:~# apt install radosgw=16.2.5-1bionic
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy –overwrite-conf rgw create ceph-mgr1
#: 验证 证 radosgw 服 务
[root@ceph-mgr1 ~]# ps -aux | grep radosgw
ceph 2528 1.5 2.7 5055512 52048 ? Ssl 16:49 0:00
/usr/bin/radosgw -f –cluster ceph –name client.rgw.ceph-mgr1 –setuser ceph –setgroup ceph
#部署MDS服务:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mgr1
#验证MDS服务:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph mds stat
mycephfs:1 {0=ceph-mgr1=up:active}
#创建cephFS metadata和data存储池
[cephadmin@ceph-deploy ceph-cluster]$ ceph osd pool create cephfs-metadata 32 32
pool ‘cephfs-metadata’ created #保存 metadata 的 pool
[cephadmin@ceph-deploy ceph-cluster]$ ceph osd pool create cephfs-data 64 64
pool ‘cephfs-data’ created #保存数据的 pool
#创建cephFS并验证
[cephadmin@ceph-deploy ceph-cluster]$ ceph fs new mycephfs cephfs-metadata cephfs-data
[cephadmin@ceph-deploy ceph-cluster]$ ceph fs status mycephfs #查看指定 cephFS 状态
#验证cephFS服务状态
[cephadmin@ceph-deploy ceph-cluster]$ ceph mds stat
mycephfs-1/1/1 up {0=ceph-mgr1=up:active}

#PG 与 与 PGP
PG = Placement Group #归置组,默认每个 PG 三个 OSD(数据三个副本)
PGP = Placement Group for Placement purpose #归置组的组合,pgp 相当于是 pg 对应osd 的一种逻辑排列组合关系(在不同的 PG 内使用不同组合关系的 OSD)。
加入 PG=32,PGP=32,那么:
数据最多被拆分为 32 份(PG),写入到有 32 种组合关系(PGP)的 OSD 上。
归置组(placement group)是用于跨越多 OSD 将数据存储在每个存储池中的内部数据结构。
归置组在 OSD 守护进程和 ceph 客户端之间生成了一个中间层,CRUSH 算法负责将每个对象动态映射到一个归置组,然后再将每个归置组动态映射到一个或多个 OSD 守护进程,从而能够支持在新的 OSD 设备上线时进行数据重新平衡。
相对于存储池来说,PG 是一个虚拟组件,它是对象映射到存储池时使用的虚拟层。可以自定义存储池中的归置组数量。
ceph 出于规模伸缩及性能方面的考虑,ceph 将存储池细分为多个归置组,把每个单独的对象映射到归置组,并为归置组分配一个主 OSD。
存储池由一系列的归置组组成,而 CRUSH 算法则根据集群运行图和集群状态,将个 PG 均匀、伪随机(基于 hash 映射,每次的计算结果够一样)的分布到集群中的 OSD 之上。如果某个 OSD 失败或需要对集群进行重新平衡,ceph 则移动或复制整个归置组而不需要单独对每个镜像进行寻址。
#PG 与 与 OSD 的 关 系
ceph 基于 crush 算法将归置组 PG 分配至 OSD
当一个客户端存储对象的时候,CRUSH 算法映射每一个对象至归置组(PG)

#PG 分 配 计 算
归置组(PG)的数量是由管理员在创建存储池的时候指定的,然后由 CRUSH 负责创建和使用,PG 的数量是 2 的 N 次方的倍数,每个 OSD 的 PG 不要超出 250 个 PG
Total PGs = (Total_number_of_OSD * 100) / max_replication_count
单个 pool 的 PG 计算如下:
有 100 个 osd,3 副本,5 个 pool
Total PGs =100*100/3=3333
每个 pool 的 PG=3333/5=512,那么创建 pool 的时候就指定 pg 为 512
客户端在读写对象时,需要提供的是对象标识和存储池名称
客户端需要在存储池中读写对象时,需要客户端将对象名称,对象名称的hash码,存储池中的PG数量和存储池名称作为输入信息提供给ceph,然后由CRUSH计算出PG的ID以及PG针对的主OSD即可读写OSD中的对象。
具体写操作如下:
1.APP向ceph客户端发送对某个对象的请求,此请求包含对象和存储池,然后ceph客户端对访问的对象做hash计算,并根据此hash值计算出对象所在的PG,完成对象从Pool至PG的映射。
APP 访问 pool ID 和 object ID (比如 pool = pool1 and object-id = “name1”)
ceph client 对 objectID 做哈希
ceph client 对该 hash 值取 PG 总数的模,得到 PG 编号(比如 32)
ceph client 对 pool ID 取 hash(比如 “pool1” = 3)
ceph client 将 pool ID 和 PG ID 组合在一起(比如 3.23)得到 PG 的完整 ID。
2.然后客户端据 PG、CRUSH 运行图和归置组(placement rules)作为输入参数并再次进行计
算,并计算出对象所在的 PG 内的主 OSD ,从而完成对象从 PG 到 OSD 的映射。
3.客户端开始对主 OSD 进行读写请求(副本池 IO),如果发生了写操作,会有 ceph 服务端完
成对象从主 OSD 到备份 OSD 的同步

二.熟练 ceph 的用户管理及授权

客户端使用 session key 向 mon 请求所需要的服务,mon 向客户端提供一个 tiket,用于向实际处理数据的 OSD 等服务验证客户端身份,MON 和 OSD 共享同一个 secret.
ceph 用户需要拥有存储池访问权限,才能读取和写入数据
ceph 用户必须拥有执行权限才能使用 ceph 的管理命令
ceph 支持多种类型的用户,但可管理的用户都属于 client 类型
通过点号来分割用户类型和用户名,格式为 TYPE.ID,例如 client.admin。

root@ceph-deploy:~# cat /etc/ceph/ceph.client.admin.keyring [client.admin]key = AQBnFaNj1iyBMBAAd+9hKWXaNw3GYxT9PEXvrQ==caps mds = "allow *"caps mgr = "allow *"caps mon = "allow *"caps osd = "allow *"

#列 出 指 定 用 户 信 息

root@ceph-deploy:~# ceph auth get osd.10[osd.10]key = AQB+I6Njk4KWNBAAL09FFayLKF44IgUQ1fjKYQ==caps mgr = "allow profile osd"caps mon = "allow profile osd"caps osd = "allow *"exported keyring for osd.10

#: 列 出 用 户

cephadmin@ceph-deploy:~$ ceph auth listmds.ceph-mgr1key: AQAdRbFjOwBXIRAAUTdwElBzYPHW+4uFicFC7Q==caps: [mds] allowcaps: [mon] allow profile mdscaps: [osd] allow rwxosd.0key: AQC0IqNjbcgKIxAA+BCNpQeZiMujR+r+69Miig==caps: [mgr] allow profile osdcaps: [mon] allow profile osdcaps: [osd] allow *

#可以结合使用-o 文件名选项和 ceph auth list 将输出保存到某个文件。
[cephadmin@ceph-deploy ceph-cluster]$ ceph auth list -o 123.key

#ceph auth add
此命令是添加用户的规范方法。它会创建用户、生成密钥,并添加所有指定的能力
添加认证 key:

cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth add client.tom mon 'allow r' osd 'allow rwx pool=testpool2'added key for client.tom

##验证 key

cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.tom[client.tom]key = AQD2vbJj8fIiDBAArtJBzQiuPy8nDWPSFVs0bw==caps mon = "allow r"caps osd = "allow rwx pool=testpool2"exported keyring for client.tom

##创建用户

cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get-or-create client.jack mon 'allow r' osd 'allow rwx pool=testpool2'[client.jack]key = AQC/vrJj5kenHhAAGeRJpY64feS4Dn6DD/R8VA==

##再次创建用户

cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get-or-create client.jack mon 'allow r' osd 'allow rwx pool=testpool2'[client.jack]key = AQC/vrJj5kenHhAAGeRJpY64feS4Dn6DD/R8VA==

#ceph auth get-or-create-key:
此命令是创建用户并返回用户密钥,对于只需要密钥的客户端(例如 libvrirt),此命令非常有用。

[cephadmin@ceph-deploy ceph-cluster]$ ceph auth get-or-create-key client.jackmon 'allow r' osd 'allow rwx pool=mypool'AQAtr8dfi37XMhAADbHWEZ0shY1QZ5A8eBpeoQ==

用户有 key 就显示没有就创建

#修 改 用 户 能 力

cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.jack[client.jack]key = AQC/vrJj5kenHhAAGeRJpY64feS4Dn6DD/R8VA==caps mon = "allow r"caps osd = "allow rwx pool=testpool2"exported keyring for client.jackcephadmin@ceph-deploy:~/ceph-cluster$ ceph auth caps client.jack mon 'allow r' osd 'allow rw pool=testpool2'updated caps for client.jackcephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.jack[client.jack]key = AQC/vrJj5kenHhAAGeRJpY64feS4Dn6DD/R8VA==caps mon = "allow r"caps osd = "allow rw pool=testpool2"exported keyring for client.jack
#删 除 用 户 cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth del client.tomupdated#导出 keyring 至指定文件[cephadmin@ceph-deploy ceph-cluster]$ ceph auth get client.user1 -oceph.client.user1.keyringexported keyring for client.user1#验证指定用户的 keyring 文件:[cephadmin@ceph-deploy ceph-cluster]$ cat ceph.client.user1.keyring[client.user1]key = AQAUUchfjpMqGRAARV6h0ofdDEneuaRnxuHjoQ==caps mon = "allow r"caps osd = "allow * pool=mypool"[cephadmin@ceph-deploy ceph-cluster]$ ceph auth del client.user1 #演示误删除用户Updated[cephadmin@ceph-deploy ceph-cluster]$ ceph auth get client.user1 #确认用户被删除Error ENOENT: failed to find client.user1 in keyring[cephadmin@ceph-deploy ceph-cluster]$ ceph auth import -iceph.client.user1.keyring #导入用户imported keyring[cephadmin@ceph-deploy ceph-cluster]$ ceph auth get client.user1 #验证已恢复用户exported keyring for client.user1#将多 用 户 导 出 至 秘 钥 环 :#创建 keyring 文件:$ ceph-authtool --create-keyring ceph.client.user.keyring #创建空的 keyring 文件creating ceph.client.user.keyring#把指定的 admin 用户的 keyring 文件内容导入到 user 用户的 keyring 文件:$ceph-authtool ./ceph.client.user.keyring--import-keyring ./ceph.client.admin.keyringimporting contents of ./ceph.client.admin.keyring into ./ceph.client.user.keyring#验证 keyring 文件:[cephadmin@ceph-deploy ceph-cluster]$ ceph-authtool -l ./ceph.client.user.keyring[client.admin]key = AQAGDKJfQk/dAxAA3Y+9xoE/p8in6QjoHeXmeg==caps mds = "allow *"caps mgr = "allow *"caps mon = "allow *"caps osd = "allow *"#再导入一个其他用户的 keyring:[cephadmin@ceph-deploy ceph-cluster]$ ceph-authtool ./ceph.client.user.keyring--import-keyring ./ceph.client.user1.keyringimporting contents of ./ceph.client.user1.keyring into ./ceph.client.user.keyring#再次验证 keyring 文件是否包含多个用户的认证信息:[cephadmin@ceph-deploy ceph-cluster]$ ceph-authtool -l ./ceph.client.user.keyring[client.admin]key = AQAGDKJfQk/dAxAA3Y+9xoE/p8in6QjoHeXmeg==caps mds = "allow *"caps mgr = "allow *"caps mon = "allow *"caps osd = "allow *"[client.user1]key = AQAUUchfjpMqGRAARV6h0ofdDEneuaRnxuHjoQ==caps mon = "allow r"caps osd = "allow * pool=mypool"

三. 使用普通客户挂载块存储

#创建存储池:

cephadmin@ceph-deploy:~/ceph-cluster$ceph osd pool create rbd-data1 32 32

#存储池启用 rbd

cephadmin@ceph-deploy:~/ceph-cluster$ceph osd pool application enable rbd-data1 rbd

#初始化 rbd

cephadmin@ceph-deploy:~/ceph-cluster$rbd pool init -p rbd-data1

#创建两个镜像:

cephadmin@ceph-deploy:~/ceph-cluster$rbd create data-img1 --size 3G --pool rbd-data1 --image-format 2 --image-feature layeringcephadmin@ceph-deploy:~/ceph-cluster$rbd create data-img2 --size 5G --pool rbd-data1 --image-format 2 --image-feature layering

#列出镜像信息

cephadmin@ceph-deploy:~/ceph-cluster$rbd ls --pool rbd-data1

#以 json 格 式 显 示 镜 像 信 息

cephadmin@ceph-deploy:~/ceph-cluster$rbd ls --pool rbd-data1 -l --format json --pretty-format

#创建普通账户

ceph auth add client.shijie mon 'allow r' osd 'allow rwx pool=rbd-data1'

#验证用户信息
ceph auth get client.shijie
#创建用 keyring 文件

cephadmin@ceph-deploy:~/ceph-cluster$ ceph-authtool --create-keyring ceph.client.shijie.keyring

#导出用户 keyring

cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.shijie -o ceph.client.shijie.keyring 

#验证指定用户的 keyring 文件

cephadmin@ceph-deploy:~/ceph-cluster$cat ceph.client.shijie.keyring 

#同 步 普 通 用 户 认 证 文 件

cephadmin@ceph-deploy:~/ceph-cluster$ scp ceph.client.shijie.keyring root@172.31.6.109:/etc/ceph/

#管理端验证镜像状态

cephadmin@ceph-deploy:~/ceph-cluster$rbd ls -p rbd-data1 -l

#在client上操作
#映射 rbd

root@ceph-node4:/# rbd -p rbd-data1 map data-img1/dev/rbd0root@ceph-node4:/# lsblkrbd0root@ceph-node4:/# mkfs.xfs /dev/rbd0root@ceph-node4:/# mount /dev/rbd0 /dataroot@ceph-node4:/# docker run -it -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD="12345678" -v /data:/var/lib/mysql mysql:5.6.4648374db8541a7fa375c00611373051ef21690e89adfd4c156b3f6ffb0dbe95a2root@ceph-node4:/data# lsibdata1ib_logfile0ib_logfile1mysqlperformance_schematest

#在client上操作
#使用普通用户映射 rbd

root@ceph-node4:/etc/ceph# rbd --user shijie -p rbd-data1 map data-img2/dev/rbd1#格式化root@ceph-node4:/etc/ceph#mkfs.ext4 /dev/rbd0root@ceph-node4:/etc/ceph# mkdir /data1root@ceph-node4:/etc/ceph# mount /dev/rbd1 /data1root@ceph-node4:/etc/ceph# cp /var/log/auth.log /data1root@ceph-node4:/etc/ceph# cd /data1root@ceph-node4:/data1# lsauth.loglost+found

四. 使用普通用户挂载 cephfs(可以通过 secret 或者 secretfile 的形式多主机同时挂载)

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

#部署MDS服务:

cephadmin@ceph-deploy:~/ceph-cluster$ apt-cache madison ceph-mdsceph-mds | 16.2.10-1bionic | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic/main amd64 Packagescephadmin@ceph-deploy:~/ceph-cluster$ apt install ceph-mds=16.2.10-1bionic

#创建CephFS meta data和data存储池

[cephadmin@ceph-deploy ceph-cluster]$ ceph osd pool create cephfs-metadata 32 32pool 'cephfs-metadata' created #保存 metadata 的 pool[cephadmin@ceph-deploy ceph-cluster]$ ceph osd pool create cephfs-data 64 64pool 'cephfs-data' created #保存数据的 pool[cephadmin@ceph-deploy ceph-cluster]$ ceph fs new mycephfs cephfs-metadatacephfs-datanew fs with metadata pool 7 and data pool 8cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs lsname: mycephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ]

#查看指定 cephFS 状态

cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status mycephfsmycephfs - 0 clientsRANKSTATEMDSACTIVITY DNSINOS DIRS CAPS 0activeceph-mgr1Reqs:0 /s10 13 120 POOL TYPE USEDAVAILcephfs-metadatametadata 146k18.9Tcephfs-datadata 0 18.9TMDS version: ceph version 16.2.10 (45fa1a083152e41a408d15505f594ec5f1b4fe17) pacific (stable)

#验证cephFS服务状态

cephadmin@ceph-deploy:~$ ceph mds statmycephfs:1 {0=ceph-mgr1=up:active}

#创建客户端账户

cephadmin@ceph-deploy:~/ceph-cluster$ceph auth add client.yanyan mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs-data'

#验证账户

[cephadmin@ceph-deploy ceph-cluster]$ ceph auth get client.yanyanexported keyring for client.yanyan[client.yanyan]key = AQCxpdhfjQt1OxAAGe0mqTMveNu2ZMEem3tb0g==caps mds = "allow rw"caps mon = "allow r"caps osd = "allow rwx pool=cephfs-data"

#创建keyring 文件

[cephadmin@ceph-deploy ceph-cluster]$ ceph auth get client.yanyan -oceph.client.yanyan.keyringexported keyring for client.yanyan

#创建 key 文件:

[cephadmin@ceph-deploy ceph-cluster]$ ceph auth print-key client.yanyan > yanyan.key

#验证用户的 keyring 文件

[cephadmin@ceph-deploy ceph-cluster]$ cat ceph.client.yanyan.keyring[client.yanyan]key = AQCxpdhfjQt1OxAAGe0mqTMveNu2ZMEem3tb0g==caps mds = "allow rw"caps mon = "allow r"caps osd = "allow rwx pool=cephfs-data"

#同步客户端认证文件 :

[cephadmin@ceph-deploy ceph-cluster]$ scp ceph.conf ceph.client.yanyan.keyringyanyan.key root@172.31.6.109:/etc/ceph/

#客户端验证权限

root@ceph-node4:~# ceph --user yanyan -scluster:id: 7c088d6f-06b0-4584-b23f-c0f150af51d4health: HEALTH_OKservices:mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 24m)mgr: ceph-mgr1(active, since 65m)mds: 1/1 daemons uposd: 16 osds: 16 up (since 24m), 16 in (since 13d)rgw: 1 daemon active (1 hosts, 1 zones)data:volumes: 1/1 healthypools: 10 pools, 329 pgsobjects: 296 objects, 218 MiBusage: 948 MiB used, 60 TiB / 60 TiB availpgs: 329 active+clean

#客户端通过 key 文件挂载:

 root@ceph-node4:~#mkdir /data root@ceph-node4:/etc/ceph# mount -t ceph 172.31.6.101:6789,172.31.6.102:6789,172.31.6.103:6789:/ /data -o name=yanyan,secretfile=/etc/ceph/yanyan.keyroot@ceph-node4:/etc/ceph# df -hFilesystem SizeUsed Avail Use% Mounted onudev 955M 0955M 0% /dev172.31.6.101:6789,172.31.6.102:6789,172.31.6.103:6789:/ 19T 0 19T 0% /data

#客户端通过key挂载

root@ceph-node3:~# mkdir /dataroot@ceph-node3:~# mount -t ceph 172.31.6.101:6789,172.31.6.102:6789,172.31.6.103:6789:/ /data -o name=yanyan,secret=AQAfebVjaIPgABAAzkW4ChX2Qm2Sha/5twdxPA==root@ceph-node3:~# df -hFilesystem SizeUsed Avail Use% Mounted onudev 955M 0955M 0% /dev172.31.6.101:6789,172.31.6.102:6789,172.31.6.103:6789:/ 19T 0 19T 0% /dataroot@ceph-node3:~# cp /var/log/auth.log /dataroot@ceph-node3:~# cd /dataroot@ceph-node3:/data# lsauth.logroot@ceph-node3:/data# vim auth.log root@ceph-node3:/data# echo "12345678" >> auth.log root@ceph-node3:/data# echo "testlog" >> auth.log

#在node4客户端上查看cephfs挂载点/data 目录下内容,已经同步

root@ceph-node4:/# tail -f /data/auth.log Jan4 22:25:01 ceph-node3 CRON[4365]: pam_unix(cron:session): session closed for user root12345678testlog

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

root@ceph-node4:/# lsmod|grep cephceph3809281libceph 3153921 cephfscache655361 cephlibcrc32c163845 nf_conntrack,nf_nat,xfs,raid456,libcephroot@ceph-node4:/# modinfo cephfilename: /lib/modules/4.15.0-130-generic/kernel/fs/ceph/ceph.kolicense:GPLdescription:Ceph filesystem for Linuxauthor: Patience Warnick <patience@newdream.net>author: Yehuda Sadeh <yehuda@hq.newdream.net>author: Sage Weil <sage@newdream.net>alias:fs-cephsrcversion: CB79D9E4790452C6A392A1Cdepends:libceph,fscacheretpoline:Yintree: Yname: cephvermagic: 4.15.0-130-generic SMP mod_unload signat: PKCS#7signer: sig_key:sig_hashalgo: md4

五.实现 MDS 服务的多主一备高可用架构


#当前mds服务器状态

cephadmin@ceph-deploy:~$ ceph mds statmycephfs:1 {0=ceph-mgr1=up:active}

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

[root@ceph-mgr2 ~]# 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-mgr2cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon2cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon3

#验证 mds 服务器当前状态:

[cephadmin@ceph-deploy ceph-cluster]$ ceph mds statmycephfs-1/1/1 up {0=ceph-mgr1=up:active}, 3 up:standby

#验证 ceph集群当前状态
当前处于激活状态的 mds 服务器有一台,处于备份状态的 mds 服务器有三台。

cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs statusmycephfs - 0 clientsRANKSTATEMDSACTIVITY DNSINOS DIRS CAPS 0activeceph-mgr1Reqs:0 /s16 14 120 POOL TYPE USEDAVAILcephfs-metadatametadata 282k18.9Tcephfs-datadata 564k18.9TSTANDBY MDS

#当前的文件系统状态:

cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs get mycephfsFilesystem 'mycephfs' (1)fs_namemycephfsepoch28flags12created2023-01-01T19:09:29.258956+0800modified2023-01-05T14:58:00.369468+0800tableserver0root0session_timeout60session_autoclose300max_file_size1099511627776required_client_features{}last_failure0last_failure_osd_epoch406compatcompat={},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_mds1in0up{0=144106}faileddamagedstoppeddata_pools[8]metadata_pool7inline_datadisabledbalancerstandby_count_wanted1[mds.ceph-mgr1{0:144106} state up:active seq 27 addr [v2:172.31.6.104:6800/428364709,v1:172.31.6.104:6801/428364709] compat {c=[1],r=[1],i=[7ff]}]

#设置处于激活状态mds的数量
目前有四个 mds 服务器,但是有一个主三个备,可以优化一下部署架构,设置为为两主两备。

cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs set mycephfs max_mds 2cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs statusmycephfs - 0 clientsRANKSTATEMDSACTIVITY DNSINOS DIRS CAPS 0activeceph-mgr1Reqs:0 /s16 14 1201activeceph-mon2Reqs:0 /s10 13 110 POOL TYPE USEDAVAILcephfs-metadatametadata 354k18.9Tcephfs-datadata 564k18.9TSTANDBY MDS ceph-mgr2ceph-mon3 MDS version: ceph version 16.2.10 (45fa1a083152e41a408d15505f594ec5f1b4fe17) pacific (stable)