5.8. 在同一主机上部署具有不同硬件的 OSD

您可以使用 Ansible 中的 device_class 功能将混合 OSD(如 HDD 和 SSD)部署到同一主机上。

先决条件

  • 有效的客户订阅。
  • 对 Ansible 管理节点的根级别访问权限。
  • 启用 Red Hat Ceph Storage 工具和 Ansible 存储库。
  • 用于 Ansible 应用的 ansible 用户帐户。
  • 已部署 OSD。

流程

  1. group_vars/mons.yml 文件中创建 crush_rules:

    示例

    crush_rule_config: true
    crush_rule_hdd:
        name: HDD
        root: default
        type: host
        class: hdd
        default: true
    crush_rule_ssd:
        name: SSD
        root: default
        type: host
        class: ssd
        default: true
    crush_rules:
          - "{{ crush_rule_hdd }}"
          - "{{ crush_rule_ssd }}"
    create_crush_tree: true

    注意

    如果您在集群中没有使用 SSD 或 HDD 设备,请不要为该设备定义 crush_rules

  2. 使用在 group_vars/clients.yml 文件中创建的 crush_rules 来创建 pools

    示例

    copy_admin_key: True
    user_config: True
    pool1:
      name: "pool1"
      pg_num: 128
      pgp_num: 128
      rule_name: "HDD"
      type: "replicated"
      device_class: "hdd"
    pools:
      - "{{ pool1 }}"

  3. 将 roots 分配给 OSD 的清单文件示例:

    示例

    [mons]
    mon1
    
    [osds]
    osd1 osd_crush_location="{ 'root': 'default', 'rack': 'rack1', 'host': 'osd1' }"
    osd2 osd_crush_location="{ 'root': 'default', 'rack': 'rack1', 'host': 'osd2' }"
    osd3 osd_crush_location="{ 'root': 'default', 'rack': 'rack2', 'host': 'osd3' }"
    osd4 osd_crush_location="{ 'root': 'default', 'rack': 'rack2', 'host': 'osd4' }"
    osd5 devices="['/dev/sda', '/dev/sdb']" osd_crush_location="{ 'root': 'default', 'rack': 'rack3', 'host': 'osd5' }"
    osd6 devices="['/dev/sda', '/dev/sdb']" osd_crush_location="{ 'root': 'default', 'rack': 'rack3', 'host': 'osd6' }"
    
    [mgrs]
    mgr1
    
    [clients]
    client1

  4. 查看树。

    语法

    [root@mon ~]# ceph osd tree

    示例

    TYPE NAME
    
    root default
         rack rack1
            host osd1
                 osd.0
                 osd.10
            host osd2
                 osd.3
                 osd.7
                 osd.12
         rack rack2
            host osd3
                 osd.1
                 osd.6
                 osd.11
            host osd4
                 osd.4
                 osd.9
                 osd.13
         rack rack3
             host osd5
                 osd.2
                 osd.8
             host osd6
                 osd.14
                 osd.15

  5. 验证池。

    示例

    # for i in $(rados lspools);do echo "pool: $i"; ceph osd pool get $i crush_rule;done
    
    pool: pool1
    crush_rule: HDD

其它资源

  • 如需了解更多详细信息,请参阅 Red Hat Ceph Storage 安装指南中的安装 Red Hat Ceph Storage 集群
  • 如需了解更多详细信息,请参阅 Red Hat Ceph Storage策略指南中的设备类