샤딩된 클러스터에서 범위 마이그레이션
이 페이지의 내용
대부분의 경우 자동 밸런서 가 샤드 간에 범위 를 마이그레이션하도록 허용해야 합니다. 그러나 다음과 같은 경우에는 범위를 수동으로 마이그레이션해야 할 수도 있습니다.
빈 collection을 사전 분할 하는 경우 범위를 수동으로 마이그레이션하여 샤드 전체에 균등하게 분산합니다. 제한된 상황에서 사전 분할을 사용하여 대량 데이터 수집을 지원합니다.
액티브 cluster의 밸런서가 밸런싱 기간 내에 범위를 분산할 수 없는 경우 범위를 수동으로 마이그레이션해야 합니다.
범위를 수동으로 마이그레이션하려면 moveChunk
또는 moveRange
명령을 사용합니다.
자동 밸런서가 샤드 간에 범위를 이동하는 방법에 대한 자세한 내용은 밸런서 내부 및 범위 마이그레이션을 참조하세요.
예시
단일 범위 마이그레이션
다음 예시에서는 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부터는 범위 마이그레이션 중에 고아 문서의 업데이트에 대한 변경 스트림 이벤트가 생성되지 않습니다.