2.2. CRUSH 계층 구조


CRUSH 맵은 지시된 그래프이므로 여러 계층(예: 성능 도메인)을 수용할 수 있습니다. CRUSH 계층을 만들고 수정하는 가장 쉬운 방법은 Ceph CLI를 사용하는 것입니다. 그러나 CRUSH 맵을 컴파일하고 다시 컴파일하고 다시 컴파일하고 활성화할 수도 있습니다.

Ceph CLI를 사용하여 버킷 인스턴스를 선언할 때 유형을 지정하고 고유한 문자열 이름을 지정해야 합니다. Ceph는 버킷 ID를 자동으로 할당하고 알고리즘을 straw2 로 설정하고, rjenkins1 을 반영하고 가중치를 설정합니다. 컴파일된 CRUSH 맵을 수정할 때 버킷에 음수 정수(선택 사항), 버킷 알고리즘(일반적으로 straw2)에 상대적인 가중치를 지정하고, 해시 알고리즘 rjenkins1을 반영합니다.

버킷은 하나 이상의 항목을 포함할 수 있습니다. 항목은 노드 버킷(예: 랙, 행, 호스트)으로 구성되거나 (예: OSD 디스크) 남겨 둘 수 있습니다. 항목의 상대적 가중치를 반영하는 가중치를 포함할 수 있습니다.

역컴파일된 CRUSH 맵을 수정할 때 다음 구문을 사용하여 노드 버킷을 선언할 수 있습니다.

Copy to Clipboard Toggle word wrap
[bucket-type] [bucket-name] {
    id [a unique negative numeric ID]
    weight [the relative capacity/capability of the item(s)]
    alg [the bucket type: uniform | list | tree | straw2 ]
    hash [the hash type: 0 by default]
    item [item-name] weight [weight]
}

예를 들어 위의 다이어그램을 사용하여 두 개의 호스트 버킷과 하나의 랙 버킷을 정의합니다. OSD는 호스트 버킷 내의 항목으로 선언됩니다.

Copy to Clipboard Toggle word wrap
host node1 {
    id -1
    alg straw2
    hash 0
    item osd.0 weight 1.00
    item osd.1 weight 1.00
}

host node2 {
    id -2
    alg straw2
    hash 0
    item osd.2 weight 1.00
    item osd.3 weight 1.00
}

rack rack1 {
    id -3
    alg straw2
    hash 0
    item node1 weight 2.00
    item node2 weight 2.00
}
참고

foregoing 예에서 rack 버킷에는 OSD가 포함되어 있지 않습니다. 대신 더 낮은 수준의 호스트 버킷을 포함하며, 항목 항목의 가중치 합계를 포함합니다.

2.2.1. CRUSH 위치

CRUSH 위치는 CRUSH 맵의 계층 구조 측면에서 OSD의 위치입니다. 명령줄 인터페이스에서 CRUSH 위치를 표현하면 CRUSH 위치 지정자는 OSD의 위치를 설명하는 이름/값 쌍 목록의 형식을 취합니다. 예를 들어 OSD가 특정 행, 랙, 섀시스 및 호스트에 있고 기본 CRUSH 트리의 일부인 경우 해당 crush 위치를 다음과 같이 설명할 수 있습니다.

Copy to Clipboard Toggle word wrap
root=default row=a rack=a2 chassis=a2a host=a2a1

참고:

  1. 키 순서는 중요하지 않습니다.
  2. 키 이름( = 0의 왼쪽)은 유효한 CRUSH 유형 이어야 합니다. 기본적으로 여기에는 루트,데이터 센터 ,,,Pod,pdu,,섀시호스트가 포함됩니다. ArgoCD 맵을 편집하여 필요에 따라 유형을 변경할 수 있습니다.
  3. 모든 버킷/키를 지정할 필요는 없습니다. 예를 들어 기본적으로 Ceph는 ceph-osd 데몬의 위치를 root=default host={HOSTNAME} 으로 설정합니다(호스트 이름 -s의 출력에 따라).

2.2.2. Bucket 추가

CRUSH 계층 구조에 버킷 인스턴스를 추가하려면 버킷 이름과 해당 유형을 지정합니다. CRUSH 맵에서 버킷 이름은 고유해야 합니다.

Copy to Clipboard Toggle word wrap
ceph osd crush add-bucket {name} {type}
중요

버킷 이름에 콜론(:)을 사용하는 것은 지원되지 않습니다.

계층 구조에 필요한 각 버킷 유형의 인스턴스를 추가합니다. 다음 예제에서는 SSD 호스트 랙이 있는 행에 버킷을 추가하고 오브젝트 스토리지의 호스트 랙을 추가하는 방법을 보여줍니다.

Copy to Clipboard Toggle word wrap
ceph osd crush add-bucket ssd-row1 row
ceph osd crush add-bucket ssd-row1-rack1 rack
ceph osd crush add-bucket ssd-row1-rack1-host1 host
ceph osd crush add-bucket ssd-row1-rack1-host2 host
ceph osd crush add-bucket hdd-row1 row
ceph osd crush add-bucket hdd-row1-rack2 rack
ceph osd crush add-bucket hdd-row1-rack1-host1 host
ceph osd crush add-bucket hdd-row1-rack1-host2 host
ceph osd crush add-bucket hdd-row1-rack1-host3 host
ceph osd crush add-bucket hdd-row1-rack1-host4 host

