Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

6.4. CRUSH 계층 구조 정의

director는 CRUSH 계층 구조에 대한 데이터를 제공하지만 ceph-ansible은 Ansible 인벤토리 파일을 통해 CRUSH 매핑을 통해 해당 데이터를 전달합니다. 기본 루트를 유지하지 않는 경우 각 노드에 대한 루트 위치를 지정해야 합니다.

예를 들어 lab-ceph01(프로비저닝 IP 172.16.0.26) 노드가 fast_root 내의 rack1 에 배치된 경우 Ansible 인벤토리는 다음과 같아야 합니다.

172.16.0.26:
osd_crush_location: {host: lab-ceph01, rack: rack1, root: fast_root}

director를 사용하여 Ceph를 배포할 때 실제로 Ansible 인벤토리를 작성하지 않습니다. 이 인벤토리는 사용자를 위해 생성됩니다. 따라서 NodeDataLookup 을 사용하여 데이터를 추가해야 합니다.

NodeDataLookup은 시스템의 마더보드에 저장된 시스템 제품 UUID를 지정하여 작동합니다. Bare Metal 서비스(ironic)는 인트로스펙션 단계 후에도 이 정보를 저장합니다.

보조 계층 스토리지를 지원하는 CRUSH 맵을 만들려면 다음 단계를 완료합니다.

절차

  1. 다음 명령을 실행하여 4개의 노드의 UUID를 검색합니다.

    for ((x=1; x<=4; x++)); \
    { echo "Node overcloud-ceph0${x}"; \
    openstack baremetal introspection data save overcloud-ceph0${x} | jq .extra.system.product.uuid; }
    Node overcloud-ceph01
    "32C2BC31-F6BB-49AA-971A-377EFDFDB111"
    Node overcloud-ceph02
    "76B4C69C-6915-4D30-AFFD-D16DB74F64ED"
    Node overcloud-ceph03
    "FECF7B20-5984-469F-872C-732E3FEF99BF"
    Node overcloud-ceph04
    "5FFEFA5F-69E4-4A88-B9EA-62811C61C8B3"
    참고

    이 예제에서 overcloud-ceph0[1-4]는 Ironic 노드 이름입니다. 이 노드 이름은 lab-ceph0[1-4] 으로 배포됩니다( HostnameMap.yaml을 통해).

  2. 다음과 같이 노드 배치를 지정합니다.

    루트Rack노드

    standard_root

    rack1_std

    overcloud-ceph01(lab-ceph01)

    rack2_std

    overcloud-ceph02(lab-ceph02)

    fast_root

    rack1_fast

    overcloud-ceph03 (lab-ceph03)

    rack2_fast

    overcloud-ceph04(lab-ceph04)

    참고

    동일한 이름을 가진 두 개의 버킷을 가질 수 없습니다. lab-ceph01lab-ceph03 이 동일한 물리적 랙에 있더라도 rack1 이라는 두 개의 버킷을 가질 수 없습니다. 따라서 rack1_stdrack1_fast 의 이름을 지정합니다.

    참고

    이 예제에서는 여러 사용자 지정 루트를 설명하기 위해 "standard_root"라는 특정 경로를 생성하는 방법을 보여줍니다. 그러나 HDD의 OSD 노드를 기본 루트에 보관할 수 있습니다.

  3. 다음 NodeDataLookup 구문을 사용합니다.

    NodeDataLookup: {"SYSTEM_UUID": {"osd_crush_location": {"root": "$MY_ROOT", "rack": "$MY_RACK", "host": "$OVERCLOUD_NODE_HOSTNAME"}}}
    참고

    시스템 UUID를 지정한 다음 CRUSH 계층 구조를 위에서 아래로 지정해야 합니다. 또한 host 매개변수는 Bare Metal 서비스(ironic) 노드 이름이 아닌 노드의 오버클라우드 호스트 이름을 가리켜야 합니다. 예제 구성과 일치하려면 다음을 입력합니다.

    parameter_defaults:
      NodeDataLookup: {"32C2BC31-F6BB-49AA-971A-377EFDFDB111": {"osd_crush_location": {"root": "standard_root", "rack": "rack1_std", "host": "lab-ceph01"}},
         "76B4C69C-6915-4D30-AFFD-D16DB74F64ED": {"osd_crush_location": {"root": "standard_root", "rack": "rack2_std", "host": "lab-ceph02"}},
         "FECF7B20-5984-469F-872C-732E3FEF99BF": {"osd_crush_location": {"root": "fast_root", "rack": "rack1_fast", "host": "lab-ceph03"}},
         "5FFEFA5F-69E4-4A88-B9EA-62811C61C8B3": {"osd_crush_location": {"root": "fast_root", "rack": "rack2_fast", "host": "lab-ceph04"}}}
  4. ceph-ansible 수준에서 CRUSH 맵 관리를 활성화합니다.

    parameter_defaults:
      CephAnsibleExtraConfig:
        create_crush_tree: true
  5. 스케줄러 힌트를 사용하여 베어 메탈 서비스 노드 UUID가 호스트 이름에 올바르게 매핑되도록 합니다.

    parameter_defaults:
      CephStorageCount: 4
      OvercloudCephStorageFlavor: ceph-storage
      CephStorageSchedulerHints:
        'capabilities:node': 'ceph-%index%'
  6. 해당 힌트로 베어 메탈 서비스 노드를 태그합니다.

    openstack baremetal node set --property capabilities='profile:ceph-storage,node:ceph-0,boot_option:local' overcloud-ceph01
    
    openstack baremetal node set --property capabilities=profile:ceph-storage,'node:ceph-1,boot_option:local' overcloud-ceph02
    
    openstack baremetal node set --property capabilities='profile:ceph-storage,node:ceph-2,boot_option:local' overcloud-ceph03
    
    openstack baremetal node set --property capabilities='profile:ceph-storage,node:ceph-3,boot_option:local' overcloud-ceph04
    참고

    예측 배치에 대한 자세한 내용은 Advanced Overcloud Customization 가이드의 특정 노드 ID 할당 을 참조하십시오.