5.3. 映射 Ceph Storage 节点磁盘布局
部署容器化 Ceph Storage 时,您必须映射磁盘布局,并为 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位于执行的设备类中,所以 exampleparameter_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-path/符号链接为每个磁盘指定,以确保在部署过程中一致的块设备映射:parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:10:0 - /dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:11:0 dedicated_devices: - /dev/nvme0n1 - /dev/nvme0n1可选: 因为您必须在 overcloud 部署前设置 OSD 设备列表,因此可能无法识别和设置磁盘设备的 PCI 路径。在这种情况下,在内省期间为块设备收集
/dev/disk/by-path/symlink数据。在以下示例中,运行第一个命令,从服务器
b08-h03-r620-hci.json 的 undercloud Object Storage 服务(swift)下载内省数据,并将数据保存到名为b08-h03-r620-hci.json的文件中。运行第二个命令来对"by-path"使用 grep。此命令的输出包含可用于识别磁盘的唯一/dev/disk/by-path值。(undercloud) [stack@b08-h02-r620 ironic]$ openstack baremetal introspection data save b08-h03-r620-hci | jq . > b08-h03-r620-hci.json (undercloud) [stack@b08-h02-r620 ironic]$ grep by-path b08-h03-r620-hci.json "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:0:0", "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:1:0", "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:3:0", "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:4:0", "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:5:0", "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:6:0", "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:7:0", "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:0:0",
有关存储设备的命名规则的更多信息,请参阅管理存储设备指南中的持久性命名属性概述。
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 Storage 集群的性能。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。注意设备列表中的设备顺序非常重要。
列出驱动器,后跟 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 devices 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 功能。