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