第 6 章 使用 director 在 Ceph Storage 集群中为不同工作负载定义性能层
您可以使用 Red Hat OpenStack Platform (RHOSP) director 部署不同的 Red Hat Ceph Storage 性能层。您可以组合 Ceph CRUSH 规则和 CephPools director 参数,以使用设备类功能并构建不同的层来满足具有不同性能要求的工作负载。例如,您可以为普通工作负载定义 HDD 类,以及一个仅将数据分布到 SSD 的 SSD 类,以实现高性能负载。在这种情况下,当您创建新的块存储卷时,您可以选择性能层,可以是 HDD 或 SSD。
- WARNING
-
在现有环境中定义性能层可能会导致 Ceph 集群中的大量数据移动。
ceph-ansible,director 在堆栈更新过程中触发,没有逻辑来检查集群中是否已定义池,以及它是否包含数据。这意味着,在现有环境中定义性能层可能具有危险,因为与池关联的默认 CRUSH 规则更改会导致数据移动。如果您需要添加或删除节点的帮助或建议,请联系红帽支持。
Ceph 会自动检测磁盘类型,并根据 Linux 内核公开的硬件属性将其分配给对应的设备类,可以是 HDD、SSD 或 NVMe。但是,您也可以根据您的需要自定义类别。
前提条件
- 对于新部署,Red Hat Ceph Storage (RHCS)版本 4.1 或更高版本。
- 对于现有部署,Red Hat Ceph Storage (RHCS)版本 4.2 或更高版本。
若要部署不同的 Red Hat Ceph Storage 性能层,可创建一个包含 CRUSH map 详细信息的新环境文件,然后将它包含在部署命令中。
在以下步骤中,每个 Ceph Storage 节点包含三个 OSD,sdb 和 sdc 是旋转磁盘,sdd 是 SSD。Ceph 会自动检测正确的磁盘类型。然后,配置两个 CRUSH 规则 HDD 和 SSD,以映射到两个对应的设备类。HDD 规则是默认设置,适用于所有池,除非您使用不同的规则配置池。
最后,您要创建一个名为 fastpool 的额外池,并将其映射到 SSD 规则。这个池最终通过 Block Storage (cinder)后端公开。任何消耗此块存储后端的工作负载都只支持 SSD 来快速性能。您可以将其用于数据或从卷引导。
6.1. 配置性能层 复制链接链接已复制到粘贴板!
- WARNING
-
在现有环境中定义性能层可能会导致 Ceph 集群中的大量数据移动。
ceph-ansible,director 在堆栈更新过程中触发,没有逻辑来检查集群中是否已定义池,以及它是否包含数据。这意味着,在现有环境中定义性能层可能具有危险,因为与池关联的默认 CRUSH 规则更改会导致数据移动。如果您需要添加或删除节点的帮助或建议,请联系红帽支持。
director 不会公开特定参数来满足此功能,但您可以通过完成以下步骤来生成 ceph-ansible 预期变量。
流程
-
以
stack用户身份登录 undercloud 节点。 -
创建一个环境文件,如
/home/stack/templates/ceph-config.yaml,使其包含 Ceph 配置参数和设备类变量。或者,您可以将以下配置添加到现有环境文件中。 在环境文件中,使用
CephAnsibleDisksConfig参数列出您要用作 Ceph OSD 的块设备:CephAnsibleDisksConfig: devices: - /dev/sdb - /dev/sdc - /dev/sdd osd_scenario: lvm osd_objectstore: bluestore可选:Ceph 会自动检测磁盘类型并将其分配到对应的设备类。但是,您还可以使用
crush_device_class属性来强制特定设备属于特定的类或创建自己的自定义类。以下示例包含具有指定类的相同 OSD 列表:CephAnsibleDisksConfig: lvm_volumes: - data: ‘/dev/sdb’ crush_device_class: ‘hdd’ - data: ‘/dev/sdc’ crush_device_class: ‘hdd’ - data: ‘/dev/sdd’ crush_device_class: ‘ssd’ osd_scenario: lvm osd_objectstore: bluestore添加
CephAnsibleExtraVars参数。crush_rules参数必须包含您定义或 Ceph 自动检测到的每个类的规则。在创建新池时,如果没有指定规则,则会选择您希望 Ceph 用作默认规则。CephAnsibleExtraConfig: crush_rule_config: true create_crush_tree: true crush_rules: - name: HDD root: default type: host class: hdd default: true - name: SSD root: default type: host class: ssd default: false添加
CephPools参数:-
使用
rule_name参数指定不使用默认规则的每个池的层。在以下示例中,fastpool池使用配置为快速层的 SSD 设备类来管理块存储卷。 将
<appropriate_PG_num> 替换为适当的放置组数量(PG)。或者,使用放置组 auto-scaler 计算 Ceph 池的 PG 数量。有关更多信息,请参阅将自定义属性分配给不同的 Ceph 池。
使用
CinderRbdExtraPools参数将fastpool配置为块存储后端。CephPools: - name: fastpool pg_num: <appropraiate_PG_num> rule_name: SSD application: rbd CinderRbdExtraPools: fastpool
-
使用
使用以下示例来确保环境文件包含正确的值:
parameter_defaults: CephAnsibleDisksConfig: devices: - '/dev/sdb' - '/dev/sdc' - '/dev/sdd' osd_scenario: lvm osd_objectstore: bluestore CephAnsibleExtraConfig: crush_rule_config: true create_crush_tree: true crush_rules: - name: HDD root: default type: host class: hdd default: true - name: SSD root: default type: host class: ssd default: false CinderRbdExtraPools: fastpool CephPools: - name: fastpool pg_num: <appropriate_PG_num> rule_name: SSD application: rbd在
openstack overcloud deploy命令中包含新环境文件。$ openstack overcloud deploy \ --templates \ … -e <other_overcloud_environment_files> \ -e /home/stack/templates/ceph-config.yaml \ …将
<other_overcloud_environment_files> 替换为作为部署一部分的其他环境文件的列表。
如果将环境文件应用到现有的 Ceph 集群,则预先存在的 Ceph 池不会使用新规则更新。因此,您必须在部署完成后输入以下命令,才能将规则设置为指定的池。
$ ceph osd pool set <pool> crush_rule <rule>
- 将 <pool> 替换为您要将新规则应用到的池的名称。
-
将 <rule> 替换为您通过
crush_rules参数指定的规则名称之一。 -
将 <appropriate_PG_num> 替换为适当的放置组数量或
target_size_ratio,并将pg_autoscale_mode设置为true。
对于您使用这个命令更改的每个规则,更新现有条目或在现有模板的 CephPools 参数中添加新条目:
CephPools:
- name: <pool>
pg_num: <appropriate_PG_num>
rule_name: <rule>
application: rbd