문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

removeShard

이 페이지의 내용

  • 정의
  • 구문
  • 행동
  • 예제
removeShard

샤드 클러스터 에서 샤드를 제거합니다. removeShard 실행하면 MongoDB는 밸런서를 사용하여 샤드의 청크를 클러스터의 다른 샤드로 이동하여 샤드를 비웁니다. 샤드가 비워지면 MongoDB는 클러스터에서 샤드를 제거합니다.

명령은 다음과 같은 구문을 가집니다:

db.adminCommand(
{
removeShard : <shardToRemove>
}
)

샤드 제거 중에는 cluster 데이터를 백업할 수 없습니다.

진행 중인 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

전체 chunks 개수 중 점보인 숫자입니다.

jumboChunks 가 0보다 큰 경우 샤드에 jumboChunks 만 남을 때까지 기다립니다. 점보 청크만 남으면 배출이 완료되기 전에 점보 플래그를 수동으로 지워야 합니다. jumbo 플래그 지우기를 참조하세요.

jumbo 플래그를 지우면 밸런서가 이러한 청크를 마이그레이션할 수 있습니다. 마이그레이션 절차에 대한 자세한 내용은 범위 마이그레이션 절차를 참조하세요.

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")
}
}
}
← refineCollectionShardKey

이 페이지의 내용