2.8. CRUSH 튜닝 가능s

Ceph 프로젝트는 많은 변경 사항 및 많은 새로운 기능을 통해 기하급수적으로 증가했습니다. Ceph, v0.48(Argonaut)의 첫 번째 상용 지원 주요 릴리스부터 Ceph는 CRUSH 알고리즘의 특정 매개변수를 조정하는 기능을 제공합니다. 즉, 설정은 소스 코드에 고정되지 않습니다.

고려해야 할 몇 가지 중요한 사항:

  • CRUSH 값을 조정하면 스토리지 노드 간에 일부 PG가 변경될 수 있습니다. Ceph 클러스터가 이미 많은 데이터를 저장하고 있는 경우 일부 데이터를 이동할 수 있도록 준비합니다.
  • ceph-osdceph-mon 데몬은 업데이트된 맵을 수신하는 즉시 새로운 연결의 기능 비트를 필요로 합니다. 그러나 이미 연결된 클라이언트는 효과적으로 할 수 있으며 새 기능을 지원하지 않는 경우 잘못 설치될 것입니다. Ceph 클라이언트도 업데이트하는 Ceph Storage 클러스터 데몬을 업그레이드해야 합니다.
  • CRUSH 튜닝 가능 항목이 기존 값이 아닌 값으로 설정된 후 나중에 레거시 값으로 다시 변경되는 경우 기능을 지원하기 위해 ceph-osd 데몬이 필요하지 않습니다. 그러나 OSD 피어링 프로세스에서는 이전 맵을 검사하고 이해해야 합니다. 따라서 기존 기본값을 사용하여 최신 버전의 맵이 다시 전환되어도 클러스터에서 이전에 existing CRUSH 값을 사용한 경우 이전 버전의 ceph-osd 데몬을 실행하면 안 됩니다.

2.8.1. CRUSH 튜닝 가능 항목Keys

버전 0.48 이전의 Ceph 클라이언트 및 데몬은 튜닝 가능 항목을 탐지하지 않으며 버전 0.48 이상과 호환되지 않습니다. 튜닝 가능한 CRUSH 값을 조정하는 기능도 주요 Ceph 릴리스와 함께 개선되었습니다.

기존 값

CRUSH Tunables를 사용하여 최신 클러스터에 배포된 레거시 값은 잘못된 것일 수 있습니다. 문제는 다음과 같습니다.

  • 리프 버킷에 장치가 적은 Hierarchies에서 일부 PG는 원하는 복제본 수보다 적은 수에 매핑됩니다. 이는 일반적으로 각 노드 아래에 중첩된 OSD(1-3)의 작은 수가 있는 "호스트" 노드를 사용하는 계층에서 일반적으로 발생합니다.
  • 대규모 클러스터의 경우 PGs의 일부 작은 백분율이 원하는 OSD 수에 매핑됩니다. 이는 계층 구조의 여러 계층이 있는 경우 보다 우선합니다. 예를 들어, row, rack, host, osd입니다.
  • 일부 OSD가 표시된 경우 전체 계층 구조에서 데이터가 가까운 OSD에 재배포되는 경향이 있습니다.
중요

Red Hat은 CRUSH 튜닝 가능 항목을 활용하기 위해 Ceph 클라이언트와 Ceph 데몬을 모두 지원되는 주요 릴리스로 업그레이드하는 것이 좋습니다. 모든 클러스터 데몬 및 클라이언트가 동일한 릴리스 버전을 사용하는 것이 좋습니다.

Argonaut ( legacy)

이는 Ceph의 상업적으로 지원되는 첫 번째 릴리스입니다.

  • 버전 요구 사항:

    • Ceph 0.48, 0.49 이상
    • RBD 커널 클라이언트를 포함한 Linux 커널 3.6 이상
  • 지원되는 CRUSH Tunables:

    • choose_local_tries: 로컬 재시도 횟수입니다. 레거시 값은 2이고 최적 값은 0입니다.
    • choose_local_fallback_tries: legacy 값은 5입니다. 최적 값은 0입니다.
    • choose_total_tries: 항목을 선택하려는 시도의 총 수입니다. 레거시 값은 19이며 후속 테스트는 50의 값이 일반 클러스터에 더 적합한 것을 나타냅니다. 대규모 클러스터의 경우 더 큰 값이 필요할 수 있습니다.

서치 (Bettail)

  • 버전 요구 사항:

    • Ceph 0.55, 0.56.x 이상
    • RBD 커널 클라이언트를 포함한 Linux 커널 3.9 이상
  • 지원되는 CRUSH 튜닝 가능:

    • Selectleaf_descend_once: 재귀적인 선택리프트 시도에서 재시도하거나 한 번만 시도하며 원래 배치를 재시도할 수 있는지 여부입니다. 기존 기본값은 0이며 최적 값은 1입니다.

