Docs Menu
Docs Home
/
MongoDB 매뉴얼
/

샤딩된 클러스터 밸런서

이 페이지의 내용

  • 클러스터 밸런서
  • 청크 마이그레이션 절차
  • Shard Size

MongoDB 밸런서 는 각 샤드 에 있는 청크 의 수를 모니터링하는 배경 프로세스 입니다. 특정 샤드 의 청크 수가 특정 마이그레이션 임계값 에 도달하면 밸런서 는 샤드 간에 청크를 자동으로 마이그레이션 하려고 시도하여 샤드 당 동일한 수에 도달하도록 시도합니다.

샤딩된 클러스터의 밸런싱 절차는 사용자와 애플리케이션 계층에 완전히 투명하게 공개되지만, 절차가 진행되는 동안 성능에 약간의 영향이 있을 수 있습니다.

세 개의 샤드에 분산된 컬렉션의 다이어그램입니다. 이 컬렉션의 경우 샤드 간의 청크 수 차이가 *마이그레이션 임계값*(이 경우 2)에 도달하여 마이그레이션을 트리거합니다.

밸런서는 구성 서버 복제본 세트(CSRS)의 기본 설정에서 실행됩니다.

밸런서 프로세스 는 모든 샤딩된 컬렉션 의 샤드에 샤딩된 컬렉션 의 청크를 균등하게 재분배하는 역할을 합니다. 기본값 밸런서 프로세스 는 항상 활성화되어 있습니다.

샤드 컬렉션의 청크 분포가 고르지 않은 문제를 해결하기 위해 밸런서는 청크가 많은 샤드에서 청크 수가 적은 샤드 로 청크를 마이그레이션합니다 . 밸런서는 샤드 전체에 컬렉션에 대한 청크가 고르게 분포될 때까지 청크를 마이그레이션합니다. 청크 마이그레이션에 대한 자세한 내용은 청크 마이그레이션 절차를 참조하세요.

소스 샤드는 기본적으로 마이그레이션된 문서를 자동으로 보관하므로 청크 마이그레이션은 디스크 공간에 영향을 미칠 수 있습니다. 자세한 내용은 moveChunk 디렉토리를 참조하세요.

청크 마이그레이션은 대역폭과 워크로드 측면에서 약간의 오버헤드를 수반하며, 이 두 가지 모두 데이터베이스 성능에 영향을 미칠 수 있습니다. [1] 밸런서 는 다음을 통해 영향을 최소화하려고 시도합니다.

  • 주어진 시간에 샤드를 최대 하나의 마이그레이션으로 제한합니다. 즉, 샤드는 동시에 여러 청크 마이그레이션에 참여할 수 없습니다. 샤드에서 여러 청크를 마이그레이션하기 위해 밸런서는 청크를 한 번에 하나씩 마이그레이션합니다.

    버전 3.4에서 변경됨: MongoDB 3.4 부터 시작됩니다. MongoDB can perform parallel chunk migrations. 샤드 가 한 번에 최대 하나의 마이그레이션 에 참여할 수 있다는 제한 사항을 관찰하면, n개의 샤드가 있는 샤드 샤딩된 클러스터 의 경우 MongoDB 는 최대 n/2 (반올림)(내림)의 동시 청크 마이그레이션을 수행할 수 있습니다.

    비동기 청크 마이그레이션 정리도 참조하세요.

  • 샤드 컬렉션에서 청크 수가 가장 많은 샤드와 청크 수가 가장 적은 샤드 간의 청크 수 차이가 마이그레이션 임계값 에 도달하는 경우 에만 밸런싱 라운드를 시작합니다.

유지 관리를 위해 밸런서 를 일시적으로 비활성화할 수 있지만, 밸런서 를 장기간 비활성화한 상태로 두면 클러스터 성능이 저하될 수 있습니다. 자세한 내용은 밸런서 비활성화를 참조하세요.

또한 밸런서가 실행되는 기간을 제한하여 프로덕션 트래픽에 영향을 주지 않도록 할 수 있습니다. 자세한 내용은 Schedule the Balancing Window를 참조하세요.

