第 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,sdbsdc 是旋转的磁盘,sdc 是 SSD。Ceph 会自动检测正确的磁盘类型。然后,您可以配置两个 CRUSH 规则 HDD 和 SSD,以映射到两个对应的设备类。HDD 规则是默认,适用于所有池,除非您使用不同的规则配置池。

最后,您创建一个名为 fastpool 的额外池,并将其映射到 SSD 规则。此池最终通过 Block Storage (cinder)后端公开。任何消耗此块存储后端的工作负载都由 SSD 支持,以获得快速性能。您可以使用它来进行数据或从卷引导。

6.1. 配置性能层

WARNING
在现有环境中定义性能层可能会导致 Ceph 集群中大量数据移动。Ceph-ansible (director 在堆栈更新期间触发)没有逻辑来检查集群中是否已定义池,以及它是否包含数据。这意味着,在现有环境中定义性能层可能会危险,因为更改与池关联的默认 CRUSH 规则会导致数据移动。如果您需要帮助或建议添加或删除节点,请联系红帽支持。

director 不会公开特定的参数来覆盖此功能,但您可以通过完成以下步骤来生成 ceph-ansible 预期的变量。

流程

  1. stack 用户身份登录 undercloud 节点。
  2. 创建一个环境文件,如 /home/stack/templates/ceph-config.yaml,使其包含 Ceph 配置参数和设备类变量。或者,您还可以将以下配置添加到现有环境文件中。
  3. 在环境文件中,使用 CephAnsibleDisksConfig 参数列出您要用作 Ceph OSD 的块设备:

    CephAnsibleDisksConfig:
        devices:
          - /dev/sdb
          - /dev/sdc
          - /dev/sdd
        osd_scenario: lvm
        osd_objectstore: bluestore
  4. 可选: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
  5. 添加 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
  6. 添加 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
  7. 使用以下示例来确保环境文件包含正确的值:

    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
  8. 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>
  • &lt;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
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat, Inc.