2장. CRUSH 관리


CRUSH(Controlled Replication Under scalable Hashing) 알고리즘은 컴퓨팅 데이터 스토리지 위치로 데이터를 저장하고 검색하는 방법을 결정합니다.

 

충분히 발전된 기술은 매직과 다를 수 있습니다.

 
 -- Arthur C. Clarke

2.1. CRUSH 소개

스토리지 클러스터의 CRUSH 맵은 CRUSH 계층 구조 내의 장치 위치와 Ceph가 데이터를 저장하는 방식을 결정하는 각 계층 구조에 대한 규칙을 설명합니다.

CRUSH 맵에는 하나 이상의 노드 계층 구조가 포함되어 있습니다. Ceph의 "buckets"라고 하는 계층 구조의 노드는 해당 유형에 의해 정의된 스토리지 위치 집계입니다. 예를 들어 행, 랙, 섀시, 호스트, 장치 등이 있습니다. 계층 구조의 각 리프는 기본적으로 스토리지 장치 목록에 있는 스토리지 장치 중 하나로 구성됩니다. 리프는 항상 하나의 노드 또는 "bucket"에 포함됩니다. CRUSH 맵에는 CRUSH가 데이터를 저장하고 검색하는 방법을 결정하는 규칙 목록도 있습니다.

참고

클러스터에 OSD를 추가할 때 스토리지 장치가 CRUSH 맵에 추가됩니다.

CRUSH 알고리즘은 장치별 가중치 값에 따라 스토리지 장치에 데이터 오브젝트를 분배하고 균일한 확률 배포를 오케스트레이션합니다. CRUSH는 관리자가 정의하는 계층적 클러스터 매핑에 따라 개체 및 복제 및 해당 복제본 또는 삭제 코드 청크를 배포합니다. CRUSH 맵은 규칙에 맞게 이를 포함하는 사용 가능한 스토리지 장치와 논리 버킷을 나타내며 규칙을 사용하는 각 풀을 확장합니다.

장애 도메인 또는 성능 도메인에서 배치 그룹을 OSD에 매핑하기 위해 CRUSH 맵은 생성된 CRUSH 맵의 유형 아래에 있는 계층적 버킷 유형 목록을 정의합니다. 버킷 계층 구조를 생성하는 목적은 실패 도메인 또는 성능 도메인 또는 둘 다로 리프 노드를 분리하는 것입니다. 장애 도메인에는 호스트, 섀시, 랙, 전원 분배 장치, Pod, 행, 방 및 데이터 센터가 포함됩니다. 성능 도메인에는 특정 구성의 장애 도메인 및 OSD가 포함됩니다. 예를 들어, SSD는 SSD 저널, SATA 드라이브 등을 통해 구동됩니다. 장치에는 hdd,ssdnvme 와 같은 클래스 가 있으므로 장치 클래스를 사용하여 CRUSH 계층 구조를 보다 신속하게 구축할 수 있습니다.

OSD를 나타내는 리프 노드를 제외하고 나머지 계층 구조는 임의의 것이며 기본 유형이 요구 사항에 맞지 않는 경우 고유한 요구에 따라 정의할 수 있습니다. CRUSH 맵 버킷 유형을 조직의 하드웨어 이름 지정 규칙에 맞게 조정하고 물리적 하드웨어 이름을 반영하는 인스턴스 이름을 사용하는 것이 좋습니다. 이름 지정 방법을 사용하면 OSD 또는 기타 하드웨어가 작동하지 않고 관리자가 호스트 또는 기타 하드웨어에 대한 원격 또는 물리적 액세스가 필요할 때 클러스터를 쉽게 관리하고 문제를 해결할 수 있습니다.

다음 예에서 버킷 계층에는 4개의 리프 버킷(osd 1-4), 두 노드 버킷(호스트 1-2) 및 1개의 랙 노드(rack 1)가 있습니다.

CRUSH 계층 구조

leaf 노드는 CRUSH 맵의 시작 부분에 있는 장치 목록에 선언된 스토리지 장치를 반영하므로 이를 버킷 인스턴스로 선언할 필요가 없습니다. 계층 구조에서 두 번째로 낮은 버킷 유형은 일반적으로 장치를 집계합니다. 즉, 일반적으로 스토리지 미디어를 포함하는 컴퓨터이며 관리자가 선호하는 용어를 사용하여 "node", "server,", "host", "machine" 등과 같이 설명합니다. 밀도가 높은 환경에서는 카드 및 섀시당 여러 호스트/노드를 확인하는 것이 점점 더 일반적입니다. 예를 들어, 노드가 실패하면 여러 호스트/노드와 해당 OSD를 차단할 수 있는 경우 카드 또는 섀시를 가져와야 하는 경우 카드 및 섀시도 실패했는지 확인합니다.

