4장. Ceph 삭제 코딩
Ceph는 많은 삭제 코드 알고리즘 중 하나를 로드할 수 있습니다. 가장 빠르고 일반적으로 사용되는 것은 Reed-Solomon
알고리즘입니다. 삭제 코드는 실제로 FEC(전방향 오류 수정) 코드입니다. FEC 코드는 K
청크의 메시지를 N
청크의 '코드 단어'라는 긴 메시지로 변환하여 Ceph가 N
청크의 하위 집합에서 원래 메시지를 복구할 수 있습니다.
특히, 변수 K
가 데이터 청크의 원래 양인 N = K+M
입니다. 변수 M
은 삭제 코드 알고리즘이 실패로부터 보호하기 위해 추가하는 추가 또는 중복 청크를 나타냅니다. 변수 N
은 삭제 코딩 프로세스 후에 생성된 총 청크 수입니다. M
값은 간단히 N-
이므로 알고리즘이 K 원래 데이터 청크에서 K
N-K
중복 청크를 계산합니다. 이 접근 방식을 통해 Ceph는 모든 원본 데이터에 액세스할 수 있습니다. 시스템은 임의의 N-K
오류에 탄력적입니다. 예를 들어, 10 K
의 16 N
구성 또는 삭제 코딩 10/16
에서 삭제 코드 알고리즘은 10 기본 청크 K
에 6 개의 추가 청크를 추가합니다. 예를 들어 M = K-N
또는 16-10 = 6
구성에서 Ceph는 16 OSD에 16 청크 N
을 분배합니다. Red Hat Ceph Storage 클러스터가 데이터를 손실하지 않도록 하는 6개의 OSD가 실패하는 경우에도 10개의 확인된 N
청크에서 원본 파일을 재구성할 수 있으므로 내결함성이 매우 높습니다.
복제 풀과 마찬가지로 삭제 코드 풀의 기본 OSD는 모든 쓰기 작업을 수신합니다. 복제 풀에서 Ceph는 세트의 보조 OSD의 배치 그룹에 있는 각 오브젝트의 깊은 복사본을 만듭니다. 삭제 코딩의 경우 프로세스는 약간 다릅니다. 삭제 코딩 풀은 각 오브젝트를 K+M
청크로 저장합니다. K
데이터 청크와 M
코딩 청크로 나뉩니다. Ceph가 작동 중인 세트의 OSD에 각 청크를 저장할 수 있도록 풀은 크기가 K+M
으로 구성됩니다. Ceph는 청크의 순위를 오브젝트의 속성으로 저장합니다. 기본 OSD는 페이로드를 K+M
청크로 인코딩하여 다른 OSD로 전송합니다. 기본 OSD는 배치 그룹 로그의 권한 있는 버전을 유지 관리해야 합니다.
예를 들어 일반적인 구성에서 시스템 관리자는 6개의 OSD를 사용하고 두 개의 OSD를 유지하기 위해 삭제 코딩 풀을 생성합니다. 즉 (K+M =
6) 이러한 (M = 2
)입니다.
Ceph가 Cryostat DEFHIJKL
을 포함하는 개체를 풀에 쓸 때, 삭제 인코딩 알고리즘은 단순히 content를 네 부분으로 나누어서 4개의 데이터 청크로 분할합니다. 즉,DEF
, DEF , JKL
.
블록 길이가
K
의 배수가 아닌 경우 알고리즘은 콘텐츠를 패딩합니다. 이 함수는 또한 두 개의 코딩 청크를 생성합니다: YXY
를 사용한 다섯 번째와 QGC
의 여섯 번째. Ceph는 작동 세트의 OSD에 각 청크를 저장합니다. 여기서 이름이 같은 오브젝트인 object에 청크를 저장하지만 다른 OSD에 있습니다. 알고리즘은 청크를 생성한 순서와 shard_t의 이름 외에도 오브젝트 shard_t
의 특성으로 유지해야 합니다. 예를 들어 Chunk 1에는 Cryostat 및 Ceph가 OSD5 에 저장되어 있고 청크 5에는 YXY
가 포함되어 있고 Ceph가 OSD4 에 저장되어 있습니다.
복구 시나리오에서 클라이언트는 삭제 코딩된 풀에서 청크 1 에서 6까지의 오브젝트를 읽으려고 합니다. OSD는 청크 2 및 6이 누락되었음을 알고리즘에 알립니다. 이러한 누락된 청크를 'erasures'라고 합니다. 예를 들어 OSD6 이 사용 중이므로 기본 OSD에서 청크 6을 읽을 수 없으며 OSD2 가 가장 느리고 청크를 고려하지 않았기 때문에 청크 2를 읽을 수 없었습니다. 그러나 알고리즘에 4개의 청크가 있는 즉시 4개의 청크를 읽습니다. 즉, Cryostat를 포함하는 청크 1, Cryostat I
를 포함하는 청크 3, JKL
을 포함하는 청크 4, YXY
가 포함된 청크 5. 그런 다음 object Cryostat
DEFGHIJKL
의 원본 내용과 QGC
가 포함된 청크 6의 원본 콘텐츠를 다시 빌드합니다.
데이터를 청크로 분할하는 것은 오브젝트 배치와 독립적입니다. CRUSH 규칙 세트는 erasure-coded pool 프로파일과 함께 OSD에서 청크 배치를 결정합니다. 예를 들어 삭제 코드 프로파일에서 로컬 복구 가능한 코드(lrc
) 플러그인을 사용하면 추가 청크가 생성되고 복구하기 위해 OSD 수가 줄어듭니다. 예를 들어 lrc
프로파일 구성 K=4 M=2 L=3
에서 알고리즘은 jerasure
플러그인과 마찬가지로 6개의 청크(K+M
)를 생성하지만, 지역성 값(L=3
)은 알고리즘이 2개의 청크를 로컬에서 생성해야 합니다. 알고리즘은 (K+M)/L
과 같은 추가 청크를 생성합니다. 청크 0이 포함된 OSD가 실패하면 청크 1, 2 및 첫 번째 로컬 청크를 사용하여 이 청크를 복구할 수 있습니다. 이 경우 알고리즘은 5 대신 복구용 청크 3개만 필요합니다.
삭제 코딩된 풀을 사용하면 오브젝트 맵이 비활성화됩니다.
삭제 코드 풀의 경우 2+2 구성의 입력 문자열을 Cryostat DEFGHIJKL
에서 Cryostat DEF
로 교체하고 4
에서 2
로 코딩 청크를 교체합니다.
MSR은 "Multi-Step Retry (MSR)"의 약어입니다. Ceph 클러스터의 CRUSH 규칙으로, 스토리지 장치에 데이터가 분산된 방법을 정의하여 효율적인 데이터 검색, 분산 및 내결함성을 보장합니다.
추가 리소스
- CRUSH, 삭제 코딩 프로필 및 플러그인에 대한 자세한 내용은 Red Hat Ceph Storage 8용 스토리지 전략 가이드를 참조하십시오.
- 오브젝트 맵에 대한 자세한 내용은 Ceph 클라이언트 오브젝트 맵 섹션을 참조하십시오.