注意
本文档适用于 Ceph 开发版本。
概述
The ceph-volume
该工具旨在作为一个单一目的的命令行工具来部署逻辑卷作为 OSD,试图保持与ceph-disk
准备、激活和创建 OSD 时相似的 API。
它与ceph-disk
不同之处在于不交互或依赖 Ceph 安装的 udev 规则。这些规则允许自动检测先前设置的设备,而这些设备反过来会被输入到ceph-disk
以激活它们。
替换ceph-disk
The ceph-disk
该工具是在项目需要支持多种不同类型的 init 系统(upstart、sysvinit 等)同时能够发现设备的时候创建的。这导致该工具最初(并且之后唯一地)专注于 GPT 分区。具体来说是在 GPT GUID 上,这些 GUID 用于以独特的方式标记设备,以回答诸如:
这个设备是日志吗?
一个加密数据分区吗?
设备是否被部分准备?
为了解决这些问题,它使用了UDEV
规则来匹配 GUID,这些规则会调用ceph-disk
,并最终导致 systemd 单元与ceph-disk
可执行文件之间的来回通信。这个过程非常不可靠且耗时(需要设置接近三个小时的ceph-disk
executable. The process was very unreliable and time
consuming (a timeout of close to three hours 每个 OSD超时),并且会导致 OSD 在节点启动过程中完全无法启动。
由于UDEV
.
的异步行为,很难调试,甚至无法复制这些问题。ceph-disk
的世界观必须是 GPT 分区,这意味着它无法与其他技术如 LVM 或类似的设备映射器设备一起工作。最终决定创建一个模块化的东西,从 LVM 支持开始,并根据需要扩展其他技术。
GPT 分区简单吗?
虽然分区通常很简单,但ceph-disk
分区绝非简单。为了使它们能够正确地与设备发现工作流程一起工作,需要大量的特殊标志。这里是一个创建数据分区的示例调用:
/sbin/sgdisk --largest-new=1 --change-name=1:ceph data --partition-guid=1:f0fc39fd-eeb2-49f1-b922-a11939cf8a0f --typecode=1:89c57f98-2fe5-4dc0-89c1-f3ad0ceff2be --mbrtogpt -- /dev/sdb
不仅创建这些很困难,而且这些分区要求设备只能由 Ceph 拥有。例如,在某些情况下,当设备加密时,会创建一个特殊分区,其中包含未加密的密钥。这是ceph-disk
领域知识,这无法转化为“GPT 分区很简单”的理解。这里是一个创建该特殊分区的示例:
/sbin/sgdisk --new=5:0:+10M --change-name=5:ceph lockbox --partition-guid=5:None --typecode=5:fb3aabf9-d25f-47cc-bf5e-721d181642be --mbrtogpt -- /dev/sdad
模块化
ceph-volume
该工具被设计为模块化的,因为我们预计将有很多人以我们需要考虑的方式提供硬件设备。目前已经有两种:仍在使用且具有 GPT 分区的传统 ceph-disk 设备(由简单处理),以及 lvm。SPDK 设备,我们直接从用户空间管理 NVMe 设备,LVM 在那里将无法工作,因为内核根本不参与。
ceph-volume lvm
LVM 性能惩罚
简而言之:我们还没有注意到与 LVM 变更相关的任何显著性能损失。通过与 LVM 密切合作,与其他设备映射器技术一起工作的能力是理所当然的:与任何可以位于逻辑卷之下的东西一起工作在技术上没有困难。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.