버킷 인스턴스를 선언할 때 해당 유형을 문자열로 지정하고, 고유한 이름을 문자열로 지정하고, 음수 정수로 표시되는 선택적 고유 ID를 할당하고, 항목의 총 용량 또는 기능을 기준으로 가중치를 지정하고, straw2 와 같은 버킷 알고리즘을 지정합니다. 버킷은 하나 이상의 항목을 포함할 수 있습니다. 항목은 노드 버킷 또는 나사로 구성될 수 있습니다. 항목의 상대적 가중치를 반영하는 가중치를 포함할 수 있습니다.

2.1.1. 동적 데이터 배치

Ceph 클라이언트 및 Ceph OSD는 모두 CRUSH 맵과 CRUSH 알고리즘을 사용합니다.

  • Ceph 클라이언트: CRUSH를 Ceph 클라이언트에 매핑하여 Ceph 클라이언트가 OSD와 직접 통신할 수 있도록 지원합니다. 즉, Ceph 클라이언트는 단일 장애 지점, 성능 병목, 중앙 집중식 조회 서버에 대한 연결 제한, 스토리지 클러스터 확장성에 대한 물리적 제한을 수행할 수 있는 중앙 집중식 오브젝트 조회 테이블을 사용하지 않습니다.
  • Ceph OSD: CRUSH를 Ceph OSD에 배포하면 Ceph OSD를 통해 OSD에서 복제, 백필링 및 복구를 처리할 수 있습니다. 즉, Ceph OSD는 Ceph 클라이언트를 대신하여 개체 복제본(또는 청크 코딩)의 스토리지를 처리합니다. 또한 Ceph OSD는 클러스터의 재조정(백업)을 재조정하고 오류를 동적으로 복구하기 위해 클러스터에 대해 충분히 알고 있음을 의미합니다.

2.1.2. 실패 도메인 설정

여러 개체 복제본이 있거나 코딩 청크를 사용하면 데이터 손실을 방지할 수 있지만 고가용성 문제를 해결하기에 충분하지 않습니다. CRUSH는 Ceph Storage Cluster의 기본 물리적 조직을 반영하여 장치 장애와 관련된 주소상 가능한 소스를 모델링할 수 있습니다. CRUSH 배치 정책은 클러스터의 토폴로지를 클러스터 맵으로 인코딩하여 서로 다른 실패 도메인에서 개체 복제본을 분리하거나 축소하는 코딩 청크를 유지하면서 원하는 의사-랜덤 배포를 계속 유지할 수 있습니다. 예를 들어 동시 오류가 발생할 가능성을 해결하려면 데이터 복제본 또는 삭제 코딩 청크가 다른 보류, 랙, 전원 공급 장치, 컨트롤러 또는 물리적 위치를 사용하는 장치에 있는지 확인하는 것이 좋습니다. 이렇게 하면 데이터 손실을 방지하고 클러스터 성능이 저하된 상태에서 작동할 수 있습니다.

2.1.3. 성능 도메인 설정

Ceph는 여러 계층을 지원하여 한 유형의 하드웨어 성능 프로필과 다른 유형의 하드웨어 성능 프로필을 분리할 수 있습니다. 예를 들어 CRUSH는 하드 디스크 드라이브 및 SSD에 대한 다른 계층 구조를 생성할 수 있습니다. 기본 하드웨어의 성능 프로파일을 고려한 성능 도메인 - 다양한 성능 특성을 지원할 필요성으로 인해 널리 사용되고 있습니다. 이러한 맵은 두 개 이상의 루트 유형 버킷이 있는 CRUSH 맵일 뿐입니다. 사용 사례 예제는 다음과 같습니다.

  • 오브젝트 스토리지 : S3 및 Swift 인터페이스의 오브젝트 스토리지 백엔드로 사용되는 Ceph 호스트는 SATA 드라이브와 같은 비용이 적게 드는 스토리지 미디어(오브젝트 스토리지)에 적합하지 않을 수 있습니다. 또한 개체 스토리지의 hugeabyte당 비용으로 더 많은 경제적 스토리지 호스트를 분리하면서 클라우드 플랫폼에서 볼륨 및 이미지를 저장하기 위한 더 많은 경제적 스토리지 호스트를 분리할 수 있습니다. HTTP는 오브젝트 스토리지 시스템의 병목 현상이되는 경향이 있습니다.
  • 콜드 스토리지: 자주 액세스하는 콜드 스토리지 데이터 또는 완화 성능 요구 사항을 사용하여 데이터 검색용으로 설계되었습니다. 이 시스템은 비용이 적게 드는 스토리지 미디어 및 지리저 코딩을 활용합니다. 그러나 삭제 코딩에는 약간의 추가 RAM 및 CPU가 필요할 수 있으므로, 개체 스토리지 또는 VM에 사용되는 호스트와 RAM 및 CPU 요구 사항이 다를 수 있습니다.
  • SSD 지원 풀: SSD는 비용이 많이 들지만 하드 디스크 드라이브에 비해 상당한 이점을 제공합니다. SSD에는 검색 시간이 없으며 전체 처리량이 높습니다. 저널링에 SSD를 사용하는 것 외에도 클러스터에서 SSD 지원 풀을 지원할 수 있습니다. 일반적인 사용 사례에는 고성능 SSD 풀이 있습니다. 예를 들어 SATA 드라이브 대신 Ceph Object Gateway의 .rgw.buckets.index 풀을 SSD에 매핑할 수 있습니다.