참고

밸런싱 기간의 사양은 구성 서버 복제본 세트의 주 시간대의 현지 시간대를 기준으로 합니다.

다음도 참조하세요.

[1] 샤드 컬렉션 작업은 컬렉션에 대해 구역 및 구역 범위 가 정의된 경우 비어 있거나 존재하지 않는 컬렉션 에 대해 초기 청크 생성 및 배포를 수행할 수 있습니다. 청크 의 초기 생성 및 배포를 통해 구역 샤딩 을 더 빠르게 설정 수 있습니다. 초기 배포 후에는 밸런서 가 평소대로 청크 배포를 관리합니다. MongoDB 는 복합 해시 인덱스 에서 컬렉션 샤딩 을 지원합니다. 복합 해시 샤드 키 를 사용하여 비어 있거나 존재하지 않는 컬렉션 을 샤딩 할 때 MongoDB 가 초기 청크 생성 및 배포를 수행하려면 추가 요구 사항 적용 . 예시 는 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요 . .

클러스터 에 샤드 를 추가하면 새 샤드 에 청크가 없기 때문에 불균형이 발생합니다. MongoDB 는 새 샤드 로 데이터를 즉시 마이그레이션하기 시작하지만 클러스터 가 밸런싱되기까지 다소 시간이 걸릴 수 있습니다. 클러스터 에 샤드 를 추가하는 방법에 대한 지침은 클러스터 에 샤드 추가 튜토리얼을 참조하세요.

클러스터에서 샤드를 제거하면 해당 샤드에 있는 청크가 클러스터 전체에 재분배되어야 하므로 비슷한 불균형이 발생합니다. MongoDB는 제거된 샤드를 즉시 비우기 시작하지만 클러스터가 밸런싱되기까지 다소 시간이 걸릴 수 있습니다. 이 프로세스 중에 제거된 샤드와 연결된 서버를 종료 하지 마세요 .

청크 분포가 균일하지 않은 클러스터에서 샤드를 제거하면 밸런서는 먼저 드레이닝 샤드에서 청크를 제거한 다음 나머지 불균등 청크 분포를 조정합니다.

클러스터에서 샤드 를 안전하게 제거하는 방법에 대한 지침 은 기존 샤드 클러스터 에서 샤드 제거 튜토리얼을 참조하세요.

다음도 참조하세요.

모든 청크 마이그레이션은 다음 절차를 따릅니다:

  1. 밸런서 프로세스는 moveChunk 명령을 소스 샤드로 보냅니다.

  2. 소스는 내부 moveChunk 명령으로 이동을 시작합니다. 마이그레이션 프로세스 중에 청크에 대한 작업은 소스 샤드로 라우팅됩니다. 소스 샤드는 청크에 대한 수신 쓰기 작업을 담당합니다.

  3. 대상 샤드는 대상에 존재하지 않는 소스에 필요한 모든 인덱스를 구축합니다.

  4. 대상 샤드는 청크의 문서를 요청하기 시작하고 데이터 사본을 수신하기 시작합니다. 청크 마이그레이션 및 복제도 참조하세요.

  5. 청크의 최종 문서를 수신한 후 대상 샤드는 마이그레이션 중에 발생한 마이그레이션된 문서에 대한 변경 사항이 있는지 확인하기 위해 동기화 프로세스를 시작합니다.

  6. 완전히 동기화되면 소스 샤드는 구성 데이터베이스 에 연결되고 청크의 새 위치로 클러스터 메타데이터를 업데이트합니다.

  7. 소스 샤드가 메타데이터 업데이트를 완료하고 청크에 열려 있는 커서가 없으면 소스 샤드가 문서 사본을 삭제합니다.

    참고

    밸런서 가 소스 샤드 에서 추가 청크 마이그레이션을 수행해야 하는 경우, 밸런서 는 현재 마이그레이션 프로세스 가 이 삭제 단계를 완료할 때까지 기다리지 않고 다음 청크 마이그레이션 을 시작할 수 있습니다. 비동기 청크 마이그레이션 정리를 참조하세요.

    다음도 참조하세요.

