Menu Close

Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

第 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 子命令,将 prepareactivate 子命令组合为一个子命令。详情请查看 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 工作流过程:

  1. 为数据和日志接受逻辑卷
  2. 为 OSD 生成 UUID
  3. 要求 Ceph monitor 获取重复使用生成的 UUID 的 OSD 标识符
  4. OSD 数据目录已创建,数据卷被挂载
  5. 日志从数据卷到日志位置进行符号链接
  6. monmap 为激活获取
  7. 设备挂载,数据目录由 填充 ceph-osd
  8. 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 工作流过程:

  1. 需要 OSD ID 和 OSD uuid
  2. 启用与 OSD id 和 OSD uuid匹配的 systemd 单元
  3. systemd 单元将确保所有设备已就绪并挂载
  4. 匹配的 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 子命令调用到单个子命令。单独使用 prepareactivate 的原因是,逐步将新 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