注意
本文档适用于 Ceph 的开发版本。
batch
此子命令允许根据给定的设备输入同时创建多个 OSD。batch 子命令与驱动器组密切相关。单个驱动器组规范对应于单个 batch 调用。
此子命令基于 create,并将使用完全相同的代码路径。batch 所做的只是计算所有卷的适当大小,并跳过已创建的卷。
ceph-volume lvm create 支持的所有功能,例如 dmcrypt、避免 systemd 单元启动、定义 bluestore,都受支持。
磁盘自动排序
如果 batch 仅接收单个数据设备列表并传递其他选项,ceph-volume 将根据其旋转属性自动对磁盘进行排序,并根据使用的对象存储使用非旋转磁盘作为 block.db 或 journal。如果所有设备都用于独立 OSD,无论是否旋转或固态,请传递 --no-auto。例如,假设使用 bluestore 并且未传递 --no-auto,则不推荐使用的行为将根据传递的设备部署以下内容
设备全部为旋转硬盘:为每个设备创建一个 OSD
设备全部为 SSD:为每个设备创建两个 OSD
设备是 HDD 和 SSD 的混合:数据放在旋转设备上,
block.db创建在 SSD 上,尽可能大。
注意
虽然 ceph-volume lvm create 中的操作允许使用 block.wal,但 auto 行为不支持它。
此默认自动排序行为现已弃用,并将在未来的版本中更改。除非传递 --auto 选项,否则设备不会自动排序。
- 建议使用
block.db的显式设备列表、 block.wal和journal。
报告
默认情况下,batch 将打印计算出的 OSD 布局报告,并要求用户确认。可以通过传递 --yes 来覆盖此设置。
如果想要尝试多次调用而不被要求部署,可以传递 --report。ceph-volume 将在打印报告后退出。
考虑以下调用
$ ceph-volume lvm batch --report /dev/sdb /dev/sdc /dev/sdd --db-devices /dev/nvme0n1
这将在 NVME 设备上部署三个具有外部 db 和 wal 卷的 OSD。
美观的报告
pretty 报告格式(默认)如下所示
$ ceph-volume lvm batch --report /dev/sdb /dev/sdc /dev/sdd --db-devices /dev/nvme0n1
--> passed data devices: 3 physical, 0 LVM
--> relative data size: 1.0
--> passed block_db devices: 1 physical, 0 LVM
Total OSDs: 3
Type Path LV Size % of device
----------------------------------------------------------------------------------------------------
data /dev/sdb 300.00 GB 100.00%
block_db /dev/nvme0n1 66.67 GB 33.33%
----------------------------------------------------------------------------------------------------
data /dev/sdc 300.00 GB 100.00%
block_db /dev/nvme0n1 66.67 GB 33.33%
----------------------------------------------------------------------------------------------------
data /dev/sdd 300.00 GB 100.00%
block_db /dev/nvme0n1 66.67 GB 33.33%
JSON 报告
报告可以使用 --format json 或 --format json-pretty 生成结构化输出
$ ceph-volume lvm batch --report --format json-pretty /dev/sdb /dev/sdc /dev/sdd --db-devices /dev/nvme0n1
--> passed data devices: 3 physical, 0 LVM
--> relative data size: 1.0
--> passed block_db devices: 1 physical, 0 LVM
[
{
"block_db": "/dev/nvme0n1",
"block_db_size": "66.67 GB",
"data": "/dev/sdb",
"data_size": "300.00 GB",
"encryption": "None"
},
{
"block_db": "/dev/nvme0n1",
"block_db_size": "66.67 GB",
"data": "/dev/sdc",
"data_size": "300.00 GB",
"encryption": "None"
},
{
"block_db": "/dev/nvme0n1",
"block_db_size": "66.67 GB",
"data": "/dev/sdd",
"data_size": "300.00 GB",
"encryption": "None"
}
]
大小调整
未传递大小调整参数时,ceph-volume 将从传递的设备列表(或使用自动排序时的排序列表)中获取大小。 ceph-volume batch 将尝试充分利用设备的可用容量。建议依赖自动大小调整。
如果需要针对 wal、db 或 journal 设备采用不同的大小调整策略,ceph-volume 提供了隐式和显式大小调整规则。
隐式大小调整
在设备未充分利用或并非所有数据设备都准备好使用(例如由于磁盘损坏)的情况下,仍然可以依赖 ceph-volume 自动大小调整。用户可以向 ceph-volume 提供提示,说明应该有多少数据设备在设置的快速设备上拥有其外部卷。这些选项是
--block-db-slots--block-wal-slots--journal-slots
例如,考虑一个 OSD 主机,它应该包含 5 个数据设备和一个用于 wal/db 卷的设备。然而,一个数据设备目前损坏并正在更换。无需计算 wal/db 卷的显式大小,只需调用
$ ceph-volume lvm batch --report /dev/sdb /dev/sdc /dev/sdd /dev/sde --db-devices /dev/nvme0n1 --block-db-slots 5
显式大小调整
还可以通过参数向 ceph-volume 提供显式大小
--block-db-size--block-wal-size--journal-size
ceph-volume 将尝试满足请求的大小,给定传递的磁盘。如果无法满足,则不会部署 OSD。
幂等性和磁盘更换
ceph-volume lvm batch 旨在具有幂等性,即重复调用相同的命令必须产生相同的结果。例如,调用
$ ceph-volume lvm batch --report /dev/sdb /dev/sdc /dev/sdd --db-devices /dev/nvme0n1
将导致部署三个 OSD(如果所有磁盘都可用)。再次调用此命令,您仍将得到三个 OSD,并且 ceph-volume 将以返回码 0 退出。
假设 /dev/sdc 损坏需要更换。在销毁 OSD 并更换硬件后,您可以再次调用相同的命令,ceph-volume 将检测到三个所需 OSD 中只有两个已设置,并重新创建缺失的 OSD。
这种幂等性概念与 高级 OSD 服务规范 紧密耦合并被其广泛使用。