샤드 cluster에서 청크 마이그레이션
대부분의 경우 자동 밸런서 가 샤드 간에 청크 를 마이그레이션 하도록 해야 합니다. 그러나 다음과 같은 경우에는 청크를 수동으로 마이그레이션 해야 할 수도 있습니다.
빈 컬렉션을 사전 분할 할 때 청크를 수동으로 마이그레이션하여 샤드 전체에 균등하게 분산합니다. 제한된 상황에서 사전 분할을 사용하여 대량 데이터 수집을 지원합니다.
활성 클러스터의 밸런서가 밸런싱 기간 내에 청크를 분산할 수 없는 경우 청크를 수동으로 마이그레이션해야 합니다.
범위를 수동으로 마이그레이션 하려면 moveChunk
명령을 사용합니다.
자동 밸런서 가 샤드 간에 범위를 이동하는 방법에 대한 자세한 내용은 클러스터 밸런서를 참조하세요.
마이그레이션 조정에 대한 자세한 내용은 chunkMigrationConcurrency
를 참조하세요.
예시
단일 청크 마이그레이션
다음 예시 에서는 username
필드 가 myapp
데이터베이스 의 users
컬렉션 에 대한 샤드 키 이고 smith
값이 마이그레이션 할 청크 내에 존재한다고 가정합니다. mongosh
에서 다음 명령을 사용하여 청크 를 마이그레이션합니다.
db.adminCommand( { moveChunk : "myapp.users", find : {username : "smith"}, to : "mongodb-shard3.example.net" } )
이 명령은 샤드 키 값 "스미스"를 포함하는 청크를 mongodb-shard3.example.net
이라는 샤드 로 이동합니다. 이 명령은 마이그레이션이 완료될 때까지 차단됩니다.
팁
샤드 목록을 반환하려면 listShards
명령을 사용합니다.
예시
청크 균등 마이그레이션
myapp.users
컬렉션 의 청크를 균등하게 마이그레이션 하려면 각 접두사 청크 를 다음 샤드 에 배치하고 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]}) } }
사전 분할에 대한 소개 는 샤드 클러스터에서 청크 생성을 참조하세요.
moveChunk
명령에는 _secondaryThrottle
매개변수와 밸런서가 마이그레이션 청크의 다음 문서를 진행하는 시기를 결정하는 writeConcern
매개변수가 있습니다. 자세한 내용은 moveChunk
명령을 참조하세요.