2.5. CRUSH 가중치
CRUSH 알고리즘은 새 데이터 오브젝트를 PG 및 PG에 OSD에 할당하는 쓰기 요청에 대한 균일한 확률 분배를 사용하여 OSD 장치당 테라바이트 단위로 가중치 값을 할당합니다. 이러한 이유로 모범 사례로 동일한 유형 및 크기의 장치를 사용하여 CRUSH 계층 구조를 생성하고 동일한 가중치를 할당하는 것이 좋습니다. 성능 특성이 데이터 배포에 영향을 미치지 않더라도 CRUSH 계층 구조에 균일한 성능 특성을 가질 수 있도록 동일한 I/O 및 처리량 특성이 있는 장치를 사용하는 것이 좋습니다.
균일한 하드웨어를 사용하는 것이 항상 실용적인 것은 아니므로 다른 크기의 OSD 장치를 통합하고 더 많은 데이터를 더 큰 장치에 배포하고 더 적은 데이터를 더 작은 장치에 배포하도록 상대 가중치를 사용할 수 있습니다.
2.5.1. OSD의 CRUSH 가중치 설정 링크 복사링크가 클립보드에 복사되었습니다!
CRUSH 맵 내에서 OSD CRUSH 가중치를 Terabytes로 설정하려면 다음 명령을 실행합니다.
ceph osd crush reweight _NAME_ _WEIGHT_
다음과 같습니다.
- name
- 설명
- OSD의 전체 이름입니다.
- 유형
- 문자열
- 필수 항목
- 제공됨
- 예
-
osd.0
- weight
- 설명
-
OSD의 CRUSH 가중치입니다. Terabytes의 OSD 크기여야 합니다. 여기서
1.0은 1Terabyte입니다. - 유형
- double
- 필수 항목
- 제공됨
- 예
-
2.0
이 설정은 OSD를 생성하거나 OSD를 추가한 직후 CRUSH 가중치를 조정할 때 사용됩니다. 일반적으로 OSD 수명 동안 변경되지 않습니다.
2.5.2. Bucket의 OSD Weights 설정 링크 복사링크가 클립보드에 복사되었습니다!
ceph osd crush reweight 을 사용하는 것은 시간이 많이 소요될 수 있습니다. ceph osd crush reweight-subtree 명령을 실행하여 버킷(row, rack, node 등) 아래의 모든 Ceph OSD 가중치를 설정(또는 재설정)할 수 있습니다.
구문
ceph osd crush reweight-subtree NAME
여기서 NAME 은 CRUSH 버킷의 이름입니다.
2.5.3. OSD 의 Weight 설정 링크 복사링크가 클립보드에 복사되었습니다!
ceph osd in 및 ceph osd out 의 목적을 위해 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. 사용률에 따라 OSD의 가중치 설정 링크 복사링크가 클립보드에 복사되었습니다!
CRUSH는 새 데이터 오브젝트 PG 및 PG를 OSD에 할당하는 쓰기 요청에 대한 균일한 확률 분배를 위해 설계되었습니다. 그러나 클러스터가 어쨌든 불균형이 될 수 있습니다. 이는 여러 가지 이유로 발생할 수 있습니다. 예를 들면 다음과 같습니다.
- 다중 풀: CRUSH 계층 구조에 여러 개의 풀을 할당할 수 있지만 풀은 배치 그룹 수, 크기(저장할 복제본 수) 및 오브젝트 크기 특성을 가질 수 있습니다.
-
사용자 지정 클라이언트: 블록 장치, 오브젝트 게이트웨이 및 파일 시스템과 같은 Ceph 클라이언트는 클라이언트의 데이터를 공유하고 클러스터의 오브젝트로 데이터를 균일하게 크기 조정한 RADOS 오브젝트로 스트라이핑합니다. 따라서 앞서 언급한 시나리오를 제외하고 CRUSH는 일반적으로 목표를 달성합니다. 그러나 클러스터가 불균형이 될 수 있는 다른 경우가 있습니다. 즉
librados를 사용하여 오브젝트 크기를 정규화하지 않고 데이터를 저장합니다. 이 시나리오는 불균형한 클러스터로 이어질 수 있습니다(예: 1001MB 개체와 10 4MB 개체를 저장하면 일부 OSD에 다른 OSD보다 많은 데이터가 있습니다). - 확률: 균일한 배포로 인해 더 많은 PG가 있고 일부는 적은 일부 OSD가 생성됩니다. OSD가 많은 클러스터의 경우 통계적 이상값이 추가로 제공됩니다.
다음을 실행하여 사용률을 통해 OSD를 다시 지정할 수 있습니다.
구문
ceph osd reweight-by-utilization [THRESHOLD_] [WEIGHT_CHANGE_AMOUNT] [NUMBER_OF_OSDS] [--no-increasing]
예
[ceph: root@host01 /]# 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의 최대 수입니다. 대규모 클러스터의 경우 reweight으로 OSD 수를 제한하면 상당한 재조정을 방지할 수 있습니다. 선택 사항입니다. -
증가는기본적으로 꺼져 있습니다. reweight-by-utilization 또는test-를 늘릴 수 있습니다. 이 옵션을 이러한 명령과 함께 사용하면 OSD가 활용도가 낮은 경우에도 OSD 가중치가 늘어나지 않습니다. 선택 사항입니다.reweight-by-utilization명령을 사용할 때 osd weight
대규모 클러스터에는 reweight-by-utilization 을 실행하는 것이 좋습니다. 사용률 비율은 시간이 지남에 따라 변경될 수 있으며 클러스터 크기 또는 하드웨어가 변경되면 변경되는 사용률을 반영하려면 가중치를 업데이트해야 할 수 있습니다. 사용률에 따라 가중치를 변경하도록 선택하는 경우 이 명령을 사용률, 하드웨어 또는 클러스터 크기 변경으로 다시 실행해야 할 수 있습니다.
가중치를 할당하는 이 또는 기타 가중치 명령을 실행하면 이 명령에 의해 할당된 가중치(예: osd reweight-by-utilization,osd crush weight,osd weight,in 또는 out)가 재정의됩니다.
2.5.5. PG 배포를 통해 OSD의 Weight 설정 링크 복사링크가 클립보드에 복사되었습니다!
OSD 수가 적은 CRUSH 계층 구조에서는 일부 OSD에서 다른 OSD보다 더 많은 PG를 얻을 수 있으므로 로드가 증가할 수 있습니다. 다음을 실행하여 PG 배포를 통해 OSD를 재중량하여 이러한 상황을 해결할 수 있습니다.
구문
osd reweight-by-pg POOL_NAME
다음과 같습니다.
-
Poolname은 풀의 이름입니다. Ceph는 풀이 OSD에 PG를 할당하는 방법을 검사하고 이 풀의 PG 배포에 따라 OSD를 다시 가중치로 지정합니다. 동일한 CRUSH 계층 구조에 여러 개의 풀을 할당할 수 있습니다. 한 풀의 배포에 따라 OSD를 Reweighting OSD는 크기가 동일한 (복제본 수) 및 PG가 없는 경우 동일한 CRUSH 계층 구조에 할당된 다른 풀에 대해 의도하지 않은 영향을 미칠 수 있습니다.
2.5.6. CRUSH 트리의 가중치 다시 계산 링크 복사링크가 클립보드에 복사되었습니다!
CRUSH 트리 버킷은 리프 가중치의 합계여야 합니다. CRUSH 맵 가중치를 수동으로 편집하는 경우 다음을 실행하여 CRUSH 버킷 트리가 버킷 아래의 리프 OSD의 합계를 정확하게 반영하도록 해야 합니다.
구문
osd crush reweight-all