2.2. Ceph 풀
Ceph 스토리지 클러스터는 'Pools'라는 논리 파티션에 데이터 오브젝트를 저장합니다. Ceph 관리자는 블록 장치, 개체 게이트웨이 또는 특정 사용자 그룹과 같은 특정 유형의 데이터에 대한 풀을 생성할 수 있습니다.
Ceph 클라이언트 관점에서 스토리지 클러스터는 매우 간단합니다. Ceph 클라이언트에서 I/O 컨텍스트를 사용하여 데이터를 읽거나 쓸 때 항상 Ceph 스토리지 클러스터의 스토리지 풀에 연결됩니다. 클라이언트는 풀 이름, 사용자 및 시크릿 키를 지정하므로 풀이 데이터 개체에 대한 액세스 제어가 있는 논리 파티션 역할을 하는 것으로 나타납니다.
실제로 Ceph 풀은 오브젝트 데이터를 저장하기 위한 논리 파티션일 뿐만 아니라. 풀은 Ceph 스토리지 클러스터가 데이터를 배포하고 저장하는 방법에 중요한 역할을 합니다. 그러나 이러한 복잡한 작업은 Ceph 클라이언트에 완전히 투명하게 이루어집니다.
Ceph 풀은 다음을 정의합니다.
- 풀 유형: 이전 버전의 Ceph에서 풀은 개체의 여러 깊은 복사본을 간단하게 유지했습니다. 현재 Ceph는 오브젝트 복사본을 여러 개 유지 관리하거나 삭제 코딩을 사용하여 내구성을 보장할 수 있습니다. 데이터 내구성 방법은 풀 전체이며 풀을 생성한 후에는 변경되지 않습니다. 풀 유형은 풀을 생성할 때 데이터 내구성 방법을 정의합니다. 풀 유형은 클라이언트에 완전히 투명합니다.
- 배치 그룹: 엑사바이트 규모의 스토리지 클러스터에서 Ceph 풀은 수백만 개의 데이터 오브젝트를 저장할 수 있습니다. Ceph는 복제본 또는 삭제 코드 청크를 통한 데이터 내구성, 데이터 무결성, CRC 검사, 복제, 재조정 및 복구를 포함하여 다양한 유형의 작업을 처리해야 합니다. 결과적으로 오브젝트별 데이터를 관리하면 확장성 및 성능 병목 현상이 발생합니다. Ceph는 풀을 배치 그룹으로 분할하여 이러한 병목 현상을 해결합니다. CRUSH 알고리즘은 개체를 저장하기 위한 배치 그룹을 계산하고 배치 그룹에 대한 OSD Set을 계산합니다. CRUSH는 각 개체를 배치 그룹에 배치합니다. 그런 다음 CRUSH는 각 배치 그룹을 OSD 세트에 저장합니다. 시스템 관리자는 풀을 생성하거나 수정할 때 배치 그룹 수를 설정합니다.
- CRUSH 규칙 세트: CRUSH는 또 다른 중요한 역할을 수행합니다. CRUSH는 장애 도메인 및 성능 도메인을 감지할 수 있습니다. CRUSH는 스토리지 미디어 유형별로 OSD를 식별하고 OSD를 노드, 랙 및 행으로 계층적으로 구성할 수 있습니다. CRUSH를 사용하면 Ceph OSD에서 장애 도메인에서 오브젝트 복사본을 저장할 수 있습니다. 예를 들어, 오브젝트의 사본은 다른 서버 방, 아스플, 랙 및 노드에 저장될 수 있습니다. 랙과 같이 클러스터의 많은 부분이 실패하면 클러스터가 복구될 때까지 클러스터가 저하된 상태에서 작동할 수 있습니다.
또한 CRUSH를 사용하면 클라이언트가 SSDs, SSD 저널을 사용하는 하드 드라이브, 데이터와 동일한 드라이브에 저널이 있는 하드 드라이브와 같은 특정 하드웨어에 데이터를 쓸 수 있습니다. CRUSH 규칙 세트는 풀에 대한 실패 도메인 및 성능 도메인을 결정합니다. 관리자는 풀을 만들 때 CRUSH 규칙 세트를 설정합니다.
관리자는 풀을 생성한 후 풀의 규칙 세트를 변경할 수 없습니다.
내구성: 엑사바이트 규모 스토리지 클러스터에서는 하드웨어 장애가 예상되는데 예외가 아닙니다. 데이터 오브젝트를 사용하여 블록 장치와 같은 보다 세분화된 스토리지 인터페이스를 나타낼 때, 더 세분화된 인터페이스에 대한 하나 이상의 데이터 오브젝트를 손실하면 더 세분화된 스토리지 엔티티의 무결성을 손상시킬 수 있습니다. 따라서 데이터 손실은 불가능합니다. Ceph는 다음 두 가지 방법으로 높은 데이터 내구성을 제공합니다.
- 복제본 풀은 CRUSH 오류 도메인을 사용하여 여러 개체의 깊은 복사본을 저장하여 하나의 데이터 개체 복사본을 물리적으로 분리합니다. 즉, 사본은 별도의 물리적 하드웨어에 배포됩니다. 이렇게 하면 하드웨어 오류 중에 내구성이 높아집니다.
-
복원된 풀은 각 개체를
K+M
청크로 저장합니다. 여기서K
는 데이터 청크를 나타내고M
은 코딩 청크를 나타냅니다. 합계는 오브젝트를 저장하는 데 사용되는 OSD 수를 나타내고M
값은 실패 할 수 있는 OSD 수를 나타내며M
OSD 수가 실패해야 합니다.
클라이언트 관점에서는 Ceph가 우아하고 단순합니다. 클라이언트는 풀에서 읽고 쓰기만 하면 됩니다. 그러나 풀은 데이터 내구성, 성능 및 고가용성에 중요한 역할을 합니다.