데이터베이스 덤프를 사용하여 자체 관리형 샤딩된 클러스터 백업
MongoDB 7.1 부터 시작( 7.0.2 부터 사용 가능), 6.0.11 및 5.0.22), mongodump
를 사용하여 샤드 클러스터의 데이터를 백업할 수 있습니다.
이 작업에 대하여
mongodump
는 데이터베이스 콘텐츠의 바이너리 내보내기를 생성하는 유틸리티입니다. mongodump
유틸리티를 사용하여 샤드 클러스터의 자체 관리형 백업을 수행할 수 있습니다.
mongodump
를 사용하여 샤딩된 클러스터를 백업하려면 클러스터에서 밸런서, 쓰기, 스키마 변환 작업을 중지해야 합니다. 이렇게 하면 백업에서 불일치가 발생할 가능성을 줄이는 데 도움이 됩니다.
MongoDB는 다음 서비스를 통해 밸런서 및 실행 중인 트랜잭션과 함께 실행할 수 있는 백업 및 복원 작업을 제공합니다.
시작하기 전에
이 작업은 mongodump
를 사용하여 샤딩된 클러스터를 백업합니다. 샤딩된 클러스터에 데이터가 포함된 클러스터가 실행 중인지 확인합니다.
버전 호환성
이 절차를 수행하려면 mongos
에서 fsync 잠금을 지원하는 MongoDB 버전이 필요합니다.
MongoDB 5.0.22 부터는 fsync
및 fsyncUnlock
명령을 mongos
에서 실행하여 샤드 클러스터를 잠그고 잠금 해제할 수 있습니다.
관리자 권한
이 절차를 사용하려면 MongoDB 사용자에게 fsync
권한 부여가 있어야 하며, 이 권한 부여는 사용자 지정 역할을 통해 또는 기본 제공 hostManager
역할을 사용하여 사용할 수 있습니다.
이 권한 부여를 통해 fsync
및 fsyncUnlock
명령을 실행할 수 있습니다.
단계
샤드된 클러스터의 자체 관리형 백업을 수행하려면 다음 단계를 완료하세요.
밸런서 중지
청크 마이그레이션으로 인해 백업이 중단되는 것을 방지하려면 mongos
에 연결하고 sh.stopBalancer()
메서드를 사용하여 밸런서를 중지합니다.
sh.stopBalancer()
밸런싱 라운드가 진행 중이면 밸런싱이 완료될 때까지 작업이 대기합니다.
밸런서가 중지되었는지 확인하려면 sh.getBalancerState()
메서드를 사용하세요.
use config while( sh.isBalancerRunning().mode != "off" ) { print( "Waiting for Balancer to stop..." ); sleep( 1000 ); }
클러스터 잠금
데이터베이스를 쓰기로부터 보호하려면 백업 프로세스 중에 샤딩된 클러스터를 잠근 상태로 유지해야 하며 이로 인해 백업에 불일치가 발생할 수 있습니다.
샤딩된 클러스터를 잠그려면 mongos
에 연결하고 db.fsyncLock()
메서드를 사용합니다.
db.getSiblingDB("admin").fsyncLock()
잠금을 확인하려면 config 서버의 mongos
및 프라이머리 mongod
에서 다음 집계 파이프라인을 실행하고 모든 샤드가 잠겨 있는지 확인하세요.
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 }, { fsyncUnlocked: false } ]
백업하기
샤딩된 클러스터를 백업하려면 mongodump
를 사용하여 mongos
에 연결하고 백업을 수행합니다.
mongodump \ --host mongos.example.net \ --port 27017 \ --username user \ --password "passwd" \ --out /opt/backups/example-cluster-1
클러스터 잠금 해제
백업이 완료된 후 쓰기를 재개할 수 있도록 클러스터를 잠금 해제할 수 있습니다.
클러스터 잠금을 해제하려면 db.fsyncUnlock()
메서드를 사용합니다.
db.getSibling("admin").fsyncUnlock()
잠금 해제를 확인하려면 config 서버의 mongos
및 프라이머리 mongod
에서 다음 집계 파이프라인을 실행하고 모든 샤드가 잠금 해제되었는지 확인하세요.
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 }, { fsyncUnlocked: true } ]
밸런서 재시작
밸런서를 다시 시작하려면 sh.startBalancer()
메서드를 사용합니다.
sh.startBalancer()
밸런서가 실행 중인지 확인하려면 sh.getBalancerState()
메서드를 사용합니다.
sh.getBalancerState()
true
이 명령은 밸런서가 실행 중일 때 true
를 반환합니다.
다음 단계
mongorestore
를 사용하여 mongodump
백업에서 데이터베이스를 복원할 수 있습니다.
샤딩된 클러스터를 복원하려면
mongos
를 대상으로mongorestore
를 실행합니다.복제본 세트 또는 독립형 서버로 마이그레이션하려면
mongod
에mongorestore
를 실행합니다
중요
데이터베이스 를 샤딩된 클러스터 로 복원 하려면 을(를) 설정하다 하여 데이터베이스 를 제외 --nsExclude
해야 config
합니다.
mongorestore --nsExclude='config.*' /data/backup