이 단계를 완료하면 트리를 확인합니다.

Copy to Clipboard Toggle word wrap
ceph osd tree

계층 구조는 플랫으로 유지됩니다. CRUSH 맵에 추가한 후 버킷을 계층적 위치로 이동해야 합니다.

2.2.3. Bucket 이동

초기 클러스터를 생성할 때 Ceph에는 default 라는 루트 버킷이 있는 기본 CRUSH 맵이 있고 초기 OSD 호스트가 기본 버킷에 표시됩니다. CRUSH 맵에 버킷 인스턴스를 추가하면 CRUSH 계층에 표시되지만 특정 버킷 아래에 표시되지는 않습니다.

CRUSH 계층 구조의 특정 위치로 버킷 인스턴스를 이동하려면 버킷 이름과 해당 유형을 지정합니다. 예를 들어 다음과 같습니다.

Copy to Clipboard Toggle word wrap
ceph osd crush move ssd-row1 root=ssd-root
ceph osd crush move ssd-row1-rack1 row=ssd-row1
ceph osd crush move ssd-row1-rack1-host1 rack=ssd-row1-rack1
ceph osd crush move ssd-row1-rack1-host2 rack=ssd-row1-rack1

이 단계를 완료하면 트리를 볼 수 있습니다.

Copy to Clipboard Toggle word wrap
ceph osd tree
참고

또한 ceph osd crush create-or- 0.0/16을 사용하여 OSD를 이동하는 동안 위치를 생성할 수도 있습니다.

2.2.4. Bucket 제거

CRUSH 계층에서 버킷 인스턴스를 제거하려면 버킷 이름을 지정합니다. 예를 들어 다음과 같습니다.

Copy to Clipboard Toggle word wrap
ceph osd crush remove {bucket-name}

또는 다음을 수행합니다.

Copy to Clipboard Toggle word wrap
ceph osd crush rm {bucket-name}
참고

버킷은 이를 제거하기 위해 비어 있어야 합니다.

상위 수준 버킷(예: 기본)을 제거하는 경우 풀에서 해당 버킷을 선택하는 CRUSH 규칙을 사용하는지 확인합니다. 이 경우 CRUSH 규칙을 수정해야 합니다. 그렇지 않으면 피어링이 실패합니다.

2.2.5. 버킷 알고리즘

Ceph CLI를 사용하여 버킷을 생성할 때 Ceph는 기본적으로 알고리즘을 straw2 로 설정합니다. Ceph는 4개의 버킷 알고리즘을 지원하며, 각각 성능과 재조직 효율성 간의 절충을 나타냅니다. 사용할 버킷 유형이 확실하지 않은 경우 straw2 버킷을 사용하는 것이 좋습니다. 버킷 알고리즘은 다음과 같습니다.

  1. 균일성: 정확히 동일한 가중치를 가진 고유 버킷 집계 장치. 예를 들어, 기업들이 위임하거나 해제하는 경우 일반적으로 동일한 물리적 구성(예: 대량 구매)을 사용하는 많은 시스템에서 이러한 작업을 수행합니다. 스토리지 장치의 가중치가 정확히 동일한 경우, CRUSH가 복제본을 일관된 시간 내에 일관된 버킷에 매핑할 수 있도록 균일한 버킷 유형을 사용할 수 있습니다. 고유하지 않은 가중치를 사용하면 다른 버킷 알고리즘을 사용해야 합니다.
  2. list: 버킷이 콘텐츠를 연결된 목록으로 집계합니다. RUSH (Replication Under Hashing) P 알고리즘을 기반으로 하는 목록은 확장되는 클러스터에 대한 자연적이고 직관적인 선택입니다. 즉, 개체가 적절한 확률을 가진 최신 장치로 재배치되거나 이전 장치에 남아 있습니다. 버킷에 항목이 추가될 때 최적의 데이터 마이그레이션 결과를 얻을 수 있습니다. 그러나 목록의 중간 또는 뒷부분에서 제거된 항목은 상당한 양의 불필요한 이동을 초래할 수 있으며, 목록 버킷은 결코 줄어들지 않는 상황에 가장 적합하게 또는 거의 축소 될 수 있습니다.
  3. 트리: 트리 버킷은 바이너리 검색 트리를 사용합니다. 버킷에 더 큰 항목 세트가 포함된 경우 버킷을 나열하는 것보다 효율적입니다. RUSH(Replication Under Hashing) R 알고리즘을 기반으로 트리 버킷은 배치 시간을 0(log n)으로 줄여 훨씬 더 큰 장치 또는 중첩 버킷을 관리하는 데 적합합니다.
  4. Straw2(기본값): 목록 및 트리 버킷은 목록 시작 부분에 특정 항목 우선 순위를 부여하는 방식으로 분할 및 정량 전략을 사용합니다(예: 목록 시작 부분에 있거나 전체 하위 트리를 전혀 고려해야 할 필요성). 이로 인해 복제본 배치 프로세스의 성능이 향상되지만 항목의 추가, 제거 또는 재weighting으로 인해 버킷의 내용이 변경될 때 하위 결정 재조직 동작을 도입할 수도 있습니다. straw2 버킷 유형을 사용하면 프로세스가 서로 유사한 진행을 통해 복제본 배치를 위해 모든 항목이 서로 상당히 "영향"할 수 있습니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat, Inc.