这块知识了解即可,并不是很重要,BlueStore现在替换了FileStore成为了ceph默认的存储后端
存储后端指的是OSD用于在本地磁盘上实际存储和管理数据的底层引擎。它决定了数据如何被写入磁盘、如何管理元数据、如何保证一致性等核心功能。
BlueStore直接将对象存储在原始块设备上,并消除了文件系统层,从而提高了读写操作速度。
BlueStore将对象元数据存储在块数据库block-database中,块数据库将元数据以k/v的形式存储在rocketsDB数据库中
块数据库被放在一个想叫的BlueFS分区上,专门用来保存RocksDB文件
组件 |
存储内容 |
推荐设备类型 |
WAL预写日志 |
写前日志(Write-Ahead Log) |
高速 SSD(如 NVMe) |
DB块数据库 |
元数据(RocksDB 键值数据库) |
高速 SSD |
Data数据 |
实际对象数据 |
HDD/SSD |
BlueStore存储后端具有以下特性:
1.允许对数据、块数据库和预写日志(WAL)使用不同的设备。
2.支持使用HDD、SSD和NVMe设备的几乎任何组合。
3.在原始设备或分区上操作,消除了对存储设备的双重写入,提高了元数据效率。
4.用校验和写入所有数据和元数据。在返回到客户端之前,所有读操作都使用相应的校验和进行验证。
默认情况下会将这三个放在同一个设备上,但BlueStore的性能优势主要来源于WAL和DB,可以通过将WAL和DB放在SSD设备上来提高性能
使用服务配置特定文件
可以使用服务配置特定文件来定义WAL、DB和Data的位置,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| service_type: osd service_id: osd_example placement: host_pattern: '*' data_devices: paths: - /dev/vda db_devices: paths: - /dev/nvme0 wal_devices: paths: - /dev/nvme1
默认情况下,BlueStore是自调优的,但如果需要,你可以手动调优BlueStore参数
|
BlueStore数据库分片
BlueStore可以限制存储在RocksDB中的大型omap对象的大小,并将它们分布到多个位置上,这个过程被称为分片(sharding)。在使用分片时,集群将具有相似访问和修改频率的键分组,以提高性能和节省磁盘空间。
分片可以减轻RocksDB压缩的影响。在压缩数据库之前,RocksDB必须达到一定的已用空间,这可能会影响OSD性能。有了分片,这些操作独立于所使用的空间级别,允许更精确的压缩并最小化对OSD性能的影响。
默认情况下分片是启用的
ceph config get osd.1 bluestore_rocksdb_cf
生成BlueStore OSD的方式
可以使用ceph orchestrator在集群中添加或删除OSD
1.设备不能有分区
2.设备不能挂载
3.设备至少有5GB的空间
4.设备不能包含Ceph BlueStore OSD。
ceph orch device ls
列出集群中跨主机的设备
ceph orch device zap
命令准备设备,该命令会删除所有分区并清除设备中的数据,使其可以被供应,加入force参数,可以确保删除OSD之前创建的任何分区
ceph orch device zap node /dev/vda --force
(危险操作)
编排器生成
ceph orch apply osd --all-available-devices
自动检测并部署集群中所有主机上所有可用且符合条件的存储设备作为 OSD 数据盘
这条命令会创建一个叫做osd.all-available-devices的OSD服务并且开启编排服务来管理所有的OSD生成
这个服务会使用ceph orch device zap
来准备设备
使用orch守护进程生成(推荐)
通过指定的设备和主机创建OSD进程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
ceph orch ps --daemon-type osd ceph osd tree
ceph orch daemon add osd node1:/dev/sdb ceph orch daemon add osd node2:/dev/nvme0n1
ceph orch apply osd --all-available-devices
ceph orch daemon stop osd.12
ceph osd safe-to-destroy osd.12
ceph orch daemon rm osd.12
ceph osd purge 12 --yes-i-really-mean-it
ssh node1 ceph-volume lvm zap /dev/sdb --destroy
ceph orch osd rm 12 --replace
ceph orch daemon reconfig osd.12 ceph orch redeploy osd.12
ceph orch osd rm 12 13 14 ceph orch device zap node1 /dev/sdb /dev/sdc --force
ceph orch apply osd --all-available-devices \ --filter='vendor=INTEL model=SSD'
ceph orch device ls ceph orch device ls --host node1
ceph orch daemon start osd.12 ceph orch daemon restart osd.12
|
服务规范文件生成(推荐)
通过服务规范文件来描述OSD服务的集群布局
一个osd_size_and_model类型的服务,一个osd_host_and_path类型的服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| service_type: osd service_id: osd_size_and_model placement: host_pattern: '*' data_devices: size: '100G:' db_devices: model: My-Disk wal_devices: size: '10G:20G' unmanaged: true --- service_type: osd service_id: osd_host_and_path placement: host_pattern: 'node[6-10]' data_devices: paths: - /dev/sdb db_devices: paths: - /dev/sdc wal_devices: paths: - /dev/sdd encrypted: true
ceph orch apply -i service_spec.yaml
|
通过ceph-volume命令行生成(传统方式)
ceph-volume是Ceph中专门用于管理 OSD 物理设备的命令行工具,取代了旧的ceph-disk工具
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
ceph-volume lvm create --data /dev/sdb
ceph-volume lvm create --data /dev/sdd \ --block.wal /dev/nvme0n1p1 \ --block.db /dev/nvme0n1p2
ceph-volume lvm create --data /dev/sdb --dmcrypt
for disk in /dev/sd{b,c,d}; do ceph-volume lvm create --data $disk done
ceph-volume lvm list
ceph-volume inventory --hostname node1
ceph-volume inventory --device /dev/sdb
ceph-volume lvm list --format json | jq '.[] | .[0].tags."ceph.osd_fsid"'
ceph-volume lvm activate 0 abc123-456-789
ceph-volume lvm activate --all
ceph-volume lvm activate 0 abc123-456-789 --no-start
ceph-volume lvm destroy --osd-id 0
ceph-volume lvm zap /dev/sdb --destroy
ceph-volume lvm zap /dev/sdb /dev/sdc /dev/sdd
ceph-volume lvm migrate --osd-id 0 --from /dev/sdb --to /dev/sdc
ceph-volume lvm bluefs-bdev-expand --osd-id 0
ceph-volume lvm prepare --data /dev/sdb --dmcrypt
ceph-volume lvm activate --dmcrypt 0 abc123-456-789
ceph-volume --log-level debug lvm list
ceph-volume lvm create --data /dev/sdb --dry-run
vgdisplay -v ceph-$(ceph-volume lvm list --format json | jq -r '.[0][0].tags."ceph.vg_uuid"')
ceph-volume lvm list --format json
ceph-volume inventory | jq -r '.[] | select(.available) | .path'
ceph-volume inventory --device /dev/sdb | jq '.[].ceph_device'
|