removeShard
removeShard
샤드 클러스터 에서 샤드를 제거합니다.
removeShard
실행하면 MongoDB는 밸런서를 사용하여 샤드의 청크를 클러스터의 다른 샤드로 이동하여 샤드를 비웁니다. 샤드가 비워지면 MongoDB는 클러스터에서 샤드를 제거합니다.
구문
실행하려면 mongos
인스턴스에서 admin
데이터베이스에 대해 명령을 실행합니다.
db.adminCommand( { removeShard : <shardToRemove> } )
행동
샤드 제거 중 cluster 백업 없음
샤드 제거 중에는 cluster 데이터를 백업할 수 없습니다.
동시 removeShard
작업
진행 중인 removeShard
작업이 두 개 이상 있을 수 있습니다.
액세스 요구 사항
authorization
을(를) 활성화한 경우 clusterManager
역할 또는 removeShard
작업을 포함하는 역할이 있어야 합니다.
데이터베이스 마이그레이션 요구 사항
cluster의 각 데이터베이스에는 프라이머리 샤드가 있습니다. 제거하려는 샤드가 클러스터 데이터베이스 중 하나의 프라이머리 샤드이기도 한 경우, 샤드에서 모든 데이터를 마이그레이션한 후 데이터베이스를 수동으로 새 샤드로 이동해야 합니다. 자세한 내용은 movePrimary
명령 및 기존 샤드 cluster에서 샤드 제거 를 참조하세요.
청크 밸런싱
청크 분포가 균일하지 않은 클러스터에서 샤드를 제거하면 밸런서는 먼저 드레이닝 샤드에서 청크를 제거한 다음 나머지 불균등 청크 분포를 조정합니다.
쓰기 고려
mongos
는 removeShard
명령의 쓰기 고려 를 "majority"
로 변환합니다.
변경 스트림
샤드 제거로 인해 열려 있던 change stream 커서가 닫힐 수 있으며, 닫힌 change stream 커서는 완전히 재개되지 않을 수 있습니다.
예제
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
필드가 포함됩니다. 샤드에서 모든 청크를 제거한 후에는 데이터베이스에 대해 movePrimary
하거나 이러한 데이터베이스를 삭제해야 합니다.
참고
제거하려는 샤드가 데이터베이스의 프라이머리 샤드가 아닌 경우 dbsToMove
배열은 비어 있고 removeShard
는 개입 없이 마이그레이션을 완료할 수 있습니다.
명령을 다시 실행하면 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") } } }