임베디드 config 서버 에서 전용 config 서버 로 전환하려면 config 샤드의 데이터가 클러스터 의 나머지 샤드로 마이그레이션되었는지 확인해야 합니다. 이 절차에서는 데이터를 안전하게 마이그레이션 하고 전환을 완료하는 방법을 설명합니다.
이 작업에 대하여
이 절차를 수행하는 동안 컬렉션을 생성, 샤딩 또는 이동하면 중단이 발생하여 예기치 않은 결과가 발생할 수 있습니다.
이 절차를 사용하여 전체 클러스터 를 새 hardware 로 마이그레이션 하지 마세요. 마이그레이션하려면 자체 관리형 샤드 클러스터를 다른 하드웨어로마이그레이션 을 참조하세요.
청크 분포가 균일하지 않은 클러스터에서 샤드를 제거하면 밸런서는 먼저 드레이닝 샤드에서 청크를 제거한 다음 나머지 불균등 청크 분포를 조정합니다.
샤드 를 제거하면 열려 있는 변경 스트림 커서 가 닫힐 수 있으며, 닫힌 변경 스트림 커서 가 완전히 재개되지 않을 수 있습니다.
전환 프로세스 중에 클러스터 안전하게 다시 시작할 수 있습니다. 진행 중인 배출 프로세스 중에 클러스터 다시 시작하면 클러스터 구성 요소가 다시 시작된 후 자동으로 배출 계속됩니다. MongoDB
config.shards컬렉션에 전환 상태를 기록합니다.
시작하기 전에
이 절차에서는
sh.moveCollection()메서드를 사용하여 구성 샤드 에서 컬렉션을 이동합니다. 이 절차를 시작하기 전에moveCollection고려 사항 및 요구 사항 을 검토하여 명령 동작을 이해하세요.전용 config 서버 로 전환하려면 먼저 를 사용하여 클러스터의 인스턴스 중 하나에
mongosmongosh연결합니다.
단계
밸런서 활성화되어 있는지 확인합니다.
구성 샤드에서 데이터를 마이그레이션 하려면 밸런서 프로세스를 활성화해야 합니다. 밸런서 상태 확인하려면 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 가 실행되는 동안 사용할 수 없습니다.
전환 상태를 확인합니다.
전환 진행 상황을 확인하려면 admin 데이터베이스에서 transitionToDedicatedConfigServer 를 다시 실행합니다.
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' } 의 전환 상태를 계속 확인해야 합니다.
전환이 커밋된 후에는 listShards 는 더 이상 샤드 목록에 config 샤드 포함하지 않습니다. 이제 클러스터 전용 config 서버 사용하며 config 서버 더 이상 애플리케이션 데이터를 샤드 로 저장하지 않습니다.