임베디드 config 서버 에서 전용 config 서버 로 전환하려면 config 샤드의 데이터가 클러스터 의 나머지 샤드로 마이그레이션되었는지 확인해야 합니다. 이 절차에서는 데이터를 안전하게 마이그레이션 하고 전환을 완료하는 방법을 설명합니다.
이 작업에 대하여
이 절차를 수행하는 동안 컬렉션을 생성, 샤딩 또는 이동하면 중단이 발생하여 예기치 않은 결과가 발생할 수 있습니다.
이 절차를 사용하여 전체 클러스터 새 hardware 로 마이그레이션 하지 마세요.마이그레이션 하려면 자체 관리형 샤드 클러스터를 다른 하드웨어로 마이그레이션을 참조하세요.
청크 분포가 균일하지 않은 클러스터에서 샤드를 제거하면 밸런서는 먼저 드레이닝 샤드에서 청크를 제거한 다음 나머지 불균등 청크 분포를 조정합니다.
샤드 를 제거하면 열려 있는 변경 스트림 커서 가 닫힐 수 있으며, 닫힌 변경 스트림 커서 가 완전히 재개되지 않을 수 있습니다.
전환 프로세스 중에 클러스터 안전하게 다시 시작할 수 있습니다. 진행 중인 배출 프로세스 중에 클러스터 다시 시작하면 클러스터 구성 요소가 다시 시작된 후 자동으로 배출 계속됩니다. MongoDB 컬렉션 에 전환 상태를
config.shards기록합니다.
시작하기 전에
이 절차에서는
sh.moveCollection()메서드를 사용하여 구성 샤드 에서 컬렉션을 이동합니다. 이 절차를 시작하기 전에moveCollection고려 사항 및 요구 사항을 검토 명령 동작을 이해하세요.전용 config 서버 로 전환하려면 먼저 를 사용하여 클러스터의 인스턴스 중
mongos하나에mongosh연결합니다.
단계
밸런서 활성화되어 있는지 확인합니다.
구성 샤드 에서 데이터를 마이그레이션 하려면 밸런서 프로세스 활성화해야 합니다. 밸런서 상태 확인하려면 메서드를 sh.getBalancerState() 사용합니다.
sh.getBalancerState()
작업이 true 을 반환하면 밸런서 가 활성화된 것입니다.
작업이 false 을 반환하는 경우 밸런서 활성화를 참조하세요.
config 서버 가 샤드 역할을 하는지 확인합니다.
를 실행하여 구성 샤드 샤드 목록에 나타나는지 listShards 확인합니다.
db.adminCommand( { listShards: 1 } )
출력에서 shards._id 필드 샤드 이름이 포함됩니다. 구성 샤드 일반적으로 "config"의 _id 가 있습니다.
{ shards: [ { _id: 'config', ... }, ... ], ok: 1 ... }
구성 샤드 에서 샤딩된 데이터 마이그레이션을 시작합니다.
admin 데이터베이스 에서 명령을 실행 transitionToDedicatedConfigServer .
use admin db.adminCommand( { transitionToDedicatedConfigServer: 1 } )
구성 샤드 배출 상태 가 되고 밸런서 구성 샤드 에서 클러스터 의 나머지 샤드로 청크를 마이그레이션하기 시작합니다. 네트워크 용량 과 데이터 양에 따라 이 작업을 완료하는 데 몇 분에서 며칠까지 걸릴 수 있습니다.
샤딩되지 않은 컬렉션을 구성 샤드 밖으로 옮깁니다.
집계 단계를 사용하여 구성 샤드 에 여전히 상주하는 샤딩되지 않은 컬렉션을 식별합니다.$listClusterCatalog
use admin db.aggregate([ { $listClusterCatalog: { shards: true } }, { $match: { sharded: false, shards: "config", type: { $nin: ["timeseries", "view"] }, ns: { $not: { $regex: "^enxcol_\\..*(\\.esc|\\.ecc|\\.ecoc|\\.ecoc\\.compact)$" } }, $or: [ { ns: { $not: { $regex: "\\.system\\." } } }, { ns: { $regex: "\\.system\\.buckets\\." } } ], db: { $nin: ["config", "admin"] } } }, { $project: { _id: 0, ns: 1 } } ])
출력의 각 네임스페이스 에 대해 를 사용하여 sh.moveCollection() 샤딩되지 않은 컬렉션 구성 샤드 에서 수신자 샤드 로 이동합니다.
sh.moveCollection( "<database>.<collection>", "<ID of recipient shard>" )
구성 샤드 에 샤딩되지 않은 컬렉션이 남아 있지 않을 때까지 이 단계를 반복합니다.
config 샤드 사용하는 데이터베이스의 프라이머리 샤드 변경합니다.
admin 데이터베이스 db.printShardingStatus() 에서 를 실행 .
use admin db.printShardingStatus()
출력의 databases 섹션에서 각 데이터베이스의 primary 필드 확인합니다. 프라이머리 config 샤드 인 애플리케이션 데이터베이스(config 및 admin 이외의 데이터베이스)의 경우 프라이머리 샤드 다른 샤드 로 변경합니다.
데이터베이스의 프라이머리 샤드 변경하려면 를 실행 movePrimary.
db.adminCommand({ movePrimary: "<dbName>", to: "<recipientShard>" })
이전 단계에서 이동하지 않은 컬렉션은 가 실행되는 동안 movePrimary 사용할 수 없습니다.
전환 상태를 확인합니다.
전환 진행 상황을 확인하려면 데이터베이스 transitionToDedicatedConfigServer admin 에서 를 다시 실행합니다.
use admin db.adminCommand( { transitionToDedicatedConfigServer: 1 } )
전환이 성공적으로 완료될 때까지 상태를 계속 확인하고, 출력은 다음 예시 와 유사합니다.
{ state: 'completed', msg: 'removeshard completed successfully', shard: 'config', ok: 1 }
전용 config 서버 로 전환을 커밋합니다.
config 샤드 'completed'의 state 를 보고한 후 내장된 config 서버 에서 전용 config 서버 로의 전환을 커밋 .
use admin db.adminCommand( { commitTransitionToDedicatedConfigServer: 1 } )
커밋 성공적인 다음 출력이 반환됩니다.
{ ok: 1, '$clusterTime': { ... }, operationTime: ... }
성공적인 하면 MongoDB 클러스터 메타데이터 에서 config 샤드 제거하고 전용 config 서버 로의 전환을 마무리합니다. 구성 샤드 완전히 비워지지 않으면 명령이 실패하며 재시도하기 전에 { state: 'completed' } 의 전환 상태를 계속 확인해야 합니다.
전환이 커밋된 후에는 는 더 이상 샤드 목록에 config 샤드 포함하지 않습니다. 이제 클러스터 전용 config 서버 사용하며 config 서버 더 이상 애플리케이션 데이터를 샤드 로 저장하지listShards 않습니다.