2.5. CRUSH Weights

CRUSH 알고리즘은 새 데이터 오브젝트를 PGs 및 PGs에 할당하는 쓰기 요청에 대한 일관된 확률 분배를 적용하여 OSD 장치당 테라바이트 단위로 가중치 값을 할당합니다. 이러한 이유로 모범 사례로 동일한 유형과 크기의 장치를 사용하여 CRUSH 계층을 만들고 동일한 가중치를 할당하는 것이 좋습니다. 또한 성능 특성이 데이터 배포에 영향을 미치지 않더라도 CRUSH 계층 구조에서 일관된 성능 특성을 갖도록 I/O 및 처리량 특성이 동일한 장치를 사용하는 것이 좋습니다.

균일한 하드웨어를 사용하는 것은 항상 실용적이지 않기 때문에 서로 다른 크기의 OSD 장치를 통합하고 상대적 가중치를 사용하여 더 많은 데이터를 더 큰 장치에 배포하고 데이터를 더 작은 장치에 배포할 수 있습니다.

2.5.1. Terabytes에서 OSD의 가중치 설정

CRUSH 맵 내에서 Terabytes의 OSD CRUSH 가중치를 설정하려면 다음 명령을 실행합니다.

ceph osd crush reweight {name} {weight}

다음과 같습니다.

name
설명
OSD의 전체 이름입니다.
유형
문자열
필수 항목
있음
예제
osd.0
weight
설명
OSD의 CRUSH 가중치입니다. 이는 Terabytes의 OSD 크기여야 합니다. 여기서 1.0 은 1 Terabyte입니다.
유형
double
필수 항목
있음
예제
2.0

이 설정은 OSD를 추가하거나 OSD를 추가한 직후 CRUSH 가중치를 조정할 때 사용됩니다. 일반적으로 OSD의 라이프 사이클은 변경되지 않습니다.

2.5.2. 버킷의 OSD 가중치 설정

ceph osd crush reweight 을 사용하면 시간이 오래 걸릴 수 있습니다. 다음을 실행하여 버킷(row, rack, node 등)에서 모든 Ceph OSD 가중치를 설정(또는 재설정)할 수 있습니다.

osd crush reweight-subtree <name>

여기서,

name 은 CRUSH 버킷의 이름입니다.

2.5.3. Weight 에서 OSD 설정

에서 ceph osdceph osd 의 목적으로 OSD는 클러스터에 있거나 클러스터 외부에 있습니다. 이렇게 하면 모니터가 OSD 상태를 기록합니다. 그러나 OSD가 클러스터 에있는 경우에도 문제를 해결할 때까지 사용하지 않으려는 등 오작동이 발생할 수 있습니다(예: 스토리지 드라이브를 교체하고 컨트롤러 교체 등).

다음을 실행하여 특정 OSD(즉, Terabytes 에서 가중치를 변경하지 않고)의 가중치를 늘리거나 줄일 수 있습니다.

ceph osd reweight {id} {weight}

다음과 같습니다.

  • ID 는 OSD 번호입니다.
  • weight 는 0.0-1.0의 범위이며, 여기서 0 은 클러스터에 없는 경우(즉, PG가 할당되지 않음) 클러스터에는 1.0입니다(즉, OSD는 다른 OSD와 동일한 수의 PG를 수신함).

2.5.4. Utilization으로 OSD의 가중치 설정

CRUSH는 새로운 데이터 오브젝트 PG 및 PG를 OSD에 할당하는 쓰기 요청에 대해 균일한 확률 분포를 근접하도록 설계되었습니다. 그러나 클러스터는 어쨌든 불균형이 될 수 있습니다. 이는 여러 가지 이유로 발생할 수 있습니다. 예:

  • 다중 풀: CRUSH 계층 구조에 여러 개의 풀을 할당할 수 있지만 풀에는 배치할 수 있는 배치 그룹, 크기(복제본 수) 및 개체 크기 특성이 다를 수 있습니다.
  • 사용자 지정 클라이언트: 블록 장치, 오브젝트 게이트웨이 및 파일 시스템 shard 데이터와 같은 Ceph 클라이언트는 클라이언트에서 데이터를 스트라이핑하고 클러스터 전체의 개체가 작은 RADOS 오브젝트로 데이터를 스트라이핑합니다. 예상 시나리오를 제외하고 CRUSH는 일반적으로 목표를 달성할 수 있습니다. 그러나 클러스터가 불균형이 될 수있는 또 다른 경우가 있습니다 : librados 를 사용하여 개체 크기를 정규화하지 않고 데이터를 저장합니다. 이 시나리오로 인해 불균형 클러스터가 발생할 수 있습니다(예: 100개의 1MB 오브젝트와 10 4MB 오브젝트를 저장하면 몇 개의 OSD에서 다른 오브젝트보다 많은 데이터가 더 많은 데이터를 보유하게 됩니다).
  • 확률: 균일한 배포로 인해 일부 OSD가 더 많은 PG가 있고 일부는 더 적은 OSD가 됩니다. OSD가 많은 클러스터의 경우 통계 이상값이 더 높아집니다.