firefly

이는 Red Hat이 지원하는 첫 번째 Ceph 버전입니다.

  • 버전 요구 사항:

    • Red Hat Ceph Storage 1.2.3 이상
    • RBD 커널 클라이언트를 포함한 Red Hat Enterprise Linux 7.1 이상
  • 지원되는 CRUSH Tunables:

    • chooseleaf_vary_r: 재귀적인 선택리프트 시도에서 상위가 이미 수행 한 시도 횟수에 따라 0이 아닌 r 값으로 시작할지 여부입니다. 레거시 기본값은 0이지만 이 값이 CRUSH인 경우 매핑을 찾을 수 없는 경우가 있습니다. 컴퓨팅 비용 및 정확성 측면에서 최적의 값은 1입니다. 그러나 기존 데이터가 많이 있는 기존 클러스터의 경우 0에서 1로 변경되는 경우 많은 데이터가 이동하게 됩니다. 4 또는 5의 가치가 있으면 CRUSH가 유효한 매핑을 찾을 수 있지만 데이터 이동이 줄어듭니다.
    • straw_calc_version: 정지 버킷을 위해 CRUSH 맵에 계산되어 저장된 내부 가중치에 몇 가지 문제가 발생했습니다. 특히 CRUSH 가중치가 0 또는 둘 다 혼합된 경우 CRUSH가 데이터를 잘못 분산합니다. 즉, 가중치에 비례하지 않습니다. 값이 0이면 이전, 손상된 내부 가중치 계산이 유지됩니다. 1 값은 동작을 수정합니다. straw_calc_version 을 1로 설정한 다음, 항목을 추가, 제거, 다시 가중치를 다시 배치하거나 reweight-all 명령을 사용하여 straw 버킷을 조정하면 클러스터가 문제가 있는 조건 중 하나에 도달하면 중간 정도의 데이터 이동을 트리거할 수 있습니다. 이 튜닝 가능 옵션은 클라이언트 측의 필수 커널 버전에 전혀 영향을 미치지 않기 때문에 특별합니다.

Hammer

hammer 튜닝 가능 프로필은 튜닝 가능 프로필을 변경하여 기존 CRUSH 맵의 매핑에 영향을 미치지 않지만 새 버킷 유형인 straw2 가 지원됩니다.

  • 버전 요구 사항:

    • Red Hat Ceph Storage 1.3 이상
    • RBD 커널 클라이언트를 포함한 Red Hat Enterprise Linux 7.1 이상
  • 새로운 버킷 유형:

    • 새로운 straw2 버킷 유형은 원래 서랍 버킷의 몇 가지 제한 사항을 해결합니다. 특히, 이전 서랍 버킷은 가중치를 조정할 때 변경해야 하는 일부 매핑을 변경하는 반면 straw2 버킷은 가중치가 변경된 버킷 항목에 대한 매핑만 변경하는 원래의 목표를 달성할 수 있습니다. straw2 버킷은 새로 생성된 모든 버킷의 기본값입니다. 버킷 유형을 straw2에서 straw2로 변경하면 버킷 항목 가중치가 서로 다를 수 있습니다. 가중치가 모두 동일하지 않으면 데이터가 이동되지 않으며 항목 가중치가 크게 달라지면 더 많은 이동이 발생합니다.

jewel

Red Hat Ceph Storage 2는 Red Hat Enterprise Linux 7.2 이상에서 지원되지만 Jewel 튜닝 가능 프로필은 Red Hat Enterprise Linux 7.3 이상에서만 지원됩니다. jewel 튜닝 가능 항목은 CRUSH의 전반적인 동작을 향상시켜 OSD가 클러스터에서 부족할 때 매핑 변경 사항을 크게 줄입니다.

  • 버전 요구 사항:

    • Red Hat Ceph Storage 2 이상
    • RBD 커널 클라이언트 및 CephFS 커널 클라이언트를 포함한 Red Hat Enterprise Linux 7.3 이상
  • 지원되는 CRUSH 튜닝 가능:

    • chooseleaf_stable: 재귀적 선택리적 시도에서 내부 루프에 더 나은 값을 사용할지 여부에 따라 OSD가 표시될 때 매핑 변경 횟수를 크게 줄일 수 있습니다. legacy 값은 0이고 새 값 1은 새 접근 방식을 사용합니다. 기존 클러스터에서 이 값을 변경하면 거의 모든 PG 매핑이 변경될 수 있으므로 매우 많은 양의 데이터 이동이 발생합니다.

2.8.2. CRUSH 튜닝

