2.7. Ceph 기간 코딩
Ceph는 여러 시간대 코드 알고리즘 중 하나를 로드할 수 있습니다. 가장 오래되고 가장 일반적으로 사용되는 것은 Reed-Solomon
알고리즘입니다. 경도 코드는 실제로 정방향 오류 수정(FEC) 코드입니다. FEC 코드는 K
청크의 메시지를 N
청크의 '코드 단어'라는 긴 메시지로 변환하여 Ceph가 N
청크의 하위 집합에서 원래 메시지를 복구할 수 있도록 합니다.
보다 구체적으로는 변수 K
가 원래의 데이터 청크 양인 N = K+M
입니다. 변수 M
은 dissure 코드 알고리즘이 실패로부터 보호를 제공하기 위해 추가하는 추가 또는 중복 청크를 나타냅니다. 변수 N
은 dissure 코딩 프로세스 이후 생성된 총 청크 수입니다. M
의 값은 간단히 N-
이므로 알고리즘은 K 원래 데이터 청크의 K
N-K
중복 청크를 계산합니다. 이 방법을 사용하면 Ceph가 모든 원래 데이터에 액세스할 수 있습니다. 시스템은 임의의 N-K
장애에 탄력적으로 대처할 수 있습니다. 예를 들어 10 K
의 16 N
구성 또는 dissure 코딩 10/16
에서 dissure 코드 알고리즘은 10개의 기본 청크 K
에 6개의 추가 청크를 추가합니다. 예를 들어 M = K-N
또는 16-10 = 6
구성에서 Ceph는 16개의 OSD에 16개의 청크 N
을 분배합니다. 원래 파일은 6개의 OSD가 실패하더라도 10개의 인증된 N
청크에서 재구성할 수 있으며, 이로 인해 Red Hat Ceph Storage 클러스터가 데이터가 손실되지 않으므로 매우 높은 수준의 내결함성을 보장할 수 있습니다.
복제된 풀과 마찬가지로 dissure-coded 풀의 경우 up 세트의 기본 OSD는 모든 쓰기 작업을 수신합니다. 복제된 풀에서 Ceph는 세트의 보조 OSD의 배치 그룹에 있는 각 오브젝트의 깊은 복사본을 만듭니다. 일기화 코딩에서는 프로세스가 약간 다릅니다. 시간대 코딩된 풀은 각 개체를 K+M
청크로 저장합니다. K
데이터 청크와 M
코딩 청크로 나뉩니다. 이 풀은 Ceph가 작동 세트의 OSD에 각 청크를 저장하도록 K+M
크기를 갖도록 구성됩니다. Ceph는 청크의 순위를 오브젝트 속성으로 저장합니다. 기본 OSD는 페이로드를 K+M
청크로 인코딩하고 다른 OSD로 보냅니다. 기본 OSD는 권한 있는 버전의 배치 그룹 로그도 유지 관리합니다.
예를 들어 일반적인 구성에서 시스템 관리자는 6개의 OSD를 사용하고 이 두 개의 손실이 발생할 수 있도록 삭제 코드된 풀을 생성합니다. 즉 (K+M = 6
)입니다. (M = 2
).
Ceph가ECDHEDEFGHI
JKL
을 포함하는 객체를 풀에 쓰는 경우, 이전 인코딩 알고리즘은 콘텐츠를 4개의 데이터 청크로 분할하고, 간단히 콘텐츠를 4개 부분(예:DEF
,ECDHEI , JKL
)으로 분할합니다. 콘텐츠 길이가
K
의 복수가 아닌 경우 알고리즘은 콘텐츠를 패딩합니다. 이 함수는 또한 두 개의 코딩 청크를 생성합니다: YXY
를 사용한 다섯 번째와 QGC
로 여섯 번째 청크를 생성합니다. Ceph는 동작 세트의 OSD에 각 청크를 저장합니다. 여기서 청크는 동일한 이름의 개체에 저장되지만 다른 OSD에 상주합니다. 알고리즘은 해당 이름 외에도 청크를 오브젝트 shard_t
의 속성으로 생성한 순서를 유지해야 합니다. 예를 들어 Chunk 1에는ECDHE이 포함되어 있으며 Ceph는 OSD5 에 저장하고 청크 5에는 YXY
가 포함되어 있으며 Ceph는 OSD4 에 저장합니다.

복구 시나리오에서 클라이언트는 청크 1에서 6까지의 청크를 읽음으로써 서바이저로 코딩된 풀에서 오브젝트를 읽으려고 합니다. OSD는 알고리즘에 청크 2 및 6이 누락되었음을 알려줍니다. 이러한 누락된 청크를 'erasure'라고 합니다. 예를 들어 OSD6 이 부족하기 때문에 기본 OSD를 청크 6을 읽을 수 없고 OSD2 가 가장 느리고 청크를 고려하지 않았기 때문에 청크 2를 읽을 수 없었습니다. 그러나 알고리즘에 4개의 청크가 있는 즉시 4개의 청크를 읽습니다. chunk 1 containingECDHE , chunk 3 containing JKL , JKL
이 포함된 청크 4 및 YXY
가 포함된 청크 5.
그런 다음,
QGC
가 포함된 청크 6과 청크 6의 원래 콘텐츠와 개체의 원본 콘텐츠가 다시 빌드됩니다.
데이터를 청크로 분할하는 것은 오브젝트 배치와 독립적입니다. dissure-coded 풀 프로파일과 함께 FlexVolume 규칙 세트에서 OSD의 청크 배치가 결정됩니다. 예를 들어, 이전 코드 프로파일에서 로컬리에 적용할 수 있는 코드(Lrc
) 플러그인을 사용하면 추가 청크가 생성되고 복구하려면 OSD 수가 줄어듭니다. 예를 들어 lrc
프로파일 구성 K=4 M=2 L=3
에서 알고리즘은 jerasure
플러그인과 마찬가지로 6개의 청크(K+M
)를 생성하지만 locality 값(L=3
)은 알고리즘이 로컬로 2개의 청크를 생성해야 합니다. 알고리즘은 (K+M)/L
과 같은 추가 청크를 생성합니다. 청크 0이 포함된 OSD가 실패하면 청크 1, 2 및 첫 번째 로컬 청크를 사용하여 이 청크를 복구할 수 있습니다. 이 경우 알고리즘은 5 대신 복구를 위해 3 청크 만 있으면됩니다.
dissure-coded 풀을 사용하면 오브젝트 맵이 비활성화됩니다.
추가 리소스
- periodsure-coding 프로필 및 plugins에 대한 자세한 내용은 Red Hat Ceph Storage 6의 스토리지 전략 가이드를 참조하십시오.
- 오브젝트 맵에 대한 자세한 내용은 Ceph 클라이언트 오브젝트 맵 섹션을 참조하십시오.