mongodb shard chunk migration 500GB는 13 일이 걸립니다. 느리거나 정상입니까?


9

mongodb 샤드 클러스터가 있으며 샤드 키가 해시됩니다. 2 개의 샤드 복제본 세트가 있습니다. 각 복제본 세트에는 2 개의 시스템이 있습니다.

다른 2 개의 샤드 복제본 세트를 추가하여 실험을 수행 한 후 재조정을 시작합니다.

그러나 잠시 후 청크 마이그레이션이 느리다는 것을 알았습니다. 1.4GB의 데이터를 이동하는 데 1 시간이 걸립니다.

걱정이됩니다. 500GB 청크 마이그레이션을 완료하려면 13 일 동안 기다려야합니다!

나는이 물건에 익숙하지 않으며 느리거나 빠르거나 정상인지 신의 느낌이 없습니다. 그러나 여전히 그 숫자는 저를 설득하지 않습니다.

실험에 대한 추가 참고 사항 :-m3 medium AWS 시스템 사용-다른 프로세스 실행 없음, 청크 마이그레이션 만-추가 구성없이 기본 mongodb 샤딩 설치-shardkey가 객체 ID (_id)에서 해시를 사용함-최대 청크 크기 64MB

답변:


10

업데이트 : 2018 년 4 월

이 답변은 질문 당시에는 정확했지만 그 이후로 상황이 계속되었습니다. 버전 3.4 이후 병렬 처리가 도입되었으며 원래 참조한 티켓이 닫혔습니다. 자세한 내용은이 최신 답변 의 세부 정보 중 일부를 다루고 있습니다 . 나는 일반적인 문제 / 제약 조건에 대한 좋은 참고 자료로 남아 있으며 이전 버전의 모든 사람에게도 유효하기 때문에 나머지 대답은 그대로 둡니다.

원래 답변

관심 이 있으시 다면 M202 Advanced 코스 에서 청크 마이그레이션으로 인해 발생하는 일에 대해 자세히 설명합니다 . 일반적으로 빈 청크에서도 마이그레이션이 활성 시스템에서 작동하도록하기 위해 수행되는 하우스 키핑 때문에 마이그레이션이 매우 빠르지 않다고 가정 해 봅시다 (이것은 여전히 ​​밸런싱이 발생하더라도 발생합니다).

또한 전체 클러스터에서 한 번에 하나의 마이그레이션 만 발생하며 병렬 처리는 없습니다. 따라서 두 개의 "전체"노드와 두 개의 "빈"노드가 있다는 사실에도 불구하고, 주어진 시간에 최대 한 번의 마이그레이션이 발생합니다 (가장 큰 청크가있는 샤드와 가장 적은 샤드간에). 따라서 2 개의 샤드를 추가하면 속도 균형면에서 아무것도 얻지 못하고 이동 해야하는 청크 수가 증가합니다.

마이그레이션 자체의 경우 청크 크기는 ~ 30MiB (데이터를 채우는 방법에 따라 다르지만 일반적으로 기본 최대 청크 크기의 평균이 됨)입니다. db.collection.getShardDistribution()그 정보 중 일부를 실행 하고 청크에 대한 더 많은 정보를 얻는 방법에 대한 내 대답을 참조하십시오 .

진행중인 다른 활동이 없기 때문에 마이그레이션을 수행하려면 대상 샤드 (새로 추가 된 샤드 중 하나)가 소스 샤드 (원래 2 중 하나)에서 ~ 30MiB의 데이터를 읽고 구성 서버를 다음과 같이 업데이트해야합니다. 새로운 청크 위치가 완료되면 반영합니다. 30MiB의 데이터 이동은로드가없는 일반 시스템에서 병목 현상을 일으키지 않아야합니다.

속도가 느리면 여러 가지 이유가있을 수 있지만 사용 중이 아닌 시스템에 가장 일반적인 이유는 다음과 같습니다.

  • 소스 디스크 I / O-데이터를 읽을 때 데이터가 활성 메모리에 없으면 디스크에서 페이징되어야합니다.
  • 네트워크-대기 시간, 속도 제한, 패킷 손실 등이있는 경우 읽기에 시간이 오래 걸릴 수 있습니다
  • 대상 디스크 I / O-데이터 및 색인을 디스크에 기록해야하며 많은 색인으로 인해이 상황이 악화 될 수 있지만 일반적으로로드가 적은 시스템에서는 문제가되지 않습니다.
  • 마이그레이션 중단 및 마이그레이션 실패를 유발하는 마이그레이션 문제 (구성 서버 관련 문제, 기본 삭제 문제)
  • 복제 지연-복제 세트로의 마이그레이션, 쓰기 우려 w:2또는 w:majority기본적으로 사용되며이를 충족하려면 최신 보조가 필요합니다.

시스템이 메모리 경합 인 경우, 경합 경합은 일반적으로 여기에서도 의심됩니다.

마이그레이션에 걸리는 시간, 실패한 경우 등에 대한 자세한 정보를 얻으려면 다음 항목을 살펴보십시오 config.changelog.

// connect to mongos
use config
db.changelog.find()

당신이 보았 듯이, 내가 훈련 / 교육을 할 때 사람들에게 일반적으로 말했듯이, 4 개의 샤드가 필요하다는 것을 알고 있다면 일반적으로 증가하지 않고 4로 시작하는 것이 좋습니다. 그렇다면 샤드를 추가하는 데 오랜 시간이 걸릴 수 있으며 처음에는 이익이 아닌 자원에 대한 부정적인 영향을 미칩니다 ( 자세한 내용은 샤딩 함정 시리즈 II 참조 ).

마지막으로, 청크 마이그레이션의 병렬 처리를 개선하기 위해 기능 요청에 대한 추적 / 발표 / 코멘트를 작성하려면 SERVER-4355를 확인하십시오.


감사합니다. 이것은 mongodb 문서보다 훨씬 많은 청크 마이그레이션 메커니즘을 설명합니다.
rendybjunior

나는 당신의 과정에 확실히 참여할 것입니다. :) 이전에 언급 한 속도에 대해 어떻게 생각하십니까? 정상입니까 아니면 느립니까? 나는이 질문이 여러 측면에 근거하여 상대적이라는 것을 알고 있습니다. 그러나 나는 당신 자신의 의견을 요구합니다
rendybjunior

설명에 따라 조금 느리게 보이지만 중간 인스턴스를 벤치마킹해야합니다. 귀하의 현재 요율은 그들이 할 수있는 모든 것이거나 귀하가 답변에서 언급 한 문제 중 하나가있을 수 있습니다. 시도 할 수있는 컨트롤 중 하나는 수동 청크 이동입니다. 밸런서를 끄고 본질적으로 문제가 있는지 그리고 이동이 소스 / 대상 시스템에 미치는 영향을 확인하기 위해 직접 수행하십시오. moveChunk에 대한 자세한 내용은 여기를 참조하십시오. docs.mongodb.org/manual/reference/method/sh.moveChunk
Adam C

chunk mirgation은 mongoDB에서 우선 순위가 낮으며 고성능 시스템에서도 바쁘면 시간이 걸릴 수 있습니다.
Antonios

@Antonis-우선 순위의 의미를 모르는 경우, 청크 마이그레이션은 소스 샤드에서 읽은 읽기 (다른 읽기와 동일) 및 대상 샤드에 대한 쓰기 (앞서 언급 한 쓰기 관련 사항이 있음), 이러한 작업의 우선 순위는 없습니다 다른 사람 대. 사용량이 많은 시스템에서는 속도가 느리지 만 우선 순위의 차이로 인한 것이 아닙니다.
Adam C
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.