AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

샤드 클러스터에서 샤드 제거

샤드 를 제거 하려면 샤드의 데이터가 클러스터 의 나머지 샤드로 마이그레이션되었는지 확인해야 합니다. 이 절차에서는 데이터를 안전하게 마이그레이션 하고 샤드 를 제거 하는 방법을 설명합니다.

  • 이 절차를 수행하는 동안 컬렉션을 생성, 샤딩 또는 이동하면 중단이 발생하여 예기치 않은 결과가 발생할 수 있습니다.

  • 이 절차를 사용하여 전체 클러스터 를 새 hardware 로 마이그레이션 하지 마세요. 마이그레이션하려면 자체 관리형 샤드 클러스터를 다른 하드웨어로마이그레이션 을 참조하세요.

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

  • 샤드 를 제거하면 열려 있는 변경 스트림 커서 가 닫힐 수 있으며, 닫힌 변경 스트림 커서 가 완전히 재개되지 않을 수 있습니다.

  • 샤드 제거 프로세스 중에 cluster를 안전하게 다시 시작할 수 있습니다. 진행 중인 배출 프로세스 중에 cluster를 다시 시작하면 cluster 구성 요소가 다시 시작된 후 자동으로 배출이 계속됩니다. MongoDB는 config.shards collection에 배출 상태를 기록합니다.

  1. 이 절차에서는 sh.moveCollection() 메서드를 사용하여 제거된 샤드 에서 컬렉션을 이동합니다. 이 절차를 시작하기 전에 moveCollection 고려 사항요구 사항 을 검토 하여 명령 동작을 이해하세요.

  2. 샤드 제거 하려면 먼저 를 사용하여 클러스터의 인스턴스 중 하나에 mongos mongosh연결합니다.

참고

여러 샤드를 제거할 때는 한 번에 하나씩 제거하지 말고 동시에 제거 . 한 번에 하나의 샤드 제거하면 밸런서 데이터를 나머지 샤드로 배출합니다. 샤드 한 번에 하나 청크 마이그레이션 에만 참여할 수 있으므로 샤드 하나를 제거하면 데이터 마이그레이션 처리량 제한됩니다.

1

샤드 에서 데이터를 마이그레이션 하려면 밸런서 프로세스 를 활성화해야 합니다. 밸런서 상태 를 확인하려면 sh.getBalancerState() 메서드를 사용합니다.

sh.getBalancerState()

작업이 true 을 반환하면 밸런서 가 활성화된 것입니다.

작업이 false 을 반환하는 경우 밸런서 활성화를 참조하세요.

2

샤드 의 이름을 찾으려면 listShards 명령을 실행 합니다.

db.adminCommand( { listShards: 1 } )

shards._id 필드 에는 샤드 이름이 포함됩니다.

3

startShardDraining 명령을 실행하여 샤딩된 컬렉션에서 클러스터의 다른 샤드로 청크 이동을 시작합니다.

db.adminCommand( { startShardDraining: "shard04" } )

여러 샤드를 제거 해야 하는 경우 배출 프로세스를 시작하여 병렬로 실행 수 있습니다.

4

mongos 에서 컬렉션 생성하고 shardCollection를 호출하지 않는 경우, 해당 컬렉션 샤딩되지 않은 상태로 유지되며 MongoDB 클러스터 의 특정 샤드 에 컬렉션 전체를 저장합니다. 샤드 프라이머리 로 사용하는 데이터베이스도 샤드 에 컬렉션을 저장 .

제거 하려는 샤드 에 샤딩되지 않은 컬렉션 이나 프라이머리 데이터베이스 포함된 경우 컬렉션 다른 샤드 로 이동해야 합니다.

제거 하려는 샤드 에 이러한 컬렉션 이 포함되어 있는지 확인하고 배출 상태를 확인하려면 shardDrainingStatus 명령을 실행 하고 collectionsToMove 출력 필드 의 배열 확인합니다.

db.adminCommand( { shardDrainingStatus: "shard04" } )
{
msg: "draining ongoing",
state: "ongoing",
remaining: {
chunks: Long(2),
dbs: Long(2),
jumboChunks: Long(0),
collectionsToMove: Long(2)
},
shard: "shard04",
note: "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
dbsToMove: [
"accounts",
],
collectionsToMove: [
"accounts.us-east",
"accounts.us-west",
"locations.us",
],
ok: 1,
operationTime: Timestamp(1575399086, 1655),
$clusterTime: {
clusterTime: Timestamp(1575399086, 1655),
signature: {
hash: BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="),
keyId: Long("6766255701040824328")
}
}
}

collectionsToMove 필드 에서 발견된 모든 컬렉션 은 이 샤드 에 저장된 컬렉션 입니다. 샤드 제거 하려면 먼저 이러한 컬렉션을 다른 샤드 로 이동해야 합니다.

컬렉션 다른 샤드로 이동하려면 moveCollection 명령을 사용합니다.

db.adminCommand( {
moveCollection: "accounts.us-east",
toShard: "shard05"
} )
5

샤드 클러스터는 데이터베이스 의 프라이머리 샤드 제공 할 특정 샤드 지정합니다. 제거 하려는 샤드 가 프라이머리 인 경우, 다른 샤드 로 이동해야 합니다.

프라이머리를 식별하려면 shardDrainingStatus 명령을 실행 하고 dbsToMove 출력 필드 의 배열 확인합니다.

db.adminCommand( { shardDrainingStatus: "shard04" } )
{
msg: "draining ongoing",
state: "ongoing",
remaining: {
chunks: Long(2),
dbs: Long(2),
jumboChunks: Long(0),
collectionsToMove: Long(2)
},
shard: "shard04",
note: "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
dbsToMove: [
"accounts",
],
collectionsToMove: [ ],
ok: 1,
operationTime: Timestamp(1575399086, 1655),
$clusterTime: {
clusterTime: Timestamp(1575399086, 1655),
signature: {
hash: BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="),
keyId: Long("6766255701040824328")
}
}
}

dbsToMove 필드 에 표시된 각 데이터베이스 는 다른 샤드 로 이동해야 하는 데이터베이스 입니다.

데이터베이스를 이동하려면 movePrimary 명령을 사용합니다.

db.adminCommand( {
movePrimary: "accounts",
to: "shard05"
})
6

샤드 제거 전에 배출 작업이 완료되었는지 확인합니다.

배출 작업의 상태를 확인하려면 shardDrainingStatus 명령을 실행 .

db.adminCommand( { shardDrainingStatus: "shard04" } )
{
"msg" : "draining completed successfully",
"state" : "drainingComplete",
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1771839836, 139),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1771839836, 139)
}

state 필드 제거 하려는 샤드 에 대해 drainingComplete 을 반환하면 배출 프로세스 완료된 것입니다. 이제 샤드 제거 할 수 있습니다.

샤드 제거 하려면 commitShardRemoval 명령을 실행 .

db.adminCommand( { commitShardRemoval: "shard04" } )
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1771840037, 12),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1771840037, 12)
}

샤드 완전히 비워지지 않으면 명령은 오류를 반환합니다.