자체 관리형 샤드 클러스터를 복제본 세트로 변환
이 튜토리얼에서는 샤딩된 클러스터 비샤드 복제본 세트 로 변환하는 방법을 설명합니다. 복제본 세트 샤딩된 클러스터 로 변환하려면 자체 관리 복제본 세트를 샤드 클러스터로 변환을 참조하세요. 샤딩된 클러스터에 대한 자세한 내용은 샤딩 문서를 참조하세요.
시작하기 전에
MongoDB 8.0 부터 directShardOperations
역할을 사용하여 샤드에 대해 직접 명령을 실행해야 하는 유지 관리 작업을 수행할 수 있습니다.
경고
directShardOperations
역할 을 사용하여 명령을 실행하면 클러스터 가 올바르게 작동하지 않고 데이터가 손상될 수 있습니다. directShardOperations
역할 은 유지 관리 목적으로만 사용하거나 MongoDB 지원 의 지침 에 따라 사용하세요. 유지 관리 작업 수행이 완료되면 directShardOperations
역할 사용을 중지합니다.
버전 호환성
이 튜토리얼의 단계에는 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
인스턴스의 데이터를 새 복제본 세트로 마이그레이션합니다.mongorestore
를 실행 때config
데이터베이스 제외합니다. 이 예시 와 같이 옵션을--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 } ]