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

샤드 클러스터에서 범위 마이그레이션

이 페이지의 내용

  • 스트림 및 고아 문서 변경

대부분의 경우 자동 밸런서 샤드 간에 범위 를 마이그레이션하도록 허용해야 합니다. 그러나 다음과 같은 경우에는 범위를 수동으로 마이그레이션해야 할 수도 있습니다.

  • 빈 collection을 사전 분할 하는 경우 범위를 수동으로 마이그레이션하여 샤드 전체에 균등하게 분산합니다. 제한된 상황에서 사전 분할을 사용하여 대량 데이터 수집을 지원합니다.

  • 액티브 cluster의 밸런서가 밸런싱 기간 내에 범위를 분산할 수 없는 경우 범위를 수동으로 마이그레이션해야 합니다.

범위를 수동으로 마이그레이션하려면 moveChunk 또는 moveRange 명령을 사용합니다.

자동 밸런서가 샤드 간에 범위를 이동하는 방법에 대한 자세한 내용은 밸런서 내부범위 마이그레이션을 참조하세요.

마이그레이션 조정에 대한 자세한 내용은 chunkMigrationConcurrency 를 참조하세요.

예제

단일 범위 마이그레이션

다음 예제에서는 username 필드가 myapp 데이터베이스의 users 컬렉션에 대한 샤드 키 이고 smith 값이 마이그레이션할 범위 내에 존재한다고 가정합니다. mongosh 에서 다음 명령을 사용하여 범위를 마이그레이션합니다.

db.adminCommand( { moveChunk : "myapp.users",
find : {username : "smith"},
to : "mongodb-shard3.example.net" } )

이 명령은 샤드 키 값 " Smith " 를 포함하는 범위를 이름이 mongodb-shard3.example.net샤드 로 이동합니다. 이 명령은 마이그레이션이 완료될 때까지 차단됩니다.

샤드 목록을 반환하려면 listShards 명령을 사용합니다.

예제

범위 균등 마이그레이션

myapp.users collection의 범위를 균등하게 마이그레이션하려면 각 접두사 범위를 다음 샤드에 배치하고 mongo shell에서 다음 명령을 실행합니다.

var shServer = [ "sh0.example.net", "sh1.example.net", "sh2.example.net", "sh3.example.net", "sh4.example.net" ];
for ( var x=97; x<97+26; x++ ){
for( var y=97; y<97+26; y+=6 ) {
var prefix = String.fromCharCode(x) + String.fromCharCode(y);
db.adminCommand({moveChunk : "myapp.users", find : {email : prefix}, to : shServer[(y-97)/6]})
}
}

사전 분할에 대한 소개 는 cluster에서 범위 생성을 참조하세요.

  • moveChunk 명령을 _secondaryThrottlewriteConcern 필드와 함께 사용하면 밸런서가 마이그레이션 범위 내 다음 문서를 언제 진행하는지 결정합니다.

  • moveRange 명령을 secondaryThrottlewriteConcern 필드와 함께 사용하면 밸런서가 마이그레이션 범위 내 다음 문서를 언제 진행하는지 결정합니다.

자세한 내용은 moveChunkmoveRange 를 참조하세요.

MongoDB 5.3부터는 범위 마이그레이션 중에 고아 문서의 업데이트에 대한 변경 스트림 이벤트가 생성되지 않습니다.

← 샤드 클러스터 밸런서 관리

이 페이지의 내용