다음을 실행하여 OSD 사용률을 다시 구성할 수 있습니다.

ceph osd reweight-by-utilization [threshold]  [weight_change_amount] [number_of_OSDs] [--no-increasing]

예:

ceph osd test-reweight-by-utilization 110 .5 4 --no-increasing

다음과 같습니다.

  • 임계값 은 사용률이므로 높은 데이터 스토리지 로드를 처리하는 OSD에 가중치가 감소하고 이에 따라 할당된 PG가 줄어듭니다. 기본값은 120 이며 120 %를 반영합니다. 100+ 의 값은 유효한 임계값입니다. 선택 사항:
  • weight_change_amount 는 가중치를 변경할 양입니다. 유효한 값은 0.0 - 1.0 보다 큽니다. 기본값은 0.05 입니다. 선택 사항:
  • number_of_OSDs 는 다시 가중할 최대 OSD 수입니다. 대규모 클러스터의 경우 OSD 수를 다시 가중치로 제한하면 상당한 재조정이 방지됩니다. 선택 사항:
  • 기본적으로 no-increasing해제 되어 있습니다. reweight-by-utilization 또는 test-reweight-by-utilization 명령을 사용할 때 osd 가중치를 늘릴 수 있습니다. 이 옵션을 이러한 명령과 함께 사용하면 OSD가 활용도가 낮은 경우에도 OSD 가중치가 증가하지 않습니다. 선택 사항:
중요

대규모 클러스터의 경우 reweight-by-utilization 을 실행하는 것이 권장되며 다소 불가피합니다. 사용률은 시간이 지남에 따라 변경될 수 있으며 클러스터 크기 또는 하드웨어 변경으로 인해 사용률 변경을 반영하려면 가중치를 업데이트해야 할 수 있습니다. 사용률로 다시 스케일링을 선택하는 경우 이 명령을 사용률, 하드웨어 또는 클러스터 크기 변경으로 다시 실행해야 할 수 있습니다.

가중치를 할당하는 이 또는 기타 weight 명령을 실행하면 이 명령에서 할당한 가중치를 재정의합니다(예: osd reweight-by-utilization,osd crush weight,osd weight,in 또는 out).

2.5.5. PG 배포를 통해 OSD의 가중치 설정

OSD 수가 적은 CRUSH 계층에서는 일부 OSD에서 다른 OSD보다 더 많은 PG를 가져올 수 있으므로 부하가 증가할 수 있습니다. 다음을 실행하여 이러한 상황을 해결하기 위해 PG 배포로 OSD를 다시 정렬할 수 있습니다.

osd reweight-by-pg <poolname>

다음과 같습니다.

  • Poolname 은 풀의 이름입니다. Ceph는 풀이 PG를 OSD에 할당하고 이 풀의 PG 배포에 따라 OSD를 다시 구성하는 방법을 검사합니다. 동일한 CRUSH 계층 구조에 여러 풀을 할당할 수 있습니다. 하나의 풀 배포에 따른 OSD를 다시 가중하면 동일한 크기(복제 수) 및 PG(복제 수)가 없는 경우 동일한 CRUSH 계층에 할당된 다른 풀에 의도하지 않은 효과가 있을 수 있습니다.

2.5.6. CRUSH 트리의 가중치 재계산

CRUSH 트리 버킷은 리프 가중치의 합계여야 합니다. CRUSH 맵 가중치를 수동으로 편집하는 경우 CRUSH 버킷 트리가 버킷 아래의 리프 OSD의 합계를 정확하게 반영하도록 다음을 실행해야 합니다.

osd crush reweight-all