第 6 章 使用 ceph-volume 实用程序部署 OSD
ceph-volume
工具是一个目的命令行工具,用于将逻辑卷部署为 OSD。它使用插件类型框架来部署具有不同设备技术的 OSD。ceph-volume
实用程序遵循与 ceph-disk
实用程序类似的工作流,用于部署 OSD,采用可预测且强大的方法来准备、激活和启动 OSD。目前,ceph-volume
工具只支持 lvm
插件,并计划将来支持其他技术。
ceph-disk
命令已弃用。
6.1. 使用 ceph-volume
LVM 插件
通过使用 LVM 标签,lvm
子命令可以通过查询与 OSD 关联的设备来存储和重新发现它们,以便激活它们。这包括对基于 lvm 的技术(如 dm-cache
)的支持。
使用 ceph-volume
时,使用 dm-cache
是透明的,把 dm-cache
视为逻辑卷。使用 dm-cache
时的性能增益和损失取决于特定工作负载。通常,随机和顺序读取将以较小的块大小显示性能增长;而随机和顺序写入的性能在更大块大小下的性能会下降。
要使用 LVM 插件,在 ceph-volume
命令中添加 lvm
作为子命令:
ceph-volume lvm
lvm
子命令有三个子命令,如下所示:
使用 create
子命令,将 prepare
和 activate
子命令组合为一个子命令。详情请查看 create
子命令 部分。
6.1.1. 准备 OSD
prepare
子命令为 OSD 后端对象存储准备一个 OSD 后端对象存储,并为 OSD 数据和日志使用逻辑卷。没有默认的对象存储类型。对象存储类型需要在准备时设置 --filestore
或 --bluestore
选项。从 Red Hat Ceph Storage 3.2 开始,支持 BlueStore 对象存储类型。prepare
子命令将不会创建或修改逻辑卷,除非使用 LVM 标签添加一些额外的元数据。
LVM 标签使卷更易于以后发现,并帮助将卷识别为 Ceph 系统的一部分,以及它们具有的角色。ceph-volume lvm prepare
命令添加以下 LVM 标签列表:
-
cluster_fsid
-
data_device
-
journal_device
-
encrypted
-
osd_fsid
-
osd_id
-
journal_uuid
prepare
进程非常严格,它需要两个可供使用的逻辑卷,并且需要 OSD 数据和日志的最小大小。日志设备可以是逻辑卷或分区。
以下是 prepare
工作流过程:
- 为数据和日志接受逻辑卷
- 为 OSD 生成 UUID
- 要求 Ceph monitor 获取重复使用生成的 UUID 的 OSD 标识符
- OSD 数据目录已创建,数据卷被挂载
- 日志从数据卷到日志位置进行符号链接
-
monmap
为激活获取 -
设备挂载,数据目录由 填充
ceph-osd
- LVM 标签分配给OSD 数据和日志卷
在 OSD 节点上执行以下步骤,并以 root
用户身份使用 LVM 准备简单的 OSD 部署:
ceph-volume lvm prepare --bluestore --data $VG_NAME/$LV_NAME
例如:
# ceph-volume lvm prepare --bluestore --data example_vg/data_lv
对于 BlueStore,如果您要为 RocksDB 使用单独的设备,您还可以指定 --block.db
和 --block.wal
选项。
以下是使用分区作为日志设备的 FileStore 示例:
# ceph-volume lvm prepare --filestore --data example_vg/data_lv --journal /dev/sdc1
当使用分区时,它必须包含可由 blkid
命令发现的 PARTUUID
,这样无论设备名称或路径是什么,都可以正确识别它。
ceph-volume
LVM 插件不会在原始磁盘设备中创建分区。必须先创建此分区,然后才能将分区用于 OSD 日志设备。
6.1.2. 激活 OSD
完成准备过程后,OSD 已准备好激活。激活过程可在启动时启用 Systemd 单元,允许启用和挂载正确的 OSD 标识符及其 UUID。
以下是 activate
工作流过程:
- 需要 OSD ID 和 OSD uuid
- 启用与 OSD id 和 OSD uuid匹配的 systemd 单元
- systemd 单元将确保所有设备已就绪并挂载
-
匹配的
ceph-osd
systemd 单元将开始
在 OSD 节点上执行以下步骤,并以 root
用户身份激活 OSD:
ceph-volume lvm activate --filestore $OSD_ID $OSD_UUID
例如:
# ceph-volume lvm activate --filestore 0 0263644D-0BF1-4D6D-BC34-28BD98AE3BC8
运行此命令时多次没有副作用。
6.1.3. 创建 OSD
create
子命令将部署新 OSD 的两步流程打包为:调用 prepare
子命令,然后将 activate
子命令调用到单个子命令。单独使用 prepare
和 activate
的原因是,逐步将新 OSD 引入存储集群中,并避免重新平衡大量数据。进程没有区别,但 OSD 会在 完成后 立即启动和 进入。
对 FileStore、OSD 节点上并以 root
用户身份执行以下步骤:
ceph-volume lvm create --filestore --data $VG_NAME/$LV_NAME --journal $JOURNAL_DEVICE
例如:
# ceph-volume lvm create --filestore --data example_vg/data_lv --journal example_vg/journal_lv
对 BlueStore、OSD 节点上并以 root
用户身份执行以下步骤:
# ceph-volume lvm create --bluestore --data <device>
例如:
# ceph-volume lvm create --bluestore --data /dev/sda
6.1.4. 使用 batch
模式
在提供单一设备时,batch
子命令可自动创建多个 OSD。ceph-volume
命令决定基于驱动器类型创建 OSD 的最佳方法。这种最佳方式取决于对象存储格式、蓝牙或 FileStore。
BlueStore 是 OSD 的默认对象存储类型。在使用 BlueStore 时,OSD 优化取决于三个不同的情景,具体取决于所使用的设备。如果所有设备都是传统的硬盘驱动器,则每个设备创建一个 OSD。如果所有设备都是固态状态驱动器,则每个设备都会创建两个 OSD。如果混合了传统的硬盘驱动器和固态驱动器,则数据会放置在传统的硬盘上,block.db
会尽可能在固态硬盘上创建。
batch
子命令不支持为 write-ahead-log(block.wal
)设备创建单独的逻辑卷。
BlusStore 示例
# ceph-volume lvm batch --bluestore /dev/sda /dev/sdb /dev/nvme0n1
在使用 FileStore 时,OSD 优化取决于所使用的设备两种不同的情景。如果所有设备都是传统的硬盘驱动器或是固态硬盘,则为每个设备创建一个 OSD,将日志整合到同一设备上。如果混合了传统的硬盘驱动器和固态驱动器,则数据将放置在传统的硬盘驱动器上,并使用 Ceph 配置文件中指定的大小调整参数在固态驱动器上创建日志,默认日志大小为 5 GB。ceph.conf
FileStore 示例
# ceph-volume lvm batch --filestore /dev/sda /dev/sdb