CRUSH를 튜닝하기 전에 모든 Ceph 클라이언트 및 모든 Ceph 데몬이 동일한 버전을 사용하는지 확인해야 합니다. 최근에 업그레이드한 경우 데몬을 다시 시작하고 클라이언트를 다시 연결했는지 확인합니다.

CRUSH 튜닝 가능 항목을 조정하는 가장 간단한 방법은 알려진 프로필로 변경하는 것입니다. 다음은 다음과 같습니다.

  • legacy: v0.47 (이전-Argonaut)의 레거시 동작입니다.
  • Argonaut: v0.48 (Argonaut) 릴리스에서 지원하는 레거시 값입니다.
  • v0.56 (Bobtail) 릴리스에서 지원하는 값입니다.
  • firefly: v0.80 (Firefly) 릴리스에서 지원하는 값입니다.
  • Hammer: v0.94 (Hammer) 릴리스에서 지원하는 값입니다.
  • jewel: v10.0.2 (Jewel) 릴리스에서 지원하는 값입니다.
  • optimal: 현재 최적의 값입니다.
  • 기본값: 새 클러스터의 현재 기본값입니다.

명령을 사용하여 실행 중인 클러스터에서 프로필을 선택할 수 있습니다.

# ceph osd crush tunables <profile>
참고

이로 인해 일부 데이터 이동이 발생할 수 있습니다.

일반적으로 업그레이드 후 CRUSH 튜닝 가능 항목을 설정하거나 경고가 표시되면 설정해야 합니다. 버전 v0.74부터 CRUSH 튜닝 가능 항목이 최적 값으로 설정되지 않으면 Ceph에서 상태 경고를 발행합니다. 최적 값은 v0.73의 기본값입니다. 이 경고가 제거되도록 하려면 다음 두 가지 옵션이 있습니다.

  1. 기존 클러스터에서 튜닝 가능 항목을 조정합니다. 일부 데이터 이동 (약 10% 정도)이 발생할 수 있습니다. 이는 기본 경로이지만 데이터 이동이 성능에 영향을 미칠 수 있는 프로덕션 클러스터에 주의하여 수행해야 합니다. 다음을 사용하여 최적의 튜닝 가능 항목을 활성화할 수 있습니다.

    # ceph osd crush tunables optimal

    상황이 좋지 않은 경우(예: 너무 많은 로드가 이루어지지 않았거나 클라이언트 호환성 문제 (이전 커널 cephfs 또는 rbd 클라이언트 또는 이전 브라우저 클라이언트)가 있는 경우 이전 프로필로 다시 전환할 수 있습니다.

    # ceph osd crush tunables <profile>

    예를 들어, pre-v0.48(Argonaut) 값을 복원하려면 다음을 실행합니다.

    # ceph osd crush tunables legacy
  2. ceph.conf 파일의 [mon] 섹션에 다음 옵션을 추가하여 CRUSH를 변경하지 않고 경고가 사라질 수 있습니다.

    mon warn on legacy crush tunables = false

    변경 사항을 적용하려면 모니터를 다시 시작하거나 다음을 사용하여 모니터를 실행하는 옵션을 적용합니다.

    # ceph tell mon.\* injectargs --no-mon-warn-on-legacy-crush-tunables

2.8.3. CRUSH 튜닝, 하드 방법

모든 클라이언트가 최근 코드를 실행 중인지 확인할 수 있는 경우 CRUSH 맵을 추출하고 값을 수정하고 클러스터에 다시 삽입하여 튜닝 가능 항목을 조정할 수 있습니다.

  • 최신 CRUSH 맵을 추출합니다.

    ceph osd getcrushmap -o /tmp/crush
  • 튜닝 가능 항목을 조정합니다. 이러한 값은 테스트한 대규모 클러스터와 소규모 클러스터에 대해 최상의 동작을 제공하는 것으로 나타납니다. 이 작업이 작동하려면 crushtool--enable-unsafe-tunables 인수를 추가로 지정해야 합니다. 이 옵션을 극단적인 주의해서 사용하십시오.

    crushtool -i /tmp/crush --set-choose-local-tries 0 --set-choose-local-fallback-tries 0 --set-choose-total-tries 50 -o /tmp/crush.new
  • 수정된 맵을 다시 삽입합니다.

    ceph osd setcrushmap -i /tmp/crush.new

2.8.4. 기존 값

참조를 위해 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

다시 말해, 특수 --enable-unsafe-tunables 옵션이 필요합니다. 또한 위에 언급된 대로 기능 비트가 완벽하게 적용되지 않으므로 레거시 값으로 되돌리면 이전 버전의 ceph-osd 데몬을 주의 깊게 실행하십시오.