CRUSH 맵은 장치 클래스의 개념을 지원합니다. Ceph는 스토리지 장치의 측면을 검색하고 hdd,ssd 또는 nvme 와 같은 클래스를 자동으로 할당할 수 있습니다. 그러나 CRUSH는 이러한 기본값으로 제한되지 않습니다. 예를 들어, nmap 계층 구조를 사용하여 다양한 유형의 워크로드를 구분할 수도 있습니다. 예를 들어, SSD는 저널 또는 write-ahead 로그, 버킷 인덱스 또는 원시 오브젝트 스토리지에 사용할 수 있습니다. CRUSH는 ssd-bucket-index 또는 ssd-object-storage 와 같은 다양한 장치 클래스를 지원할 수 있으므로 Ceph는 다른 워크로드에 동일한 스토리지 미디어를 사용하지 않으므로 보다 예측 가능하고 일관성을 조정할 수 있습니다.

Ceph는 백그라운드에서 각 장치 클래스마다 호스 루트를 생성합니다. 이러한 루트는 OSD에서 장치 클래스를 설정하거나 변경하여 수정해야 합니다. 다음 명령을 사용하여 생성된 루트를 볼 수 있습니다.

예제

[ceph: root@host01 /]# ceph osd crush tree --show-shadow
ID   CLASS  WEIGHT    TYPE NAME
-24    ssd   4.54849  root default~ssd
-19    ssd   0.90970      host ceph01~ssd
  8    ssd   0.90970          osd.8
-20    ssd   0.90970      host ceph02~ssd
  7    ssd   0.90970          osd.7
-21    ssd   0.90970      host ceph03~ssd
  3    ssd   0.90970          osd.3
-22    ssd   0.90970      host ceph04~ssd
  5    ssd   0.90970          osd.5
-23    ssd   0.90970      host ceph05~ssd
  6    ssd   0.90970          osd.6
 -2    hdd  50.94173  root default~hdd
 -4    hdd   7.27739      host ceph01~hdd
 10    hdd   7.27739          osd.10
-12    hdd  14.55478      host ceph02~hdd
  0    hdd   7.27739          osd.0
 12    hdd   7.27739          osd.12
 -6    hdd  14.55478      host ceph03~hdd
  4    hdd   7.27739          osd.4
 11    hdd   7.27739          osd.11
-10    hdd   7.27739      host ceph04~hdd
  1    hdd   7.27739          osd.1
 -8    hdd   7.27739      host ceph05~hdd
  2    hdd   7.27739          osd.2
 -1         55.49022  root default
 -3          8.18709      host ceph01
 10    hdd   7.27739          osd.10
  8    ssd   0.90970          osd.8
-11         15.46448      host ceph02
  0    hdd   7.27739          osd.0
 12    hdd   7.27739          osd.12
  7    ssd   0.90970          osd.7
 -5         15.46448      host ceph03
  4    hdd   7.27739          osd.4
 11    hdd   7.27739          osd.11
  3    ssd   0.90970          osd.3
 -9          8.18709      host ceph04
  1    hdd   7.27739          osd.1
  5    ssd   0.90970          osd.5
 -7          8.18709      host ceph05
  2    hdd   7.27739          osd.2
  6    ssd   0.90970          osd.6

2.1.4. 다른 장치 클래스 사용

성능 도메인을 생성하려면 장치 클래스와 단일 CRUSH 계층 구조를 사용합니다. 이 특정 작업에서 CloudEvent 맵을 수동으로 편집할 필요가 없습니다. CRUSH 계층에 OSD를 추가한 후 다음을 수행합니다.

  1. 각 장치에 클래스를 추가합니다.

    구문

    ceph osd crush set-device-class CLASS OSD_ID [OSD_ID]

    예제

    [ceph root@host01 /]# ceph osd crush set-device-class hdd osd.0 osd.1 osd.4 osd.5
    [ceph root@host01 /]# ceph osd crush set-device-class ssd osd.2 osd.3 osd.6 osd.7

  2. 장치를 사용할 규칙을 생성합니다.

    구문

    ceph osd crush rule create-replicated RULE_NAME ROOT FAILURE_DOMAIN_TYPE CLASS

    예제

    [ceph root@host01 /]# ceph osd crush rule create-replicated cold default host hdd
    [ceph root@host01 /]# ceph osd crush rule create-replicated hot default host ssd

  3. 규칙을 사용하도록 풀을 설정합니다.

    구문

    ceph osd pool set POOL_NAME crush_rule RULE_NAME

    예제

    [ceph root@host01 /]# ceph osd pool set cold_tier crush_rule cold
    [ceph root@host01 /]# ceph osd pool set hot_tier crush_rule hot

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.