Ceph 存储引擎—OSD 类型
Ceph 存储引擎—OSD 类型
Ceph 是一个分布式存储系统,它可以提供多种存储服务,包括块存储 (RBD), 对象存储 (RADOS Gateway) 和文件系统 (CephFS)。Ceph
的存储后端使用 RADOS (Reliable Autonomic Distributed Object Store) 来管理数据。在 RADOS 层面,有两种不同的存储引擎可以用来存储数据:FileStore
和 BlueStore。
FileStore
FileStore 是 Ceph 较早版本中默认的存储引擎。在 FileStore 中,每个对象存储设备 (OSD) 使用一个标准的文件系统(通常是
XFS)来保存数据。这意味着每个对象都被存储为一个文件,而元数据和日志则存储在单独的文件中。这种实现方式简单并且易于理解,但有一些局限性,比如写入放大问题(因为数据首先需要写入日志文件再写入数据文件),以及依赖于文件系统的性能。
BlueStore
BlueStore 是 Ceph 从 Luminous 版本开始引入的新存储引擎,旨在解决 FileStore 的一些限制。BlueStore 直接在裸设备上运行,不依赖于外部文件系统。这意味着
BlueStore 可以更好地控制底层存储,从而优化性能并减少写入放大。BlueStore 提供了一些关键特性,如:
- 直接在裸设备上运行:这允许 BlueStore 更高效地利用存储资源,并能更精细地控制 I/O 调度。
- 内存映射缓存:BlueStore 使用内存映射缓存来加速读取操作。
- 更快的写入性能:通过避免额外的日志文件写入,减少了写入放大。
- 更好的延迟特性:BlueStore 通过减少 I/O 操作的复杂性和开销来降低延迟。
- 支持多种存储介质:例如,它可以将 SSD 用作缓存层,而将 HDD 用作容量层。
总结
- FileStore 依赖于传统的文件系统,数据和元数据都存储在文件中。
- BlueStore 不依赖于外部文件系统,而是直接管理裸设备,这使得它可以更好地控制存储资源和 I/O 操作,从而提供更高的性能和更低的延迟。
在 Ceph 集群中选择使用 BlueStore 还是 FileStore 主要取决于您的具体需求和环境。对于大多数现代工作负载,BlueStore
由于其更高的性能和更低的延迟而成为首选。
创建OSD
查看磁盘信息
1 | fdisk -l |

查看挂载情况
1 | lsblk |

挂载
1 | ceph orch daemon add osd node1:/dev/sdb |
再次查看挂载

查看OSD
1 | ceph osd tree |

