5장. 코드 풀 삭제 개요
Ceph는 기본적으로 복제된 풀을 사용하므로 Ceph는 기본 OSD 노드에서 하나 이상의 보조 OSD로 모든 오브젝트를 복사합니다. 삭제 코딩 풀은 데이터 지속성을 보장하는 데 필요한 디스크 공간을 줄일 수 있지만 복제보다 비용이 약간 더 많이 듭니다.
Ceph 스토리지 전략에는 데이터 지속성 요구 사항을 정의하는 작업이 포함됩니다. 데이터 지속성은 데이터 손실 없이 하나 이상의 OSD의 손실을 유지할 수 있는 기능을 의미합니다.
Ceph는 데이터를 풀에 저장하고 다음 두 가지 유형의 풀이 있습니다.
- 복제됨
- erasure-coded
삭제 코딩은 Ceph 스토리지 클러스터에 오브젝트를 저장하는 방법으로, 삭제 코드 알고리즘이 오브젝트를k
(데이터 청크) 및 코딩 청크(m
)로 분할하고 이러한 청크를 다른 OSD에 저장하는 방법입니다.
OSD가 실패하는 경우 Ceph는 다른 OSD에서 나머지 데이터(k
) 및 코딩(m
) 청크를 검색하고 삭제 코드 알고리즘은 해당 청크에서 오브젝트를 복원합니다.
Red Hat은 쓰기 및 데이터 손실을 방지하기 위해 삭제 코드 풀의 min_size
를 K+1
이상을 권장합니다.
삭제 코딩은 복제보다 스토리지 용량을 더 효율적으로 사용합니다. n-replication 접근 방식은 오브젝트의 n
복사본(기본적으로 Ceph에서 3x)을 유지 관리하지만 삭제 코딩은 k
+ m
청크만 유지합니다. 예를 들어 3 데이터 및 2 코딩 청크는 원래 오브젝트의 저장 공간 1.5x를 사용합니다.
삭제 코딩은 복제보다 스토리지 오버헤드가 적지만 삭제 코드 알고리즘은 개체에 액세스하거나 복구할 때 복제보다 더 많은 RAM과 CPU를 사용합니다. 삭제 코딩은 데이터 스토리지가 지속성 및 내결함성이어야 하지만 빠른 읽기 성능(예: 콜드 스토리지, 기록 레코드 등)이 필요하지 않은 경우 유용합니다.
Ceph에서 코드를 지우는 방법에 대한 수치적이고 자세한 설명은 Red Hat Ceph Storage 8 아키텍처 가이드 의 Ceph Erasure Coding 섹션을 참조하십시오.
Ceph는 k=2 및 m=2 로 클러스터를 초기화할 때 기본 삭제 코드 프로필을 생성합니다. 즉, Ceph에서 오브젝트 데이터를 3개의 OSD(k+m == 4)에 분배하고 Ceph는 데이터 손실 없이 OSD 중 하나를 손실할 수 있습니다. 삭제 코드 프로파일링에 대한 자세한 내용은 Erasure Code Profiles 섹션을 참조하십시오.
.rgw.buckets
풀만 erasure-coded 및 기타 모든 Ceph Object Gateway 풀만 복제된 것으로 구성하십시오. 그렇지 않으면 다음 오류와 함께 새 버킷을 생성하려는 시도가 실패합니다.
set_req_state_err err_no=95 resorting to 500
그 이유는 Desure-coded 풀이 omap
작업을 지원하지 않기 때문에 특정 Ceph Object Gateway 메타데이터 풀에는 omap
지원이 필요하기 때문입니다.
5.1. 샘플 삭제 코드 풀 생성
삭제 코딩 풀을 생성하고 배치 그룹을 지정합니다. 다른 프로필을 지정하지 않는 한 ceph osd pool create
명령은 기본 프로필로 erasure-coded 풀을 생성합니다. 프로필은 두 개의 매개 변수 k
및 m
을 설정하여 데이터 중복성을 정의합니다. 이러한 매개변수는 데이터 조각이 분할되고 코딩 청크 수가 생성되는 청크 수를 정의합니다.
가장 간단한 삭제 코딩 풀은 RAID5와 동일하며 최소 4개의 호스트가 필요합니다. 2+2 프로필을 사용하여 삭제 코드 풀을 생성할 수 있습니다.
프로세스
2+2 구성이 있는 4개의 노드에서 삭제 코딩된 풀에 대해 다음 구성을 설정합니다.
구문
ceph config set mon mon_osd_down_out_subtree_limit host ceph config set osd osd_async_recovery_min_cost 1099511627776
중요이는 일반적으로 삭제 코딩된 풀에는 필요하지 않습니다.
중요비동기 복구 비용은 복제본의 뒤에 있는 PG 로그 항목 수와 누락된 오브젝트 수입니다.
osd_target_pg_log_entries_per_osd
는30000
입니다. 따라서 하나의 PG가 있는 OSD에는30000
개의 항목이 있을 수 있습니다.osd_async_recovery_min_cost
는 64비트 정수이므로 2+2 구성이 있는 EC 풀의 경우osd_async_recovery_min_cost
값을1099511627776
으로 설정합니다.참고4개의 노드가 있는 EC 클러스터의 경우 K+M 값은 2+2입니다. 노드가 완전히 실패하면 4개의 청크로 복구되지 않으며 3개의 노드만 사용할 수 있습니다.
호스트
다운 시나리오에서mon_osd_down_out_subtree_limit
값을 host로 설정하면 OSD가 표시되지 않으므로 데이터가 재조정되지 않고 노드가 다시 가동될 때까지 대기합니다.2+2 구성을 사용하는 삭제 코드 풀의 경우 프로필을 설정합니다.
구문
ceph osd erasure-code-profile set ec22 k=2 m=2 crush-failure-domain=host
예
[ceph: root@host01 /]# ceph osd erasure-code-profile set ec22 k=2 m=2 crush-failure-domain=host Pool : ceph osd pool create test-ec-22 erasure ec22
erasure-coded 풀을 생성합니다.
예
[ceph: root@host01 /]# ceph osd pool create ecpool 32 32 erasure pool 'ecpool' created $ echo ABCDEFGHI | rados --pool ecpool put NYAN - $ rados --pool ecpool get NYAN - ABCDEFGHI
32는 배치 그룹의 수입니다.