이 튜토리얼에서는 샤딩된 클러스터 비샤드 복제본 세트 로 변환하는 방법을 설명합니다. 복제본 세트 샤딩된 클러스터 로 변환하려면 자체 관리 복제본 세트를 샤드 클러스터로 변환을 참조하세요. 샤딩된 클러스터에 대한 자세한 내용은 샤딩 문서를 참조하세요.
이 튜토리얼에서는 다음 작업을 안내합니다.
밸런서를 비활성화합니다.
클러스터를 복제본 세트로 변환합니다.
클러스터를 잠금 해제합니다(다중 샤드 클러스터에만 해당).
시작하기 전에
MongoDB 8.0 부터 directShardOperations 역할을 사용하여 샤드에 대해 직접 명령을 실행해야 하는 유지 관리 작업을 수행할 수 있습니다.
경고
directShardOperations 역할 사용하여 명령을 실행하면 클러스터 올바르게 작동하지 않고 데이터가 손상될 수 있습니다. directShardOperations 역할 유지 관리 목적으로만 사용하거나 MongoDB 지원 의 지침 에 따라 사용하세요. 유지 관리 작업 수행이 완료되면 directShardOperations 역할 사용을 중지합니다.
버전 호환성
이 튜토리얼의 단계에는 MongoDB 6.0 이상이 필요합니다.
권한 부여
fsync 및 fsyncUnlock 명령에는 권한 부여 fsync 조치 필요하며, 이는 역할 또는 사용자 지정 역할 통해 할당될 수 있습니다.hostManager
클러스터 변환 예약
청크 마이그레이션, 리샤딩 및 스키마 변환이 일반적으로 수행되지 않는 경우 클러스터 변환합니다.
샤드 클러스터로 되돌리기
MongoDB 8.3부터는 이전에 클러스터를 샤딩된 복제본 세트를 복제본 세트로 다시 변환할 수 없습니다.
샤딩된 클러스터 를 복제본 세트 로 변환하면 샤드 ID document 포함하여 이전 배포서버 의 샤딩 메타데이터 보존되어 다시 샤딩된 클러스터 되는 것을 차단합니다. 샤딩된 클러스터 로 자체 관리형 변환을 다시 시도하면 MongoDB 오류를 반환합니다.
이러한 복제본 세트를 샤딩된 클러스터로 변환하려면 기술 지원팀에문의 .
단계
샤드 하나만 있는 샤딩된 클러스터 의 경우, 해당 샤드 전체 데이터 세트 포함됩니다. 해당 클러스터 샤딩되지 않은 복제본 세트:로 변환하려면 다음을 수행합니다.
클러스터를 복제본 세트로 변환
모든
mongos인스턴스를 중지합니다.새 복제본 세트가 될 샤드의 복제본 세트 노드에 직접 연결하도록 애플리케이션을 재구성합니다.
복제본 세트 노드의 롤링 재시작을
mongod수행하여--shardsvr에서 옵션을 제거합니다.팁
--shardsvr옵션을 변경하면mongod의 수신 연결 포트가 변경됩니다.
단일 샤드 클러스터는 이제 데이터 세트에 대한 읽기 및 쓰기 작업을 허용하는 비샤딩된 복제본 세트 입니다. 필요에 따라 config 서버를 폐기할 수 있습니다.
다음 절차에 따라 샤드가 두 개 이상인 샤딩된 클러스터에서 완전히 새로운 복제본 세트로 전환할 수 있습니다.
밸런서 비활성화 및 클러스터 잠금
밸런서 비활성화하고 클러스터 락 .
밸런서 중지하려면 실행.
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 } ]
클러스터를 복제본 세트로 변환
샤딩된 클러스터 잠그고 밸런서 비활성화한 상태에서 샤딩된 클러스터에 새 복제본 세트 배포 . 복제본 세트 현재 샤드의 모든 데이터 파일을 결합한 상태로 저장할 수 있는 충분한 용량 있어야 합니다. 데이터 전송 이 완료될 때까지 새 복제본 세트 에 연결하도록 애플리케이션 구성하지 마세요.
애플리케이션을 재구성하거나 모든
mongos인스턴스를 중지합니다. 모든mongos인스턴스를 중지하면 애플리케이션이 데이터베이스에서 데이터를 읽을 수 없습니다. 모든mongos인스턴스를 중지하는 경우 데이터 마이그레이션 절차를 위해 애플리케이션이 액세스할 수 없는 임시mongos인스턴스를 시작합니다.mongodump 및 mongorestore를 사용하여
mongos인스턴스의 데이터를 새 복제본 세트로 마이그레이션합니다.mongorestore를 실행 때config데이터베이스 제외합니다. 이 예시 와 같이 옵션을--nsExclude사용합니다.mongorestore --nsExclude="config.*" <connection-string> /data/backup 참고
모든 데이터베이스의 모든 컬렉션이 반드시 샤드되는 것은 아닙니다. 샤드 된 컬렉션만 마이그레이션하지 않습니다. 데이터베이스와 컬렉션 모두가 올바르게 마이그레이션되는지 확인합니다.
mongos인스턴스 대신 샤딩되지 않은 복제본 세트를 사용하도록 애플리케이션을 다시 구성합니다.샤딩된 클러스터를 복제본 세트로 변환한 후 애플리케이션에서 사용하는 연결 문자열 복제본 세트의 연결 문자열로 업데이트합니다. 그런 다음 애플리케이션을 다시 시작합니다.
이제 애플리케이션은 샤딩되지 않은 복제본 세트 를 읽기 및 쓰기에 사용합니다. 사용하지 않는 나머지 샤드 클러스터 인프라를 폐기할 수 있습니다.
클러스터 잠금 해제
샤딩된 클러스터를 복제본 세트로 변환한 후 클러스터의 잠금을 해제합니다.
클러스터 잠금을 해제하고 데이터베이스 쓰기를 재개하려면 다음 실행.
db.getSiblingDB( "admin" ).fsyncUnlock() 잠금 해제를 확인하려면 실행.
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 } ]