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 create myrbd1 64 64
pool 'myrbd1' created
#对存储池启用rbd功能
cephadmin@ceph-deploy:~$ ceph osd pool application enable myrbd1 rbd
enabled application 'rbd' on pool 'myrbd1'
#使用rbd命令对存储池初始化
cephadmin@ceph-deploy:~$ rbd pool init -p myrbd1
#创建myrbd1映像
cephadmin@ceph-deploy:~$ rbd create myimg1 --size 5G --pool myrbd1
cephadmin@ceph-deploy:~$ rbd create myimg2 --size 3G --pool myrbd1 --image-format 2 --image-feature layering
#列出指定pool中的img
cephadmin@ceph-deploy:~$ rbd ls --pool myrbd1
myimg1
myimg2
#查看指定的img的信息
cephadmin@ceph-deploy:~$ rbd --image myimg1 --pool myrbd1 info
rbd image 'myimg1':
size 5 GiB in 1280 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 5ef6b2eba38b
block_name_prefix: rbd_data.5ef6b2eba38b
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Sat Dec 31 21:47:32 2022
access_timestamp: Sat Dec 31 21:47:32 2022
modify_timestamp: Sat Dec 31 21:47:32 2022
cephadmin@ceph-deploy:~$ rbd --image myimg2 --pool myrbd1 info
rbd image 'myimg2':
size 3 GiB in 768 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 5efbb2203242
block_name_prefix: rbd_data.5efbb2203242
format: 2
features: layering
op_features:
flags:
create_timestamp: Sat Dec 31 21:49:34 2022
access_timestamp: Sat Dec 31 21:49:34 2022
modify_timestamp: Sat Dec 31 21:49:34 2022
#查看ceph当前状态
cephadmin@ceph-deploy:~$ ceph df
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 60 TiB 60 TiB 116 MiB 116 MiB 0
TOTAL 60 TiB 60 TiB 116 MiB 116 MiB 0
--- POOLS ---
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
device_health_metrics 1 1 0 B 0 0 B 0 19 TiB
myrbd1 2 64 405 B 7 48 KiB 0 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 的同步
客户端使用 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 list
mds.ceph-mgr1
key: AQAdRbFjOwBXIRAAUTdwElBzYPHW+4uFicFC7Q==
caps: [mds] allow
caps: [mon] allow profile mds
caps: [osd] allow rwx
osd.0
key: AQC0IqNjbcgKIxAA+BCNpQeZiMujR+r+69Miig==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [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.jack
mon 'allow r' osd 'allow rwx pool=mypool'
AQAtr8dfi37XMhAADbHWEZ0shY1QZ5A8eBpeoQ==
#修 改 用 户 能 力
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.jack
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth caps client.jack mon 'allow r' osd 'allow rw pool=testpool2'
updated caps for client.jack
cephadmin@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.tom
updated
#导出 keyring 至指定文件
[cephadmin@ceph-deploy ceph-cluster]$ ceph auth get client.user1 -o
ceph.client.user1.keyring
exported 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 -i
ceph.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.keyring
importing 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.keyring
importing 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 layering
cephadmin@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 [email protected]:/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/rbd0
root@ceph-node4:/# lsblk
rbd0
root@ceph-node4:/# mkfs.xfs /dev/rbd0
root@ceph-node4:/# mount /dev/rbd0 /data
root@ceph-node4:/# docker run -it -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD="12345678" -v /data:/var/lib/mysql mysql:5.6.46
48374db8541a7fa375c00611373051ef21690e89adfd4c156b3f6ffb0dbe95a2
root@ceph-node4:/data# ls
ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema test
#在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/rbd0
root@ceph-node4:/etc/ceph# mkdir /data1
root@ceph-node4:/etc/ceph# mount /dev/rbd1 /data1
root@ceph-node4:/etc/ceph# cp /var/log/auth.log /data1
root@ceph-node4:/etc/ceph# cd /data1
root@ceph-node4:/data1# ls
auth.log lost+found
Ceph FS 需要运行 Meta Data Services(MDS)服务,其守护进程为 ceph-mds,ceph-mds进程管理与 cephFS 上存储的文件相关的元数据,并协调对 ceph 存储集群的访问。
#部署MDS服务:
cephadmin@ceph-deploy:~/ceph-cluster$ apt-cache madison ceph-mds
ceph-mds | 16.2.10-1bionic | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic/main amd64 Packages
cephadmin@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 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
[cephadmin@ceph-deploy ceph-cluster]$ ceph fs new mycephfs cephfs-metadata
cephfs-data
new fs with metadata pool 7 and data pool 8
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs ls
name: mycephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ]
#查看指定 cephFS 状态
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status mycephfs
mycephfs - 0 clients
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mgr1 Reqs: 0 /s 10 13 12 0
POOL TYPE USED AVAIL
cephfs-metadata metadata 146k 18.9T
cephfs-data data 0 18.9T
MDS version: ceph version 16.2.10 (45fa1a083152e41a408d15505f594ec5f1b4fe17) pacific (stable)
#验证cephFS服务状态
cephadmin@ceph-deploy:~$ ceph mds stat
mycephfs: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.yanyan
exported 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 -o
ceph.client.yanyan.keyring
exported 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.keyring
yanyan.key [email protected]:/etc/ceph/
#客户端验证权限
root@ceph-node4:~# ceph --user yanyan -s
cluster:
id: 7c088d6f-06b0-4584-b23f-c0f150af51d4
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 24m)
mgr: ceph-mgr1(active, since 65m)
mds: 1/1 daemons up
osd: 16 osds: 16 up (since 24m), 16 in (since 13d)
rgw: 1 daemon active (1 hosts, 1 zones)
data:
volumes: 1/1 healthy
pools: 10 pools, 329 pgs
objects: 296 objects, 218 MiB
usage: 948 MiB used, 60 TiB / 60 TiB avail
pgs: 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.key
root@ceph-node4:/etc/ceph# df -h
Filesystem Size Used Avail Use% Mounted on
udev 955M 0 955M 0% /dev
172.31.6.101:6789,172.31.6.102:6789,172.31.6.103:6789:/ 19T 0 19T 0% /data
#客户端通过key挂载
root@ceph-node3:~# mkdir /data
root@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 -h
Filesystem Size Used Avail Use% Mounted on
udev 955M 0 955M 0% /dev
172.31.6.101:6789,172.31.6.102:6789,172.31.6.103:6789:/ 19T 0 19T 0% /data
root@ceph-node3:~# cp /var/log/auth.log /data
root@ceph-node3:~# cd /data
root@ceph-node3:/data# ls
auth.log
root@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
Jan 4 22:25:01 ceph-node3 CRON[4365]: pam_unix(cron:session): session closed for user root
12345678
testlog
#客户端内核加载 ceph.ko 模块挂载 cephfs 文件系统
root@ceph-node4:/# lsmod|grep ceph
ceph 380928 1
libceph 315392 1 ceph
fscache 65536 1 ceph
libcrc32c 16384 5 nf_conntrack,nf_nat,xfs,raid456,libceph
root@ceph-node4:/# modinfo ceph
filename: /lib/modules/4.15.0-130-generic/kernel/fs/ceph/ceph.ko
license: GPL
description: Ceph filesystem for Linux
author: Patience Warnick <[email protected]>
author: Yehuda Sadeh <[email protected]>
author: Sage Weil <[email protected]>
alias: fs-ceph
srcversion: CB79D9E4790452C6A392A1C
depends: libceph,fscache
retpoline: Y
intree: Y
name: ceph
vermagic: 4.15.0-130-generic SMP mod_unload
signat: PKCS#7
signer:
sig_key:
sig_hashalgo: md4
cephadmin@ceph-deploy:~$ ceph mds stat
mycephfs: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-mgr2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon3
#验证 mds 服务器当前状态:
[cephadmin@ceph-deploy ceph-cluster]$ ceph mds stat
mycephfs-1/1/1 up {0=ceph-mgr1=up:active}, 3 up:standby
#验证 ceph集群当前状态
当前处于激活状态的 mds 服务器有一台,处于备份状态的 mds 服务器有三台。
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status
mycephfs - 0 clients
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mgr1 Reqs: 0 /s 16 14 12 0
POOL TYPE USED AVAIL
cephfs-metadata metadata 282k 18.9T
cephfs-data data 564k 18.9T
STANDBY MDS
#当前的文件系统状态:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs get mycephfs
Filesystem 'mycephfs' (1)
fs_name mycephfs
epoch 28
flags 12
created 2023-01-01T19:09:29.258956+0800
modified 2023-01-05T14:58:00.369468+0800
tableserver 0
root 0
session_timeout 60
session_autoclose 300
max_file_size 1099511627776
required_client_features {}
last_failure 0
last_failure_osd_epoch 406
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=144106}
failed
damaged
stopped
data_pools [8]
metadata_pool 7
inline_data disabled
balancer
standby_count_wanted 1
[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 2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status
mycephfs - 0 clients
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mgr1 Reqs: 0 /s 16 14 12 0
1 active ceph-mon2 Reqs: 0 /s 10 13 11 0
POOL TYPE USED AVAIL
cephfs-metadata metadata 354k 18.9T
cephfs-data data 564k 18.9T
STANDBY MDS
ceph-mgr2
ceph-mon3
MDS version: ceph version 16.2.10 (45fa1a083152e41a408d15505f594ec5f1b4fe17) pacific (stable)