문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

데이터베이스 덤프를 사용하여 분할된 클러스터 백업Back Up a Sharded Cluster with Database Dumps

mongodump 사용하여 샤드 cluster의 일관된 백업을 수행하려면 먼저 밸런서를 중지하고, 쓰기를 중지하고, cluster에서 모든 스키마 변환 작업을 중지해야 합니다. 이렇게 하면 백업 기간 동안 cluster가 일관된 상태로 유지됩니다.

MongoDB는 밸런서로 실행할 수 있는 백업 및 복원 작업을 제공하고 다음 서비스를 통해 트랜잭션을 실행합니다.

  • MongoDB Atlas

  • MongoDB Cloud Manager

  • MongoDB Ops Manager

이 작업은 mongodump 를 사용하여 샤드 클러스터를 백업합니다. 샤드 컬렉션에 데이터를 포함하는 클러스터가 실행 중인지 확인합니다.

이 절차를 수행하려면 mongos 에서 fsync 잠금을 지원하는 MongoDB 버전이 필요합니다.

MongoDB 7 부터 시작.0.2 ( 6.0.11 및 5.0.22 에서도 사용 가능) fsyncfsyncUnlock 명령을 mongos 에서 실행하여 잠금을 할 수 있습니다. 샤드 cluster를 잠금 해제합니다.

이러한 작업을 수행하려면 fsync 사용자에게 fsyncfsyncUnlock 명령을 실행할 수 있는 권한이 있어야 합니다.

샤드 클러스터의 자체 관리형 백업을 수행하려면 다음 단계를 완료하세요.

1

백업을 수행하기에 좋은 시간을 찾으려면 애플리케이션 및 데이터베이스 사용량을 모니터링하여 청크 마이그레이션, 리샤딩 및 스키마 변환 작업이 수행되지 않을 가능성이 높은 시간을 찾습니다. 이는 일관성 없는 백업을 유발할 수 있기 때문입니다.

자세한 내용 은 샤드 클러스터에 대한 백업 기간 예약을 참조하세요.

2

청크 마이그레이션으로 인해 백업이 중단되는 것을 방지하려면 mongos 에 연결하고 sh.stopBalancer() 메서드를 사용하여 밸런서를 중지합니다.

sh.stopBalancer()

밸런싱 라운드가 진행 중인 경우, 작업은 밸런싱이 완료될 때까지 대기합니다.

밸런서가 중지되었는지 확인하려면 sh.getBalancerState() 메서드를 사용합니다.

sh.getBalancerState()
false

밸런서가 중지되면 이 명령은 false 를 반환합니다.

3

데이터베이스를 쓰기로부터 보호하려면 백업 프로세스 중에 샤드 클러스터를 잠긴 상태로 유지해야 하며, 이로 인해 백업에 불일치가 발생할 수 있습니다.

샤드 클러스터를 잠그려면 mongos 에 연결하고 db.fsyncLock() 메서드를 사용합니다.

db.getSiblingDB("admin").fsyncLock()

잠금을 확인하려면 config 서버의 mongos 및 프라이머리 mongod 에서 다음 집계 파이프라인을 실행하고 모든 샤드가 잠겼는지 확인합니다.

db.getSiblingDB("admin").aggregate( [
{ $currentOp: { } },
{ $facet: {
"locked": [
{ $match: { $and: [
{ fsyncLock: { $exists: true } },
{ fsyncLock: true }
] } }],
"unlocked": [
{ $match: { fsyncLock: { $exists: false } } }
]
} },
{ $project: {
"fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] },
"fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] }
} }
] )
[ { fsyncLocked: true }, { fsyncUnlocked: false } ]
4

샤드 클러스터를 백업하려면 mongodump 를 사용하여 mongos 에 연결하고 백업을 수행합니다.

mongodump \
--host mongos.example.net \
--port 27017 \
--username user \
--password "passwd" \
--out /opt/backups/example-cluster-1
5

백업이 완료되면 클러스터의 잠금을 해제하여 쓰기를 재개할 수 있습니다.

클러스터의 잠금을 해제하려면 db.fsyncUnlock() 메서드를 사용합니다.

db.getSibling("admin").fsyncUnlock()

잠금 해제를 확인하려면 config 서버의 mongos 및 프라이머리 mongod 에서 다음 집계 파이프라인을 실행하고 모든 샤드가 잠금 해제되었는지 확인합니다.

db.getSiblingDB("admin").aggregate( [
{ $currentOp: { } },
{ $facet: {
"locked": [
{ $match: { $and: [
{ fsyncLock: { $exists: true } },
{ fsyncLock: true }
] } }],
"unlocked": [
{ $match: { fsyncLock: { $exists: false } } }
]
} },
{ $project: {
"fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] },
"fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] }
} }
] )
[ { fsyncLocked: false }, { fsyncUnlocked: true } ]
6

밸런서를 다시 시작하려면 sh.startBalancer() 메서드를 사용합니다.

sh.startBalancer()

밸런서가 실행 중인지 확인하려면 sh.getBalancerState() 메서드를 사용합니다.

sh.getBalancerState()
true

이 명령은 밸런서가 실행 중일 때 true 를 반환합니다.

mongorestore mongodump사용하여 백업에서 데이터베이스를 복원할 수 있습니다.

  • 샤드 클러스터를 복원하려면 에 mongorestore mongos대해 를 실행 .

  • 복제본 세트 또는 독립형 서버로 마이그레이션하려면 에 mongorestore mongod 대해를 실행합니다

자세한 내용 은 MongoDB 도구를 사용한 백업 및 복원을 참조하세요.

← 파일 시스템 스냅샷으로 샤드 클러스터 백업하기