자체 관리형 샤드 클러스터를 복제본 세트로 변환
이 튜토리얼에서는 샤딩된 클러스터 비샤드 복제본 세트 로 변환하는 방법을 설명합니다. 복제본 세트 샤딩된 클러스터 로 변환하려면 자체 관리 복제본 세트를 샤드 클러스터로 변환을 참조하세요. 샤딩된 클러스터에 대한 자세한 내용은 샤딩 문서를 참조하세요.
시작하기 전에
버전 호환성
이 튜토리얼의 단계에는 MongoDB 6.0 이상이 필요합니다.
권한 부여
fsync
및 fsyncUnlock
명령에는 권한 부여 fsync
조치 필요하며, 이는 역할 또는 사용자 지정 역할 통해 할당할 수 있습니다.hostManager
클러스터 변환 예약
청크 마이그레이션, 리샤딩 및 스키마 변환이 일반적으로 수행되지 않는 경우 클러스터 변환합니다.
밸런서 비활성화 및 클러스터 잠금
밸런서 비활성화하고 클러스터 락 .
밸런서 중지하려면 실행.
sh.stopBalancer() 밸런서 비활성화되었는지 확인하려면 다음 명령을 실행 하고 출력이
false
인지 확인합니다.sh.getBalancerState() 데이터베이스 쓰기를 방지하는 샤딩된 클러스터 락 실행.
db.getSiblingDB( "admin" ).fsyncLock() 락 확인하려면 실행.
db.getSiblingDB( "admin" ).aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } } ] } } ], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] ) 출력에
fsyncLocked
이(가)true
(이는 클러스터 가 잠겨 있음을 의미함)로 표시되는지 확인합니다.[ { fsyncLocked: true }, { fsyncUnlocked: false } ]
단일 샤드가 있는 클러스터를 복제본 세트로 변환하기
샤드가 하나뿐인 샤딩된 클러스터의 경우 해당 샤드에 전체 데이터 세트가 포함됩니다. 다음 절차를 사용하여 해당 클러스터를 샤딩되지 않은 복제본 세트로 변환합니다.
시스템이 새 복제본 세트가 될 단일 샤드를 호스팅하는 복제본 세트의 프라이머리 멤버에 연결하도록 애플리케이션을 재구성합니다.
mongod
에서--shardsvr
옵션을 제거합니다팁
--shardsvr
옵션을 변경하면mongod
의 수신 연결 포트가 변경됩니다.
단일 샤드 클러스터는 이제 데이터 세트에 읽기 및 쓰기 작업을 허용하는 비샤드형 복제본 세트 입니다.
샤딩된 클러스터를 복제본 세트로 변환
다음 절차에 따라 샤드가 두 개 이상인 샤딩된 클러스터에서 완전히 새로운 복제본 세트로 전환할 수 있습니다.
샤딩된 클러스터 잠그고 밸런서 비활성화한 상태에서 샤딩된클러스터 에 새 복제본 세트 배포 . 복제본 세트 현재 샤드의 모든 데이터 파일을 결합한 상태로 저장할 수 있는 충분한 용량 있어야 합니다. 데이터 전송 이 완료될 때까지 새 복제본 세트 에 연결하도록 애플리케이션 구성하지 마세요.
애플리케이션 재구성하거나 모든 인스턴스를
mongos
중지합니다. 모든 인스턴스를 중지하면 애플리케이션이 데이터베이스mongos
에서 읽을 수 없습니다. 모든 인스턴스를 중지하는mongos
mongos
경우, 애플리케이션이 데이터 마이그레이션 절차를 위해 액세스 할 수 없는 임시 인스턴스 시작합니다.mongodump 및 mongorestore를 사용하여
mongos
인스턴스의 데이터를 새 복제본 세트로 마이그레이션합니다.config
를 실행mongorestore
때 데이터베이스 제외합니다. 이 예시 와 같이 옵션을--nsExclude
사용합니다.mongorestore --nsExclude="config.*" <connection-string> /data/backup 참고
모든 데이터베이스의 모든 컬렉션이 반드시 샤드되는 것은 아닙니다. 샤드 된 컬렉션만 마이그레이션하지 않습니다. 데이터베이스와 컬렉션 모두가 올바르게 마이그레이션되는지 확인합니다.
mongos
인스턴스 대신 샤딩되지 않은 복제본 세트를 사용하도록 애플리케이션을 다시 구성합니다.샤딩된 클러스터를 복제본 세트로 변환한 후 애플리케이션에서 사용하는 연결 문자열 복제본 세트의 연결 문자열로 업데이트합니다. 그런 다음 애플리케이션을 다시 시작합니다.
이제 애플리케이션은 샤딩되지 않은 복제본 세트를 읽기 및 쓰기에 사용합니다. 사용하지 않는 나머지 샤드 클러스터 인프라를 폐기할 수 있습니다.
다음 단계
샤딩된 클러스터 복제본 세트 로 변환한 후 다음 단계를 수행하여 클러스터 잠금을 해제합니다.
클러스터 잠금을 해제하고 데이터베이스 쓰기를 재개하려면 다음 실행.
db.getSiblingDB( "admin" ).fsyncLock() 잠금 해제를 확인하려면 실행.
db.getSiblingDB("admin").aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } } ] } } ], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] ) 출력에
fsyncLocked
이(가)false
(이는 클러스터 의 잠금이 해제되었음을 의미함)로 표시되는지 확인합니다.[ { fsyncLocked: false }, { fsyncUnlocked: true } ]