마이그레이션 프로세스는 일관성을 보장하고 밸런싱 중 청크의 가용성을 극대화합니다.

밸런싱이 클러스터에 미치는 영향을 최소화하기 위해 밸런서 는 샤드 컬렉션의 데이터 배포가 클러스터를 불균형하게 만드는 마이그레이션 임계값에 도달한 후에만 밸런싱을 시작합니다. 가장 많이 로드된 샤드의 청크 수가 샤드당 최적의 청크 수를 1 청크 이상 초과하면 컬렉션이 불균형해지고 밸런서 가 청크 마이그레이션을 시작합니다. 샤드당 최적의 청크 수는 샤드 컬렉션의 총 청크 수를 샤드 수로 나눈 값을 가장 가까운 정수로 반올림한 값입니다. 구역 이 있는 경우 MongoDB는 구역별로 최적의 청크 수를 계산합니다.

예를 들어, 사용자가 각각 20 청크가 있는 10 샤드 컬렉션에 새 샤드를 추가하는 경우 밸런서 는 데이터를 마이그레이션하지 않습니다. 각 샤드의 최적의 청크 수는 200 를 11 로 나눈 값 또는 18.18 이며, MongoDB는 이를 19 로 반올림합니다. 19 와 20 의 차이가 1 이므로 클러스터는 밸런싱되고 밸런서 는 어떤 청크도 새 샤드로 마이그레이션하지 않습니다.

다음도 참조하세요.

샤드에서 여러 청크를 마이그레이션하기 위해 밸런서는 청크를 한 번에 하나씩 마이그레이션합니다. 그러나 밸런서는 다음 청크 마이그레이션을 시작하기 전에 현재 마이그레이션의 삭제 단계가 완료될 때까지 기다리지 않습니다. 청크 마이그레이션 프로세스 및 삭제 단계는 청크 마이그레이션 을 참조하세요.

이러한 대기열 동작은 사전 분할 없이 초기 데이터 로드를 수행하거나 새 샤드를 추가할 때와 같이 클러스터의 불균형이 심한 경우 샤드가 청크를 더 빠르게 언로드할 수 있도록 합니다.

이 동작은 moveChunk 명령에도 영향을 미치므로 moveChunk 명령을 사용하는 마이그레이션 스크립트가 더 빠르게 진행될 수 있습니다.

경우에 따라 삭제 단계가 더 오래 지속될 수 있습니다. MongoDB 4.4 부터는 삭제 단계에서 페일오버 가 이벤트 청크 마이그레이션의 복원력이 향상됩니다. 이 단계에서 복제본 세트의 프라이머리 이 충돌하거나 다시 시작되는 경우에도 고아 문서가 정리됩니다.

밸런서의 설정으로 사용할 수 있는 _waitForDeletemoveChunk 명령은 현재 마이그레이션의 삭제 단계가 다음 청크 마이그레이션의 시작을 차단하도록 동작을 변경할 수 있습니다. _waitForDelete 는 일반적으로 내부 테스트 목적으로 사용됩니다. 자세한 내용 은 삭제 대기를 참조하세요.

참고

범위 삭제는 리소스 집약적인 작업으로, 클러스터 가 문서를 삭제할 때 상당한 캐시 및 I/O 스트레스를 초래할 수 있습니다.

클러스터 에 샤드를 추가하거나 여러 샤드에 샤딩된 컬렉션 을 초기 배포하는 경우와 같이 대량의 데이터를 이동하려는 경우에는 대신 컬렉션 을 리샤딩하는 것이 좋습니다. 리샤딩 작업에는 범위 정리가 필요하지 않으므로 클러스터 에 대한 스트레스가 훨씬 줄어듭니다.

자세한 내용은 컬렉션 리샤딩을 참조하세요.

버전 3.4에서 변경됨.

청크 마이그레이션 중에 _secondaryThrottle 값은 청크 내 다음 문서로 마이그레이션이 진행되는 시점을 결정합니다.

