removeShard
정의
removeShard
샤딩된 클러스터 에서 샤드 를 제거합니다.
removeShard
을(를) 실행 하면 MongoDB 는 밸런서 를 사용하여 샤드 의 청크를 클러스터 의 다른 샤드로 이동하여 샤드를 비웁니다. 샤드 가 비워지면 MongoDB 는 클러스터 에서 샤드 를 제거합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 M10+ 클러스터 또는 서버리스 인스턴스에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
명령은 다음과 같은 구문을 가집니다:
db.adminCommand( { removeShard : <shardToRemove> } )
행동
샤드 제거 중 cluster 백업 없음
샤드 제거 중에는 cluster 데이터를 백업할 수 없습니다.
동시 removeShard
작업
진행 중인 removeShard
작업이 두 개 이상 있을 수 있습니다.
액세스 요구 사항
authorization
을(를) 활성화한 경우 clusterManager
역할 또는 removeShard
작업을 포함하는 역할이 있어야 합니다.
데이터베이스 마이그레이션 요구 사항
샤드 샤딩된 클러스터 의 각 데이터베이스 에는 프라이머리 샤드 가 있습니다. 제거 하려는 샤드 가 클러스터 데이터베이스 중 하나의 프라이머리 이기도 한 경우, 샤드 에서 모든 데이터를 마이그레이션한 후 데이터베이스를 새 샤드 로 수동으로 이동해야 합니다. 자세한 내용은 movePrimary
명령 및 샤드 클러스터에서 샤드 제거 를 참조하세요.
청크 밸런싱
청크 분포가 균일하지 않은 클러스터에서 샤드를 제거하면 밸런서는 먼저 드레이닝 샤드에서 청크를 제거한 다음 나머지 불균등 청크 분포를 조정합니다.
쓰기 고려
mongos
는 removeShard
명령의 쓰기 고려 를 "majority"
로 변환합니다.
변경 스트림
샤드 를 제거하면 열려 있는 변경 스트림 커서 가 닫힐 수 있으며, 닫힌 변경 스트림 커서 가 완전히 재개되지 않을 수 있습니다.
DDL 작업
클러스터 가 DDL 작업(예: 컬렉션 을 수정하는 작업 reshardCollection
)을 실행하는 동안 removeShard
를 실행 하는 경우, removeShard
는 동시 DDL 작업이 완료된 후에만 실행됩니다.
예시
mongosh
에서 removeShard
작업은 다음과 유사합니다.
db.adminCommand( { removeShard : "bristol01" } )
bristol01
을 제거할 샤드의 이름으로 바꿉니다. removeShard
를 실행하면 다음과 유사한 메시지와 함께 명령이 반환됩니다.
{ "msg" : "draining started successfully", "state" : "started", "shard" : "bristol01", "note" : "you need to drop or movePrimary these databases", "dbsToMove" : [ "fizz", "buzz" ], "ok" : 1, "operationTime" : Timestamp(1575398919, 2), "$clusterTime" : { "clusterTime" : Timestamp(1575398919, 2), "signature" : { "hash" : BinData(0,"Oi68poWCFCA7b9kyhIcg+TzaGiA="), "keyId" : NumberLong("6766255701040824328") } } }
밸런서는 bristol01
이라는 이름의 샤드의 청크를 cluster의 다른 샤드로 마이그레이션("배출")하기 시작합니다. 이러한 마이그레이션은 cluster에 과도한 부하를 주지 않기 위해 느리게 수행됩니다.
출력에는 bristol01
이 프라이머리 샤드 인 데이터베이스를 나타내는 dbsToMove
필드 가 포함됩니다. 밸런서 가 모든 청크를 이동한 후 그리고 모든 컬렉션이 moveCollection
만큼 이동한 후에는 데이터베이스 에 대해 movePrimary
해야 합니다.
명령을 다시 실행하면 removeShard
가 프로세스의 현재 상태를 반환합니다. 예를 들어 작업이 ongoing
상태인 경우 명령은 다음과 유사한 출력을 반환합니다.
{ "msg" : "draining ongoing", "state" : "ongoing", "remaining" : { "chunks" : NumberLong(2), "dbs" : NumberLong(2), "jumboChunks" : NumberLong(0) }, "note" : "you need to drop or movePrimary these databases", "dbsToMove" : [ "fizz", "buzz" ], "ok" : 1, "operationTime" : Timestamp(1575399086, 1655), "$clusterTime" : { "clusterTime" : Timestamp(1575399086, 1655), "signature" : { "hash" : BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="), "keyId" : NumberLong("6766255701040824328") } } }
출력에서 remaining
필드에는 다음 필드가 포함됩니다.
필드 | 설명 |
---|---|
chunks | 현재 샤드에 남아 있는 청크의 총 개수입니다. |
dbs | 프라이머리 샤드가 샤드인 데이터베이스의 총 개수입니다. 이러한 데이터베이스는 dbsToMove 출력 필드에 지정되어 있습니다. |
jumboChunks | 전체
|
removeShard
명령의 상태를 계속 확인합니다(예: 남아 있는 청크 수가 0
가 될 때까지 명령을 다시 실행합니다.
{ "msg" : "draining ongoing", "state" : "ongoing", "remaining" : { "chunks" : NumberLong(0), // All chunks have moved "dbs" : NumberLong(2), "jumboChunks" : NumberLong(0) }, "note" : "you need to drop or movePrimary these databases", "dbsToMove" : [ "fizz", "buzz" ], "ok" : 1, "operationTime" : Timestamp(1575400343, 1), "$clusterTime" : { "clusterTime" : Timestamp(1575400343, 1), "signature" : { "hash" : BinData(0,"9plu5B/hw4uWAgEmjjBP3syw1Zk="), "keyId" : NumberLong("6766255701040824328") } } }
샤드에서 모든 청크를 제거한 후 dbsToMove
이 있는 경우 해당 데이터베이스에 대해 movePrimary
을 수행하거나 데이터베이스를 삭제(관련 데이터 파일 삭제)할 수 있습니다.
밸런서가 샤드에서 모든 청크 이동을 완료하고 dbsToMove
처리를 완료하면 removeShard
작업을 완료할 수 있습니다. removeShard
를 다시 실행하면 다음과 유사한 출력이 반환됩니다.
{ "msg" : "removeshard completed successfully", "state" : "completed", "shard" : "bristol01", "ok" : 1, "operationTime" : Timestamp(1575400370, 2), "$clusterTime" : { "clusterTime" : Timestamp(1575400370, 2), "signature" : { "hash" : BinData(0,"JjSRciHECXDBXo0e5nJv9mdRG8M="), "keyId" : NumberLong("6766255701040824328") } } }