5.3. 映射 Ceph Storage 节点磁盘布局
部署容器化 Ceph 存储时,您必须映射磁盘布局,并为 Ceph OSD 服务指定专用块设备。您可以在之前创建的环境文件中执行此映射,以定义自定义 Ceph 参数: /home/stack/templates/ceph-config.yaml。
使用 parameter_defaults 中的 CephAnsibleDisksConfig 资源来映射磁盘布局。这个资源使用以下变量:
| 变量 | 必需? | 默认值(如果未设置) | Description |
|---|---|---|---|
| osd_scenario | 是 | lvm
注意:默认值为 |
|
| devices | 是 | NONE.必须设置变量。 | 要用于节点上 OSD 的块设备列表。 |
| dedicated_devices |
是(仅在 | devices |
将 |
| dmcrypt | 否 | false |
设置存储在 OSD 上的数据是加密的( |
| osd_objectstore | 否 | bluestore
注意:默认值为 | 设置 Ceph 使用的存储后端。
注意:虽然默认值为 |
5.3.1. 使用 BlueStore 复制链接链接已复制到粘贴板!
流程
要指定您要用作 Ceph OSD 的块设备,请使用以下代码片段的不同:
parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/sdb - /dev/sdc - /dev/sdd - /dev/nvme0n1 osd_scenario: lvm osd_objectstore: bluestore由于
/dev/nvme0n1位于更高的执行设备类中,所以示例parameter_defaults生成三个在/dev/sdb、/dev/sdc, 和 /dev/sdd 中运行的OSD。三个 OSD 使用/dev/nvme0n1作为block.db和 BlueStore WAL 设备。ceph-volume工具使用batch子命令进行此操作。每个 Ceph Storage 节点都重复相同的配置,并假定统一的硬件。如果block.db和 BlueStore WAL 数据位于与 OSD 相同的磁盘上,则使用以下方法更改参数默认值:parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/sdb - /dev/sdc - /dev/sdd osd_scenario: lvm osd_objectstore: bluestore
5.3.2. 引用具有持久名称的设备 复制链接链接已复制到粘贴板!
流程
在某些节点中,磁盘路径(如
/dev/sdb和/dev/sdc)可能无法在重启后指向同一块设备。如果您的 Ceph Storage 节点出现这种情况,请使用/dev/disk/by-id/符号链接指定每个磁盘,以确保整个部署中一致的块设备映射:parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/disk/by-id/scsi-362cea7f05e14510026ee46fa2111caa9 - /dev/disk/by-id/scsi-362cea7f05e14510026ee47012171567e dedicated_devices: - /dev/nvme0n1 - /dev/nvme0n1可选: 因为您必须在 overcloud 部署前设置 OSD 设备列表,因此可能无法识别和设置磁盘设备的 PCI 路径。在这种情况下,在内省期间为块设备收集
/dev/disk/by-id/符号链接数据。在以下示例中,运行第一个命令,从服务器的
b08-h03-r620-hci文件中的 undercloud Object Storage 服务(swift)下载内省数据,并将数据保存到名为b08-h03-r620-hci.json的文件中。运行第二个命令以 grepby-id。此命令的输出包含可用于识别磁盘的唯一/dev/disk/by-id值。$ openstack baremetal introspection data save b08-h03-r620-hci | jq . > b08-h03-r620-hci.json $ grep by-id b08-h03-r620-hci.json有关存储设备的命名规则的更多信息,请参阅管理存储设备指南中的持久性命名属性概述。
5.3.3. 在高级场景中配置 OSD 复制链接链接已复制到粘贴板!
在环境文件中,您要列出 CephAnsibleDisksConfig 资源的 devices 变量中要用于 OSD 的块设备。
当您在没有任何其他设备配置参数的情况下使用 devices 变量时,ceph-volume lvm batch 会自动将更高的性能设备作为较慢设备的 block.db 来优化 OSD 配置。
您可以使用以下步骤配置 设备 以避免在 ceph-volume lvm batch 模式下运行。
5.3.3.1. 使用 block.db 提高性能 复制链接链接已复制到粘贴板!
使用 block.db 可以通过提高吞吐量并提高响应时间来提高 Ceph 存储集群的性能。block.db 是一个由数据片段和 BlueStore write-ahead 日志(WAL)组成的数据库。
流程
在环境文件中添加以下内容:
parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/sda - /dev/sdb - /dev/nvme0n1 - /dev/sdc - /dev/sdd - /dev/nvme0n2 osd_scenario: lvm osd_objectstore: bluestore这将配置四个 OSD:
sda、sdb、sdc和sdd。每个对都有自己的数据库:nvem0n1和nvme0n2。注意devices列表中设备的顺序非常显著。列出驱动器,后跟 block.db 和 BlueStore WAL (DB-WAL)设备。在示例中,nvme0n1是sda和sdb的 DB-WAL,nvme0n2是sdc和sdd的 DB-WAL。如需更多信息,请参阅使用 BlueStore。-
在部署 overcloud 时,使用
-e选项在部署命令中包括新内容的环境文件。
5.3.3.2. 使用专用的 write-ahead 日志(WAL)设备 复制链接链接已复制到粘贴板!
您可以指定专用的 write-ahead 日志(WAL)设备。使用 devices、dedicated_devices 和 bluestore_wal_devices 意味着您可以将 OSD 的所有组件隔离到单独的设备,从而提高性能。
在以下示例中,另一个额外的字典 bluestore_wal_devices 隔离 NVMe 设备 nvme0n1 和 nvme0n2 中的 write-ahead 日志。
流程
在环境文件中添加以下内容:
parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/sda - /dev/sdb dedicated_devices: - /dev/sdx - /dev/sdy bluestore_wal_devices: - /dev/nvme0n1 - /dev/nvme0n2-
在部署 overcloud 时,使用
-e选项在部署命令中包括新内容的环境文件。
5.3.3.3. 使用预先创建的 LVM 来提高控制 复制链接链接已复制到粘贴板!
在前面的高级场景中,ceph-volume 使用不同类型的设备列表来为 OSD 创建逻辑卷。您还可以在 ceph-volume 运行前创建逻辑卷,然后将 ceph-volume 传递为这些逻辑卷的 lvm_volumes 列表。虽然这需要预先创建逻辑卷,但这意味着您有更精确的控制。由于 director 还负责硬件置备,因此您必须使用第一次引导脚本提前创建这些 LVM。
流程
创建一个环境文件
/home/stack/templates/firstboot.yaml,它将 heat 模板注册为OS::TripleO::NodeUserData资源类型并包含以下内容:resource_registry: OS::TripleO::NodeUserData: /home/stack/templates/ceph-lvm.yaml创建环境文件
/home/stack/templates/ceph-lvm.yaml。添加类似以下示例的列表,其中包括三个物理卷。如果您的设备列表更长,请根据您的要求扩展示例。heat_template_version: 2014-10-16 description: > Extra hostname configuration resources: userdata: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: ceph_lvm_config} ceph_lvm_config: type: OS::Heat::SoftwareConfig properties: config: | #!/bin/bash -x pvcreate /dev/sda vgcreate ceph_vg_hdd /dev/sda pvcreate /dev/sdb vgcreate ceph_vg_ssd /dev/sdb pvcreate /dev/nvme0n1 vgcreate ceph_vg_nvme /dev/nvme0n1 lvcreate -n ceph_lv_wal1 -L 50G ceph_vg_nvme lvcreate -n ceph_lv_db1 -L 500G ceph_vg_ssd lvcreate -n ceph_lv_data1 -L 5T ceph_vg_hdd lvs outputs: OS::stack_id: value: {get_resource: userdata}使用以下方法使用
lvm_volumes参数而不是 devices 列表:这假设已经创建了卷组和逻辑卷。在这种情况下的典型用例是 WAL 和 DB LV 位于 SSD 上,数据 LV 位于 HDD 上:parameter_defaults: CephAnsibleDisksConfig: osd_objectstore: bluestore osd_scenario: lvm lvm_volumes: - data: ceph_lv_data1 data_vg: ceph_vg_hdd db: ceph_lv_db1 db_vg: ceph_vg_ssd wal: ceph_lv_wal1 wal_vg: ceph_vg_nvme在部署 overcloud 时,使用
-e选项在部署命令中包括新内容的环境文件。- 备注
- 只有在该 WAL 设备位于大于 DB 设备的硬件上时,才需要指定单独的 WAL 设备。通常创建单独的 DB 设备就足够了,然后对 WAL 功能使用相同的分区。