注意

本文档适用于 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子命令能够存储和稍后重新发现和查询与 OSD 关联的设备,以便稍后可以激活它们。

LVM 性能惩罚

简而言之:我们还没有注意到与 LVM 变更相关的任何显著性能损失。通过与 LVM 密切合作,与其他设备映射器技术一起工作的能力是理所当然的:与任何可以位于逻辑卷之下的东西一起工作在技术上没有困难。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.