1 2 3 4 5 6 7 作者:李晓辉 联系方式: 1. 微信:Lxh_Chat 2. 邮箱:939958092@qq.com
BlueStore 简介 BlueStore 取代 FileStore 作为 OSD 的存储后端,BlueStore 将对象直接存储在原始块设备上,免除了对文件系统层的需要,从而提高了读写操作速度
BlueStore 架构 Ceph 集群中存储的对象在整个集群具有唯一标识符、二进制对象数据和对象元数据 。BlueStore 将对象元数据存储在块数据库 中。块数据库将元数据作为键值对存储在 RocksDB 数据库中,这是一种高性能的键值存储。
块数据库驻留于存储设备上的一个小型 BlueFS 分区。BlueFS 是最小的文件系统,用于保存 RocksDB 文件。
BlueStore 利用预写式日志 (WAL ) 将数据写入块存储设备。预写式日志执行日志记录功能,并记录所有事务。
BlueStore 性能 FileStore 写入到日志,然后从日志中写入到块设备。BlueStore 可避免这种双重写入的性能损失,直接将数据写入块设备 ,同时使用单独的数据流将事务记录到预写式日志 。当工作负载相似时,BlueStore 的写操作速度约为 FileStore 的两倍 。
在混用不同的集群存储设备时,自定义 BlueStore OSD 可以提高性能。创建 BlueStore OSD 时,默认会将数据、块数据库和预写式日志放置到同一个块设备上。块数据库和预写式日志有很多性能优势,所以将这些组件放在单独的、速度更快的设备上也许可以提高性能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@serverc ~]# cat bluestore.yml service_type: osd service_id: lxh-bluestore-test placement: host_pattern: 'serverc*' data_devices: paths: - /dev/vde wal_devices: paths: - /dev/vdf [root@serverc ~]# ceph orch apply -i bluestore.yml Scheduled osd.lxh-bluestore-test update... [root@serverc ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vde 252:64 0 10G 0 disk └─ceph--aba9b-'block' 253:3 0 10G 0 lvm vdf 252:80 0 10G 0 disk └─ceph--110ee-'wal' 253:4 0 10G 0 lvm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@serverc ~]# ceph orch ls --service-type osd --format yaml --- service_type: osd service_id: lxh-bluestore-test service_name: osd.lxh-bluestore-test placement: host_pattern: serverc* spec: data_devices: paths: - /dev/vde filter_logic: AND objectstore: bluestore wal_devices: paths: - /dev/vdf status: created: '2023-09-08T18:40:58.116841Z' running: 0 size: 1
BlueStore 存储后端提供以下功能:
允许为数据、块数据库和预写式日志 (WAL) 使用单独的设备。
几乎支持使用 HDD、SSD 和 NVMe 设备的任意组合。
在原始设备或分区上操作,从而消除对存储设备的双重写入,同时提高元数据效率。
使用校验和写入所有数据和元数据。在返回至客户端之前,所有读取操作都使用相对应的校验和进行验证。
添加OSD到集群 先查看现有服务器上的硬盘情况
1 2 3 4 5 6 7 [root@serverc ~]# ceph orch device ls Hostname Path Type Serial Size Health Ident Fault Available clienta.lab.example.com /dev/vdb hdd 10.7G Unknown N/A N/A Yes clienta.lab.example.com /dev/vdc hdd 10.7G Unknown N/A N/A Yes clienta.lab.example.com /dev/vdd hdd 10.7G Unknown N/A N/A Yes clienta.lab.example.com /dev/vde hdd 10.7G Unknown N/A N/A Yes clienta.lab.example.com /dev/vdf hdd 10.7G Unknown N/A N/A Yes
将clienta上的/dev/vdb盘加进来
1 2 [root@serverc ~]# ceph orch daemon add osd clienta.lab.example.com:/dev/vdb Created osd(s) 11 on host 'clienta.lab.example.com'
再次查看osd情况,发现在clienta上多了一个osd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@serverc ~]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.11755 root default -9 0.00980 host clienta 11 hdd 0.00980 osd.11 up 1.00000 1.00000 -3 0.03918 host serverc 0 hdd 0.00980 osd.0 up 1.00000 1.00000 1 hdd 0.00980 osd.1 up 1.00000 1.00000 2 hdd 0.00980 osd.2 up 1.00000 1.00000 10 hdd 0.00980 osd.10 up 1.00000 1.00000 -5 0.02939 host serverd 3 hdd 0.00980 osd.3 up 1.00000 1.00000 5 hdd 0.00980 osd.5 up 1.00000 1.00000 7 hdd 0.00980 osd.7 up 1.00000 1.00000 -7 0.03918 host servere 4 hdd 0.00980 osd.4 up 1.00000 1.00000 6 hdd 0.00980 osd.6 up 1.00000 1.00000 8 hdd 0.00980 osd.8 up 1.00000 1.00000 9 hdd 0.00980 osd.9 up 1.00000 1.00000
擦除硬盘准备OSD 如果硬盘并不是空的,可以用下面的命令让设备做好调配准备,此命令将删除所有分区并清除设备中的数据
需要注意的是,这个命令并不能擦除osd,只能擦除非ceph内的外部硬盘
1 [root@serverc ~]# ceph orch device zap clienta.lab.example.com /dev/vdc --force
自动创建OSD 编排器服务可在集群主机中发现可用设备,添加设备并创建 OSD 守护进程
使用 ceph orch apply osd --all-available-devices
命令调配所有可用而未使用的设备。
1 2 [root@serverc ~]# ceph orch apply osd --all-available-devices Scheduled osd.all-available-devices update...
停止自动应用osd 如果前面我们已经添加了所有硬盘到集群中,而且添加了–all-available-devices选项,将会导致我们删除osd后再次重新创建,我们先停止集群自动创建osd
1 2 [root@serverc ~]# ceph orch apply osd --all-available-devices --unmanaged=true Scheduled osd.all-available-devices update...
从集群中删除OSD 这里有一个很重要的问题,一般情况下我们不会主动删除某个osd,通常是它坏了,主动报告状态为down,这个问题是我们如何知道哪个osd是哪块盘,例如我明确知道host2上的/dev/nvme0n3坏了,那这是哪个osd呢,或者反过来,我就想删除某个osd,我如何知道它是哪块盘呢
从上面的信息我们看到host2上的osd分别为2 4 7 10,一共4个osd,现在我想删除osd 10,并把盘用来干别的
查询osd所在的硬盘名称 查询osd.1在哪个服务器上的哪块硬盘
经过查询,发现osd.0属于"serverc.lab.example.c
的vdb
1 2 3 4 5 6 [root@serverc ~]# ceph osd metadata 0 | grep -E 'devices|hostname' "bluestore_bdev_devices" : "vdb" , "container_hostname" : "serverc.lab.example.com" , "devices" : "vdb" , "hostname" : "serverc.lab.example.com" , "objectstore_numa_unknown_devices" : "vdb" ,
OSD暂停服务 暂停服务后,权重降低为0
1 2 3 4 5 6 7 8 [root@serverc ~]# ceph osd out 0 marked out osd.0. [root@serverc ~]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -3 0.03918 host serverc 0 hdd 0.00980 osd.0 up 0 1.00000 1 hdd 0.00980 osd.1 up 1.00000 1.00000
停止OSD stop之后,相应的服务也会停止
1 2 3 4 5 [root@serverc ~]# ceph orch daemon stop osd.0 Scheduled to stop osd.0 on host 'serverc.lab.example.com' [root@serverc ~]# systemctl is-active ceph-2ae6d05a-229a-11ec-925e-52540000fa0c@osd.0.service inactive
删除OSD 1 2 [root@serverc ~]# ceph orch osd rm 0 Scheduled OSD(s) for removal
如果在rm之后,发现crush并没有删除,可以手工删除
1 [root@serverc ~]# ceph osd crush rm osd.0
确认OSD Secret已删除 1 2 3 4 [root@serverc ~]# ceph auth list | grep osd.0 installed auth entries: osd.0
如果还有残留,会导致下次创建osd失败,通过以下方式删除
1 [root@serverc ~]# ceph auth del osd.0