5.2. 삭제 코드 프로필
Ceph는 프로필을 사용하여 삭제로 인코딩된 풀을 정의합니다. Ceph는 Deletesure-coded 풀 및 관련 CRUSH 규칙을 생성할 때 프로필을 사용합니다.
Ceph는 클러스터를 초기화할 때 기본 삭제 코드 프로필을 생성하고 복제된 풀의 두 복사본과 동일한 수준의 중복성을 제공합니다. 그러나 스토리지 용량이 25% 적게 사용됩니다. 기본 프로필은 k=2 및 m=1 을 정의합니다. 즉, Ceph는 3개의 OSD(k+m=3)에 오브젝트 데이터를 분산하고 Ceph는 데이터 손실 없이 이러한 OSD 중 하나를 잃을 수 있습니다.
기본 삭제 코드 프로필은 단일 OSD의 손실을 유지할 수 있습니다. 크기가 2인 복제된 풀과 동일하지만 1TB 데이터를 저장하기 위해 2TB가 아닌 1.5TB가 필요합니다. 기본 프로필을 표시하려면 다음 명령을 사용합니다.
$ ceph osd erasure-code-profile get default directory=.libs k=2 m=1 plugin=jerasure crush-failure-domain=host technique=reed_sol_van
새 프로필을 생성하여 원시 스토리지 요구 사항을 늘리지 않고도 중복성을 개선할 수 있습니다. 예를 들어 k=8 및 m=4 를 사용하는 프로필은 12개(k+m=12) OSD에서 오브젝트를 분산하여 4개(m4 ) OSD의 손실을 유지할 수 있습니다. Ceph는 오브젝트를 8 개의 청크로 나누고 복구를 위해 4 개의 코딩 청크를 계산합니다. 예를 들어 오브젝트 크기가 8MB인 경우 각 데이터 청크는 1MB이며 각 코딩 청크는 데이터 청크와 크기가 동일하며 1MB입니다. 4개의 OSD가 동시에 실패해도 오브젝트가 손실되지 않습니다.
프로파일의 가장 중요한 매개변수는 k,m 및 crush-failure-domain 인데, 이는 스토리지 오버헤드와 데이터 지속성을 정의했기 때문입니다.
풀을 생성한 후에는 프로필을 변경할 수 없으므로 올바른 프로필을 선택하는 것이 중요합니다. 프로필을 수정하려면 다른 프로필을 사용하여 새 풀을 생성하고 이전 풀에서 새 풀로 오브젝트를 마이그레이션해야 합니다.
예를 들어 원하는 아키텍처가 두 랙의 손실을 50% 오버헤드로 유지해야 하는 경우 다음 프로필을 정의할 수 있습니다.
$ ceph osd erasure-code-profile set myprofile \ k=4 \ m=2 \ crush-failure-domain=rack $ ceph osd pool create ecpool 12 12 erasure *myprofile* $ echo ABCDEFGHIJKL | rados --pool ecpool put NYAN - $ rados --pool ecpool get NYAN - ABCDEFGHIJKL
기본 OSD는 NYAN 오브젝트를 4개(k=4) 데이터 청크로 나누고 두 개의 추가 청크(m=2)를 생성합니다. m 값은 데이터를 손실하지 않고 동시에 손실될 수 있는 OSD 수를 정의합니다. crush-failure-domain=rack 은 두 청크가 동일한 랙에 저장되지 않도록 하는 CRUSH 규칙을 만듭니다.

Red Hat은 k 및 m 에 대해 다음과 같은 삭제 코딩 값을 지원합니다.
- k=8 m=3
- k=8 m=4
- k=4 m=2
OSD가 손실된 OSD 수가 코딩 청크 수(m
)와 같은 경우, 삭제 코딩 풀의 일부 배치 그룹은 불완전한 상태가 됩니다. 손실된 OSD 수가 m
보다 작으면 배치 그룹이 불완전한 상태가 아닙니다. 두 경우 모두 데이터 손실이 발생하지 않습니다. 배치 그룹이 불완전한 상태인 경우 삭제 코딩된 풀의 min_size
를 일시적으로 축소하면 복구할 수 있습니다.
5.2.1. OSD 삭제-code-profile
세트
새 삭제 코드 프로필을 생성하려면 다음을 수행합니다.
ceph osd erasure-code-profile set <name> \ [<directory=directory>] \ [<plugin=plugin>] \ [<stripe_unit=stripe_unit>] \ [<crush-device-class>]\ [<crush-failure-domain>]\ [<key=value> ...] \ [--force]
다음과 같습니다.
- 디렉터리
- 설명
- agesure 코드 플러그인이 로드되는 디렉터리 이름을 설정합니다.
- 유형
- 문자열
- 필수 항목
- 아니요.
- 기본값
-
/usr/lib/ceph/erasure-code
- plugin
- 설명
- 삭제 코드 플러그인을 사용하여 코딩 청크를 계산하고 누락된 청크를 복구합니다. 자세한 내용은 Erasure Code 플러그인 섹션을 참조하십시오.
- 유형
- 문자열
- 필수 항목
- 아니요.
- 기본값
-
jerasure
- stripe_unit
- 설명
-
스트라이프당 데이터 청크의 데이터 양입니다. 예를 들어 2 데이터 청크와
스트라이프_unit=4K
가 있는 프로필은 청크 0-4K의 청크 0-4K 범위를 청크 1에, 청크 1의 8K-12K를 다시 청크 0으로 배치합니다. 최상의 성능을 위해서는 4K가 여러 개여야 합니다. 풀이 생성될 때 기본값은 모니터 구성 옵션osd_pool_erasure_code_stripe_unit
에서 가져옵니다. 이 프로필을 사용하는 풀의 스트라이프_width는 이스트라이프_unit
을 곱한 데이터 청크 수입니다. - 유형
- 문자열
- 필수 항목
- 아니요.
- 기본값
-
4K
- crush-device-class
- 설명
-
hdd
또는ssd
와 같은 장치 클래스입니다. RHCS 3 이상에서만 사용할 수 있습니다. - 유형
- 문자열
- 필수 항목
- 없음
- 기본값
-
none
, 즉 CRUSH는 클래스와 관계없이 모든 장치를 사용합니다.
- crush-failure-domain
- 설명
-
호스트
또는랙
과 같은 실패 도메인. - 유형
- 문자열
- 필수 항목
- 없음
- 기본값
-
host
- key
- 설명
- 나머지 키-값 쌍의 의미는 erasure 코드 플러그인에 의해 정의됩니다.
- 유형
- 문자열
- 필수 항목
- 아니요.
- --force
- 설명
- 동일한 이름으로 기존 프로필을 재정의합니다.
- 유형
- 문자열
- 필수 항목
- 아니요.
5.2.2. OSD 삭제-code-profile
Remove
제거 코드 프로파일을 제거하려면 다음을 수행합니다.
ceph osd erasure-code-profile rm <name>
풀에서 프로필을 참조하는 경우 삭제가 실패합니다.
5.2.3. OSD erasure-code-profile
Get
삭제 코드 프로필을 표시하려면 다음을 수행합니다.
ceph osd erasure-code-profile get <name>
5.2.4. OSD 삭제-code-profile
목록
모든 삭제 코드 프로필의 이름을 나열하려면 다음을 수행합니다.
ceph osd erasure-code-profile ls