2.8. CRUSH Tunables
Ceph 프로젝트는 많은 변경 사항과 많은 새로운 기능으로 기하 급수적으로 증가했습니다. Ceph의 첫 번째 상용 지원 주요 릴리스인 v0.48(Argonaut)부터 Ceph는 CRUSH 알고리즘의 특정 매개 변수를 조정하는 기능을 제공합니다. 즉, 설정이 소스 코드에서 고정되지 않습니다.
고려해야 할 몇 가지 중요한 사항:
- NetNamespace 값을 조정하면 스토리지 노드 간에 일부 PG가 변경될 수 있습니다. Ceph 클러스터에서 이미 많은 데이터를 저장하고 있는 경우 이동할 데이터의 일부 용량에 대비해야 합니다.
-
ceph-osd
및ceph-mon
데몬은 업데이트된 맵을 수신하는 즉시 새 연결의 기능 비트를 요구하기 시작합니다. 그러나 이미 연결된 클라이언트는 효과적으로 에 배치되어 있으며 새로운 기능을 지원하지 않는 경우 잘못된 것입니다. Ceph 클라이언트도 업데이트하는 Ceph Storage 클러스터 데몬을 업그레이드할 때 확인하십시오. -
CRUSH 튜닝 가능 항목이 non-legacy 값으로 설정되어 나중에 레거시 값으로 다시 변경되면 기능을 지원하는 데
ceph-osd
데몬이 필요하지 않습니다. 그러나 OSD 피어링 프로세스에서는 이전 맵을 검사하고 이해해야 합니다. 따라서 클러스터가 이전에 비-레거시 CRUSH 값을 사용한 경우 기존 기본값을 사용하여 최신 버전의 맵을 다시 전환한 경우에도 이전 버전의ceph-osd
데몬을 실행하지 않아야 합니다.
2.8.1. CRUSH 튜닝
CRUSH를 튜닝하기 전에 모든 Ceph 클라이언트 및 모든 Ceph 데몬이 동일한 버전을 사용하는지 확인해야 합니다. 최근에 업그레이드한 경우 데몬을 다시 시작하고 클라이언트를 다시 연결했는지 확인하십시오.
CRUSH 튜닝 가능 항목을 조정하는 가장 간단한 방법은 알려진 프로필로 변경하는 것입니다. 이는 다음과 같습니다.
-
legacy
: v0.47(pre-Argonaut) 이전의 레거시 동작입니다. -
Argonau
t: v0.48(Argonaut) 릴리스에서 지원하는 레거시 값입니다. -
Bobtail
: v0.56 (Bobtail) 릴리스에서 지원하는 값입니다. -
Firefly
: v0.80 (Firefly) 릴리스에서 지원하는 값입니다. -
Hammer
: v0.94 (Hammer) 릴리스에서 지원하는 값입니다. -
jewel
: v10.0.2 (Jewel) 릴리스에서 지원하는 값입니다. -
optimal
: 현재 최상의 값입니다. -
default
: 새 클러스터의 현재 기본값입니다.
명령을 사용하여 실행 중인 클러스터에서 프로필을 선택할 수 있습니다.
ceph osd crush tunables <profile>
# ceph osd crush tunables <profile>
이로 인해 일부 데이터 이동이 발생할 수 있습니다.
일반적으로 업그레이드 후 CRUSH 튜닝 가능 항목을 설정하거나 경고가 표시되면 설정해야 합니다. 버전 v0.74부터 CRUSH 튜닝 가능 항목이 최적의 값으로 설정되지 않은 경우 최적 값이 v0.73의 기본값으로 설정된 경우 Ceph에서 상태 경고를 발행합니다. 이 경고를 제거 하려면 다음 두 가지 옵션이 있습니다.
기존 클러스터에서 튜닝 가능 항목을 조정합니다. 이 경우 일부 데이터 이동(약 10 % 정도)이 발생합니다. 이는 기본 경로이지만 데이터 이동이 성능에 영향을 줄 수 있는 프로덕션 클러스터를 고려해야 합니다. 다음을 사용하여 최적의 튜닝 가능 항목을 활성화할 수 있습니다.
ceph osd crush tunables optimal
# ceph osd crush tunables optimal
Copy to Clipboard Copied! 작업이 제대로 작동하지 않고 너무 많은 진행 상황을 발생했거나 클라이언트 호환성 문제 (이전 커널 cephfs 또는 rbd 클라이언트 또는 pre-bobtail librados 클라이언트)가 있는 경우 이전 프로필로 다시 전환할 수 있습니다.
ceph osd crush tunables <profile>
# ceph osd crush tunables <profile>
Copy to Clipboard Copied! 예를 들어, pre-v0.48 (Argonaut) 값을 복원하려면 다음을 실행합니다.
ceph osd crush tunables legacy
# ceph osd crush tunables legacy
Copy to Clipboard Copied! ceph.conf
파일의[mon]
섹션에 다음 옵션을 추가하여 CRUSH를 변경하지 않고 경고를 제거할 수 있습니다.mon warn on legacy crush tunables = false
mon warn on legacy crush tunables = false
Copy to Clipboard Copied! 변경 사항을 적용하려면 모니터를 다시 시작하거나 다음을 사용하여 모니터를 실행하는 데 옵션을 적용합니다.
ceph tell mon.\* injectargs --no-mon-warn-on-legacy-crush-tunables
# ceph tell mon.\* injectargs --no-mon-warn-on-legacy-crush-tunables
Copy to Clipboard Copied!
2.8.2. CRUSH 튜닝, 어려운 방법
모든 클라이언트가 최근 코드를 실행 중인지 확인할 수 있는 경우 CRUSH 맵을 추출하고 값을 수정한 다음 클러스터에 다시 삽입하여 튜닝 가능 항목을 조정할 수 있습니다.
최신 CRUSH 맵을 추출합니다.
ceph osd getcrushmap -o /tmp/crush
ceph osd getcrushmap -o /tmp/crush
Copy to Clipboard Copied! 튜닝 가능 항목을 조정합니다. 이러한 값은 테스트한 대규모 및 소규모 클러스터 모두에 대해 최상의 동작을 제공하는 것으로 나타납니다. 이 작업이 작동하려면
--enable-unsafe-tunables
인수를crushtool
에 추가로 지정해야 합니다. 극단적인 주의로 이 옵션을 사용하십시오.crushtool -i /tmp/crush --set-choose-local-tries 0 --set-choose-local-fallback-tries 0 --set-choose-total-tries 50 -o /tmp/crush.new
crushtool -i /tmp/crush --set-choose-local-tries 0 --set-choose-local-fallback-tries 0 --set-choose-total-tries 50 -o /tmp/crush.new
Copy to Clipboard Copied! 수정된 맵 삽입:
ceph osd setcrushmap -i /tmp/crush.new
ceph osd setcrushmap -i /tmp/crush.new
Copy to Clipboard Copied!
2.8.3. 레거시 값
참조를 위해 CRUSH 튜닝 가능 항목의 레거시 값은 다음을 사용하여 설정할 수 있습니다.
crushtool -i /tmp/crush --set-choose-local-tries 2 --set-choose-local-fallback-tries 5 --set-choose-total-tries 19 --set-chooseleaf-descend-once 0 --set-chooseleaf-vary-r 0 -o /tmp/crush.legacy
crushtool -i /tmp/crush --set-choose-local-tries 2 --set-choose-local-fallback-tries 5 --set-choose-total-tries 19 --set-chooseleaf-descend-once 0 --set-chooseleaf-vary-r 0 -o /tmp/crush.legacy
다시 한번 특수 --enable-unsafe-tunables
옵션이 필요합니다. 또한 기능 비트가 완벽하게 적용되지 않으므로 레거시 값으로 되돌아간 후 이전 버전의 ceph-osd
데몬을 실행해야 합니다.