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

샤드 cluster에서 청크 마이그레이션

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

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

  • 활성 클러스터의 밸런서가 밸런싱 기간 내에 청크를 분산할 수 없는 경우 청크를 수동으로 마이그레이션해야 합니다.

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

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

마이그레이션 조정에 대한 자세한 내용은 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 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]})
}
}

사전 분할에 대한 소개 는 샤드 클러스터에서 청크 생성을 참조하세요.

moveChunk 명령에는 _secondaryThrottle 매개변수와 밸런서가 마이그레이션 청크의 다음 문서를 진행하는 시기를 결정하는 writeConcern 매개변수가 있습니다. 자세한 내용은 moveChunk 명령을 참조하세요.

경고

moveChunk 명령은 다음과 같은 오류 메시지를 생성할 수 있습니다.

The collection's metadata lock is already taken.

이는 클라이언트에 마이그레이션 중인 청크에 액세스하는 열린 커서 가 너무 많은 경우 발생합니다. 커서가 작업을 완료하거나 커서를 수동으로 닫을 때까지 기다릴 수 있습니다.

돌아가기

샤드 클러스터 밸런서 관리

다음

관리