3.3. 배치 그룹 장단점
모든 OSD에서 데이터 지속성 및 데이터 배포는 더 많은 배치 그룹을 호출하지만 CPU 및 메모리 리소스를 보존하기 위해 최대 성능을 위해 필요한 최소값으로 줄여야 합니다.
3.3.1. 데이터 지속성 링크 복사링크가 클립보드에 복사되었습니다!
Ceph는 영구적으로 데이터 손실을 방지하기 위해 노력합니다. 그러나 OSD가 실패하면 데이터가 완전히 복구될 때까지 영구 데이터 손실 위험이 증가합니다. 영구 데이터 손실은 드물지만 여전히 가능합니다. 다음 시나리오에서는 Ceph가 다음 세 개의 데이터 사본으로 단일 배치 그룹에서 데이터를 영구적으로 손실하는 방법을 설명합니다.
- OSD가 실패하고 포함된 오브젝트의 모든 사본이 손실됩니다. OSD에 저장된 배치 그룹 내의 모든 오브젝트의 경우 복제본 수가 3에서 2로 갑자기 삭제됩니다.
- Ceph는 각 배치 그룹에 대한 모든 오브젝트의 세 번째 복사본을 다시 생성하기 위해 새 OSD를 선택하여 실패한 OSD에 저장된 각 배치 그룹에 대한 복구를 시작합니다.
- 새 OSD가 세 번째 사본으로 완전히 채워지기 전에 동일한 배치 그룹의 사본이 포함된 두 번째 OSD가 실패합니다. 그러면 일부 오브젝트에는 남아 있는 사본이 하나만 있습니다.
- Ceph는 다른 OSD를 선택하고 개체를 복사하여 원하는 수의 복사본을 복원합니다.
- 복구가 완료되기 전에 동일한 배치 그룹의 사본을 포함하는 세 번째 OSD가 실패합니다. 이 OSD에 오브젝트의 나머지 유일한 사본이 포함된 경우 오브젝트는 영구적으로 손실됩니다.
하드웨어 오류는 예외가 아니라 예상입니다. 앞서 언급한 시나리오를 방지하려면 이상적으로 복구 프로세스가 합리적으로 가능한 한 빨리 처리되어야 합니다. 클러스터 크기, 하드웨어 구성 및 배치 그룹 수가 총 복구 시간에 중요한 역할을 합니다.
소규모 클러스터는 신속하게 복구되지 않습니다.
3개의 복제본 풀에 512개의 배치 그룹이 있는 OSD 10개가 포함된 클러스터에서 CRUSH는 각 배치 그룹에 OSD를 3개로 지정합니다. 각 OSD는 호스팅 (512 * 3) / 10 = ~150 배치 그룹 (으)로 끝납니다. 첫 번째 OSD에 실패하면 클러스터가 모든 150개의 배치 그룹에 대해 동시에 복구를 시작합니다.
Ceph는 나머지 9개의 OSD에 무작위로 남아 있는 150개의 배치 그룹을 저장할 수 있습니다. 따라서 나머지 OSD는 다른 모든 OSD에 오브젝트 복사본을 전송하고 새 오브젝트도 수신할 수 있습니다. 나머지 OSD는 현재 할당된 150개의 배치 그룹 중 일부를 담당합니다.
총 복구 시간은 풀을 지원하는 하드웨어에 따라 다릅니다. 예를 들어 10개의 OSD 클러스터에서 호스트에 1TB SSD가 있는 OSD가 1개 있고 10GB/s 스위치가 각각 10개의 호스트를 연결하는 경우 복구 시간은 M 분입니다. 반대로 호스트에 두 개의 SATA OSD가 포함되어 있고 1GB/s 스위치가 5개의 호스트를 연결하는 경우 복구 시간이 크게 더 오래 걸립니다. 이 크기의 클러스터에서는 배치 그룹 수가 데이터 지속성에 거의 영향을 미치지 않습니다. 배치 그룹 수는 128 또는 8192일 수 있으며 복구 속도가 느리거나 빠르지 않습니다.
그러나 동일한 Ceph 클러스터를 10개의 OSD 대신 20개의 OSD로 늘리면 복구 속도를 높이고 데이터 지속성을 크게 향상시킬 수 있습니다. 이유가 무엇입니까? 각 OSD는 이제 150개가 아닌 75개의 배치 그룹에만 참여하고 있습니다. 20개의 OSD 클러스터에는 복구하기 위해 동일한 양의 복사 작업을 수행하려면 나머지 19개의 OSD 모두 필요합니다. 10개의 OSD 클러스터에서 각 OSD는 약 100GB를 복사해야 했습니다. 20개의 OSD 클러스터에서 각 OSD는 각각 50GB만 복사해야 합니다. 네트워크가 병목인 경우 복구 속도가 두 배 빠르게 수행됩니다. 즉, OSD 수가 증가함에 따라 복구 시간이 줄어듭니다.
대규모 클러스터에서 PG 수가 중요합니다!
예시적인 클러스터가 40개의 OSD로 증가하면 각 OSD는 35개의 배치 그룹만 호스팅합니다. OSD가 종료되면 다른 병목 현상이 발생하지 않는 한 복구 시간이 단축됩니다. 그러나 이 클러스터가 200개의 OSD로 증가하면 각 OSD는 약 7개의 배치 그룹만 호스팅합니다. OSD가 종료되면 이러한 배치 그룹에서 대부분의 21 (7 * 3) OSD 간에 복구가 수행됩니다. 복구 작업은 40개의 OSD가 있는 경우보다 오래 걸립니다. 즉 배치 그룹 수가 증가해야 합니다!
복구 시간이 얼마나 짧은지와 관계없이 복구가 진행되는 동안 배치 그룹을 저장하는 다른 OSD가 실패할 가능성이 있습니다.
위에서 설명한 10 개의 OSD 클러스터에서 OSD가 실패하면 약 8 개의 배치 그룹 (즉 75 pgs / 9 osds 가 복구되는)은 하나의 남아 있는 사본 만 가질 수 있습니다. 8개의 나머지 OSD 중 하나라도 실패하면 하나의 배치 그룹의 마지막 개체가 손실될 가능성이 높습니다(즉, 하나의 남은 사본만 복구되는 8 pgs / 8 osds ). 따라서 다소 큰 클러스터부터 시작하는 것이 좋습니다(예: 50개의 OSD).
클러스터 크기가 20개의 OSD로 증가하면 3개의 OSD가 손실되어 배치 그룹 수가 삭제됩니다. 두 번째 OSD 손실은 8 대신 약 2 개의 (즉 35 pgs / 19 osds )의 성능이 저하되고 세 번째 OSD는 보존 복사본을 포함하는 두 개의 OSD 중 하나 인 경우에만 데이터가 손실됩니다. 즉, 복구 기간 동안 하나의 OSD를 손실할 가능성이 0.0001% 인 경우 클러스터의 8 * 0.0001% 가 10 개의 OSD가 있는 클러스터의 0.0001%에서 20 OSD가 있는 클러스터의 0.0001% 로 이동합니다. 512 또는 4096개의 배치 그룹을 갖는 것은 데이터 지속성과 관련된 한 50개의 OSD가 있는 클러스터에서 거의 동일합니다.
간단히 말해 더 많은 OSD는 복구 속도가 빨라지고 계단식 실패 위험이 낮아 배치 그룹 및 해당 오브젝트가 영구적으로 손실됩니다.
클러스터에 OSD를 추가할 때 새 OSD를 배치 그룹 및 오브젝트로 채우는 데 시간이 오래 걸릴 수 있습니다. 그러나 오브젝트의 저하는 없으며 OSD를 추가하면 데이터 지속성에 영향을 미치지 않습니다.
3.3.2. 데이터 배포 링크 복사링크가 클립보드에 복사되었습니다!
Ceph는 핫 스팟을 피하기 위해 노력합니다. 즉, 일부 OSD는 다른 OSD보다 훨씬 많은 트래픽을 수신합니다. CRUSH는 배치 그룹이 OSD( 임의로 의사)에 할당될 때 기본 OSD는 클러스터 및 핫 스팟 및 네트워크 초과 구독 문제 때문에 데이터 배포로 인해 균등하게 분산되도록 오브젝트를 배치 그룹에 균등하게 할당하는 것이 좋습니다.
CRUSH는 각 오브젝트의 배치 그룹을 계산하지만 실제로 이 배치 그룹 내 의 각 OSD에 저장되는 데이터 양을 알 수 없으므로 배치 그룹과 OSD 수 간의 비율은 데이터 배포에 상당한 영향을 미칠 수 있습니다.
예를 들어 3개의 복제본 풀에 10개의 OSD가 있는 배치 그룹이 하나뿐인 경우 CRUSH에 다른 선택 항목이 없기 때문에 Ceph는 3개의 OSD만 사용하여 데이터를 저장합니다. 더 많은 배치 그룹을 사용할 수 있으면 CRUSH가 OSD에 오브젝트를 균등하게 분산할 가능성이 높습니다. CRUSH는 OSD에 배치 그룹을 균등하게 할당합니다.
OSD보다 배치 그룹이 하나 이상 있는 경우 배포도 수행해야 합니다. 예를 들어 3개의 OSD에 대한 256개의 배치 그룹, 10개의 OSD용 512 또는 1024 배치 그룹 등입니다.
OSD와 배치 그룹 간의 비율은 일반적으로 오브젝트 스트라이핑과 같은 고급 기능을 구현하는 Ceph 클라이언트의 통합 데이터 배포 문제를 해결합니다. 예를 들어 4TB 블록 장치는 4MB 오브젝트로 분할될 수 있습니다.
CRUSH는 오브젝트 크기를 고려하지 않기 때문에 OSD와 배치 그룹 간의 비율은 다른 경우의 짝수 없이 데이터 배포를 처리하지 않습니다. librados 인터페이스를 사용하여 비교적 작은 오브젝트를 저장하고 일부 매우 큰 오브젝트를 사용하면 데이터 배포가 취소될 수 있습니다. 예를 들어 총 4GB의 4GB의 4K 개체는 10개의 OSD에서 1000개의 배치 그룹에 균등하게 분배됩니다. 각 OSD에서 4GB / 10 = 400MB 를 사용합니다. 400MB 개체가 풀에 추가되면 개체가 배치된 배치 그룹을 지원하는 3개의 OSD는 400MB + 400MB = 800MB 로 채워지고 나머지 7개는 400MB로만 채워집니다.
3.3.3. 리소스 사용량 링크 복사링크가 클립보드에 복사되었습니다!
각 배치 그룹의 경우 OSD 및 Ceph 모니터는 복구 중에 메모리, 네트워크 및 CPU가 항상 필요합니다. 배치 그룹 내에서 오브젝트를 클러스터링하여 이러한 오버헤드를 공유하는 것이 배치 그룹이 존재하는 주요 이유 중 하나입니다.
배치 그룹 수를 최소화하면 상당한 양의 리소스가 절약됩니다.