config.settings 컬렉션에서:

  • 밸런서의 _secondaryThrottle 설정이 쓰기 고려 (write concern)로 설정된 경우 범위 마이그레이션 중 이동된 각 문서는 다음 문서로 진행하기 전에 요청된 승인을 받아야 합니다.

  • _secondaryThrottle 설정이 설정되지 않은 경우 마이그레이션 프로세스는 보조 문서로의 복제를 기다리지 않고 대신 다음 문서를 계속 진행합니다.

밸런서의 _secondaryThrottle 파라미터를 업데이트하려면 예를 들어 보조 스로틀을 참조하세요.

_secondaryThrottle 설정과 관계없이 청크 마이그레이션의 특정 단계에는 다음과 같은 복제 정책이 있습니다.

  • MongoDB 는 config 서버를 청크 의 새 위치 로 업데이트하기 전에 소스 샤드 에서 마이그레이션되는 컬렉션 에 대한 모든 애플리케이션 읽기 및 쓰기를 잠시 일시 중지하고, 업데이트 후 애플리케이션 읽기 및 쓰기를 재개합니다. 청크 이동을 사용하려면 청크 이동을 구성 서버로 커밋하기 전과 후에 복제본 세트 구성원의 과반수가 모든 쓰기를 승인해야 합니다.

  • 발신 청크 마이그레이션 이 완료되고 정리가 발생하면 모든 쓰기가 대부분의 서버에 복제되어야 다른 발신 마이그레이션에서 추가 정리 또는 새로 들어오는 마이그레이션을 진행할 수 있습니다.

3} 컬렉션에서 _secondaryThrottle 설정을 config.settings 업데이트하려면 보조 스로틀의 예를 참조하세요.

청크의 문서 수가 구성된 청크 크기 를 평균 문서 크기로 나눈 결과의 1.3 배보다 크면 기본적으로 MongoDB는 청크를 이동할 수 없습니다. db.collection.stats() 에는 컬렉션의 평균 문서 크기를 나타내는 avgObjSize 필드가 포함되어 있습니다.

너무 커서 마이그레이션할 수 없는 청크의 경우 MongoDB 4.4 부터 시작합니다.

  • 새로운 밸런서 설정 attemptToBalanceJumboChunks 을 사용하면 청크에 점보 레이블이 지정되지 않은 한 밸런서가 이동하기에는 너무 큰 청크를 마이그레이션할 수 있습니다. 자세한 내용은 크기 제한을 초과하는 청크 밸런스 를 참조하세요.

  • moveChunk 명령은 너무 커서 이동할 수 없는 청크를 마이그레이션할 수 있도록 새로운 옵션 forceJumbo를 지정할 수 있습니다. 청크에는 점보라는 라벨이 붙을 수도 있고 그렇지 않을 수도 있습니다.

rangeDeleterBatchSizerangeDeleterBatchDelayMS 매개변수를 사용하여 범위 삭제가 성능에 미치는 영향을 조정할 수 있습니다. 예를 들면 다음과 같습니다.

  • 일괄 처리당 삭제되는 문서 수를 제한하려면 rangeDeleterBatchSize 32과 같은 작은 값으로 설정하면 됩니다.

  • 일괄 삭제 사이에 지연 시간을 추가하려면 현재 기본값인 20 밀리초보다 rangeDeleterBatchDelayMS 더 길게 설정하면 됩니다.

참고

If there are ongoing read operations or open cursors on the collection targeted for deletes, range deletion processes may not proceed.

기본적으로 MongoDB는 데이터 세트가 커짐에 따라 사용 가능한 모든 디스크 공간을 모든 샤드의 데이터로 채우려고 시도합니다. 클러스터가 항상 데이터 증가를 처리할 수 있는 용량을 확보하려면 디스크 사용량 및 기타 성능 지표를 모니터링하십시오.

샤드의 최대 크기를 설정하는 방법은 주어진 샤드의 최대 저장 공간 크기 변경 튜토리얼을 참조하세요.

돌아가기

범위 크기 수정