샤딩된 클러스터에서 범위 마이그레이션
이 페이지의 내용
대부분의 경우 자동 밸런서 가 샤드 간에 범위 를 마이그레이션 하도록 허용해야 합니다. 그러나 다음과 같은 경우에는 범위를 수동으로 마이그레이션 해야 할 수도 있습니다.
빈 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
명령을_secondaryThrottle
및writeConcern
필드와 함께 사용하면 밸런서가 마이그레이션 범위 내 다음 문서를 언제 진행하는지 결정합니다.moveRange
명령을secondaryThrottle
및writeConcern
필드와 함께 사용하면 밸런서가 마이그레이션 범위 내 다음 문서를 언제 진행하는지 결정합니다.
자세한 내용은 moveChunk
및 moveRange
를 참조하세요.
Change Streams 및 고아 문서
MongoDB 5.3부터는 범위 마이그레이션 중에 고아 문서의 업데이트에 대한 변경 스트림 이벤트가 생성되지 않습니다.