Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

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

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

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

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

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)
}

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

돌아가기

샤드에 구성원 추가

이 페이지의 내용