Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / /

데이터베이스 덤프를 사용하여 자체 관리형 샤딩된 클러스터 백업

이 페이지의 내용

  • 이 작업에 대하여
  • 시작하기 전에
  • 단계
  • 다음 단계

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 부터는 fsyncfsyncUnlock 명령을 mongos 에서 실행하여 샤드 클러스터를 잠그고 잠금 해제할 수 있습니다.

이 절차를 사용하려면 MongoDB 사용자에게 fsync 권한 부여가 있어야 하며, 이 권한 부여는 사용자 지정 역할을 통해 또는 기본 제공 hostManager 역할을 사용하여 사용할 수 있습니다.

이 권한 부여를 통해 fsyncfsyncUnlock 명령을 실행할 수 있습니다.

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

1

백업을 수행하기 좋은 시기를 찾으려면 애플리케이션과 데이터베이스 사용량을 모니터링하여 청크 마이그레이션, 리하드닝, 스키마 변환 작업이 발생하지 않을 것 같은 시기를 찾으세요.

참고

이러한 단계는 정확히 따르고 시작할 때 진행 중인 작업이 없는 경우에만 일관된 백업을 생성할 수 있습니다.

자세한 내용 은 자체 관리형 샤드 클러스터의 백업 기간 예약을 참조하세요.

2

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

sh.stopBalancer()

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

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

use config
while( sh.isBalancerRunning().mode != "off" ) {
print( "Waiting for Balancer to stop..." );
sleep( 1000 );
}
3

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

샤딩된 클러스터를 잠그려면 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 } ]
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 } }
] } }],
"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 백업에서 데이터베이스를 복원할 수 있습니다.

  • 샤딩된 클러스터를 복원하려면 mongos를 대상으로 mongorestore를 실행합니다.

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

중요

데이터베이스 를 샤딩된 클러스터 로 복원 하려면 을(를) 설정하다 하여 데이터베이스 를 제외 --nsExclude 해야 config 합니다.

mongorestore --nsExclude='config.*' /data/backup

자세한 내용 은 MongoDB 도구를 사용하여 자체 관리형 배포서버 백업 및 복원을 참조하세요.

돌아가기

스냅샷 사용