2.4. Ceph 배치 그룹
클러스터에 수백만 개의 오브젝트를 저장하고 개별적으로 관리하는 것은 리소스 집약적입니다. 따라서 Ceph는 배치 그룹(PG)을 사용하여 대규모 오브젝트를 보다 효율적으로 관리합니다.
PG는 개체 컬렉션을 포함하는 풀의 하위 집합입니다. Ceph가 풀을 일련의 PG로 분할합니다. 그런 다음 CRUSH 알고리즘은 클러스터 맵과 클러스터의 상태를 고려하여 PG를 균등하게 및 의사 임의로 클러스터의 OSD에 배포합니다.
이것이 작동하는 방식입니다.
시스템 관리자가 풀을 생성할 때 CRUSH는 풀에 대해 사용자 정의 PG 수를 만듭니다. 일반적으로 PG의 수는 데이터의 합리적으로 세분화된 하위 집합이어야 합니다. 예를 들어 풀당 OSD당 OSD 100개가 있으면 각 PG에 풀 데이터의 약 1%가 포함됩니다.
Ceph가 하나의 OSD에서 다른 OSD로 PG를 이동해야 하는 경우 PG의 수가 성능에 영향을 미칩니다. 풀에 PG가 너무 적으면 Ceph는 많은 양의 데이터를 동시에 이동할 것이며 네트워크 로드는 클러스터 성능에 부정적인 영향을 미칩니다. 풀에 PG가 너무 많으면 Ceph는 데이터의 작은 비율을 이동할 때 너무 많은 CPU와 RAM을 사용하므로 클러스터의 성능에 부정적인 영향을 미칩니다. 최적의 성능을 얻기 위해 PG 수를 계산하는 방법에 대한 자세한 내용은 PG 수 를 참조하십시오.
Ceph는 개체의 복제본을 저장하거나 개체의 이차 코드 청크를 저장하여 데이터 손실을 방지합니다. Ceph는 PG에 오브젝트의 개체 또는 삭제 코드 청크를 저장하므로 Ceph는 오브젝트의 각 사본 또는 오브젝트의 코드 청크마다 "작업 세트"라는 OSD 세트에서 각 PG를 복제합니다. 시스템 관리자는 풀의 PG 수와 복제본 또는 삭제 코드 청크 수를 확인할 수 있습니다. 그러나 CRUSH 알고리즘은 특정 PG에 대해 설정된 OSD를 계산합니다.
CRUSH 알고리즘과 PG를 사용하면 Ceph가 동적입니다. 클러스터 맵 또는 클러스터 상태가 변경되면 Ceph가 하나의 OSD에서 다른 OSD로 자동 이동하는 PG를 이동할 수 있습니다.
다음은 몇 가지 예입니다.
- 클러스터 확장: 클러스터에 새 호스트와 OSD를 추가하면 클러스터 맵이 변경됩니다. CRUSH는 클러스터 전체에서 PG를 OSD에 균등하게 배포하므로 새 호스트와 해당 OSD를 추가하면 CRUSH가 일부 풀의 배치 그룹을 새 OSD에 다시 할당합니다. 즉, 시스템 관리자는 클러스터를 수동으로 리밸런스할 필요가 없습니다. 또한 새 OSD에는 다른 OSD와 거의 동일한 양의 데이터가 포함됩니다. 또한 새 OSD에는 새로 작성된 OSD가 포함되어 있지 않으므로 클러스터에서 "시점"이 발생하지 않습니다.
- OSD Fails: OSD가 실패하면 클러스터의 상태가 변경됩니다. Ceph는 복제본 또는 삭제 코드 청크 중 하나를 일시적으로 손실하고 다른 복사본을 만들어야 합니다. 작업 세트의 기본 OSD가 실패하면 작동 세트의 다음 OSD가 기본 상태가 되고 CRUSH는 새 OSD를 계산하여 추가 복사 또는 삭제 코드 청크를 저장합니다.
Ceph 스토리지 클러스터는 수백~ thousands개의 PG 컨텍스트 내에서 수백만 개의 오브젝트를 관리하여 오류를 효율적으로 축소 및 복구할 수 있습니다.
Ceph 클라이언트의 경우 librados
를 통한 CRUSH 알고리즘은 개체를 읽고 쓰는 프로세스를 매우 간단하게 합니다. Ceph 클라이언트는 간단히 오브젝트를 풀에 쓰거나 풀에서 오브젝트를 읽기만 하면 됩니다. 작동 세트의 기본 OSD는 Ceph 클라이언트를 대신하여 작동 중인 세트의 개체 또는 삭제 코드 청크를 보조 OSD에 작성할 수 있습니다.
클러스터 맵 또는 클러스터 상태가 변경되면 PG를 저장하는 OSD의 CRUSH 계산도 변경됩니다. 예를 들어 Ceph 클라이언트는 foo
오브젝트를 풀 표시줄에
작성할 수 있습니다. CRUSH는 오브젝트를 PG 1.a
에 할당하고 OSD 5
에 각각 저장하고 OSD 10
및 OSD 15
의 복제본을 각각 저장합니다. OSD 5
가 실패하면 클러스터 상태가 변경됩니다. Ceph 클라이언트가 풀 바
로부터 foo
인 오브젝트를 읽을 때 librados
를 통한 클라이언트는 새 기본 OSD로 OSD 10
에서 자동으로 검색합니다.
librados
를 통한 Ceph 클라이언트는 오브젝트를 작성하고 읽을 때 작동하는 세트의 기본 OSD에 직접 연결됩니다. I/O 작업에서는 중앙 집중식 브로커를 사용하지 않으므로 네트워크 초과 구독은 일반적으로 Ceph에 문제가 되지 않습니다.
다음 다이어그램에서는 CRUSH가 오브젝트를 PG에 할당하는 방법과 PG를 OSD에 할당하는 방법을 보여줍니다. CRUSH 알고리즘은 작업 세트의 각 OSD가 별도의 장애 도메인에 있도록 PG를 OSD에 할당합니다. 일반적으로 OSD는 항상 별도의 서버 호스트에 있고 때로는 별도의 랙에 있습니다.