删除磁盘签名,分区表等所有信息
将磁盘变成生磁盘、全新磁盘
1 | wipefs -a -f /dev/sdd |
其他创建OSD方法
创建 FileStore 和 BlueStore 存储引擎的过程有所不同,因为它们分别采用了不同的存储机制。
FileStore 存储引擎
FileStore 是 Ceph 较早版本中默认的存储引擎。在 FileStore 中,每个对象存储设备 (OSD) 使用一个标准的文件系统(通常是
XFS)来保存数据。这意味着每个对象都被存储为一个文件,而元数据和日志则存储在单独的文件中。
创建步骤
准备磁盘:
确保磁盘没有被使用,并且没有分区表。
如果磁盘上有分区表,需要先删除分区表。
1
sudo parted -s /dev/sdc mklabel gpt
创建文件系统:
使用
mkfs.xfs
创建 XFS 文件系统。1
sudo mkfs.xfs -f /dev/sdc
挂载文件系统:
挂载文件系统到一个临时目录。
1
2sudo mkdir -p /mnt/sdc1
sudo mount /dev/sdc /mnt/sdc1
初始化 FileStore OSD:
使用
ceph-volume
来初始化 FileStore。1
sudo ceph-volume lvm create --filestore --data /mnt/sdc1
卸载文件系统:
卸载文件系统。
1
2sudo umount /mnt/tmp-sdc
sudo rmdir /mnt/tmp-sdc
BlueStore 存储引擎
BlueStore 是 Ceph 从 Luminous 版本开始引入的新存储引擎,旨在解决 FileStore 的一些限制。BlueStore 直接在裸设备上运行,不依赖于外部文件系统。
创建步骤
准备磁盘:
确保磁盘没有被使用,并且没有分区表。
如果磁盘上有分区表,需要先删除分区表。
1
sudo parted -s /dev/sdc mklabel gpt
创建分区:
如果需要使用单独的设备来存放 WAL 和 DB,则创建相应的分区。
1
2
3sudo parted -s /dev/sdc mkpart primary 0% 100%
sudo parted -s /dev/sdd mkpart primary 0% 100%
sudo parted -s /dev/sde mkpart primary 0% 100%
格式化分区:
如果需要使用单独的设备来存放 WAL 和 DB,则需要格式化这些分区。
1
2sudo mkfs.ext4 /dev/sdd1
sudo mkfs.ext4 /dev/sde1
初始化 BlueStore OSD:
使用
ceph-volume
来初始化 BlueStore。1
sudo ceph-volume lvm create --bluestore --data /dev/sdc1 --wal /dev/sdd1 --db /dev/sde1
如果您只需要一个设备来存放数据,则可以省略
--wal
和--db
参数。
激活 OSD:
初始化完成后,您需要激活新创建的 OSD。
1
sudo systemctl start ceph-osd@<osd_id>
实际操作
步骤 1: 准备磁盘
对于 /dev/sdb
:
删除现有的分区表(如果有的话):
1
sudo parted -s /dev/sdb mklabel gpt
创建分区:
- 我们将创建两个分区,一个用于 WAL,另一个用于 DB。
1
2sudo parted -s /dev/sdb mkpart primary 0% 50%
sudo parted -s /dev/sdb mkpart primary 50% 100%查看分区表:
- 查看分区是否已正确创建。
1
sudo parted -l /dev/sdb
步骤 2: 格式化分区
格式化第一个分区:
- 我们将使用 ext4 文件系统来格式化第一个分区用于 WAL。
1
sudo mkfs.ext4 /dev/sdb1
格式化第二个分区:
- 我们将使用 ext4 文件系统来格式化第二个分区用于 DB。
1
sudo mkfs.ext4 /dev/sdb2
步骤 3: 挂载分区
挂载分区:
- 挂载分区到临时目录。
1
2
3sudo mkdir -p /mnt/osd-wal /mnt/osd-db
sudo mount /dev/sdb1 /mnt/osd-wal
sudo mount /dev/sdb2 /mnt/osd-db
步骤 4: 初始化 BlueStore OSD
使用
ceph-volume
初始化 BlueStore:- 现在我们可以使用
ceph-volume
来初始化 BlueStore,其中/dev/sdc1
作为数据分区,而/dev/sdb1
和/dev/sdb2
作为
WAL 和 DB 分区。
1
sudo ceph-volume lvm create --bluestore --data /dev/sdc --wal /mnt/osd-wal --db /mnt/osd-db
- 现在我们可以使用
步骤 5: 清理临时目录
卸载分区:
- 卸载分区以便我们可以使用它们。
1
2sudo umount /mnt/tmp-sdb1
sudo umount /mnt/tmp-sdb2清理临时目录:
- 清理之前创建的临时目录。
1
sudo rm -rf /mnt/tmp-sdb1 /mnt/tmp-sdb2
步骤 6: 激活和验证
激活 OSD:
- 初始化完成后,您需要激活新创建的 OSD:
1
sudo systemctl start ceph-osd@<osd_id>
- 其中
<osd_id>
是由ceph-volume
在初始化时分配给新 OSD 的 ID。
验证 OSD:
- 您可以使用
ceph osd tree
或ceph osd stat
命令来验证新添加的 OSD 是否已经被集群识别并处于正常状态:
1
sudo ceph osd tree
- 您可以使用
以上步骤应该能够帮助您成功配置使用 /dev/sdb
的两个分区来分别存放 WAL 和 DB,同时使用 /dev/sdc
作为数据分区。如果您在操作过程中遇到任何问题,请随时告诉我。