注意
本文档适用于 Ceph 的开发版本。
概述
ceph-volume 工具旨在成为一个单用途命令行工具,用于部署作为 OSD 的逻辑卷,并尝试在准备、激活和创建 OSD 时保持与 ceph-disk 相似的 API。
它与 ceph-disk 的不同之处在于,它不与 Ceph 附带的 udev 规则交互或依赖这些规则。这些规则允许自动检测先前设置的设备,然后将这些设备馈入 ceph-disk 以激活它们。
替换 ceph-disk
ceph-disk 工具是在项目需要支持许多不同类型的 init 系统(upstart、sysvinit 等)同时能够发现设备时创建的。这导致该工具最初(以及后来专门)专注于 GPT 分区。特别是 GPT GUID,用于以独特的方式标记设备,以回答以下问题:
这是 Journal 吗?
这是一个加密的数据分区吗?
设备是否处于部分准备状态?
为了解决这些问题,它使用了 UDEV 规则来匹配 GUID,这些规则会调用 ceph-disk,并最终在 ceph-disk systemd 单元和 ceph-disk 可执行文件之间来回切换。这个过程非常不可靠且耗时(必须为每个 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 设备(由 simple 处理)以及 lvm。SPDK 设备(我们直接从用户空间管理 NVMe 设备)即将出现,LVM 在那里将不起作用,因为内核根本不参与。
ceph-volume lvm
LVM 性能损失
简而言之:我们尚未发现与更改为 LVM 相关的任何显着性能损失。通过能够与 LVM 紧密合作,与其他设备映射器技术合作的能力是理所当然的:与任何可以位于逻辑卷之下的东西合作都没有技术困难。