문서 메뉴

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

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

이 페이지의 내용

  • 개요
  • 고려 사항
  • 단계

이 문서에서는 샤드 cluster 의 모든 구성 요소를 백업하는 절차를 설명합니다. 이 절차에서는 파일 시스템 스냅샷을 사용하여 mongod 인스턴스의 복사본을 캡처합니다.

중요

샤드 클러스터를 백업하려면 클러스터에 대한 모든 쓰기를 중지 해야 합니다.

MongoDB의 백업 및 특히 샤드 클러스터의 백업에 대한 자세한 내용은 MongoDB 백업 방법 및 샤드 클러스터 백업 및 복원을 참조하세요.

파일 시스템 스냅샷을 사용하여 백업을 수행하려면 먼저 밸런서를 중지하고, 쓰기를 중지하고, 클러스터에서 스키마 변환 작업을 중지해야 합니다.

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

  • MongoDB Atlas

  • MongoDB Cloud Manager

  • MongoDB Ops Manager

AES256-GCM 암호화 모드를 사용하는 암호화된 스토리지 엔진의 경우 AES256-GCM은 모든 프로세스가 키와 함께 고유한 카운터 블록 값을 사용하도록 요구합니다.

2} 암호로 구성된 암호화된 스토리지 엔진의 경우: AES256-GCM

  • 핫 백업에서 복원
    4.2부터 "hot" 백업을 통해 가져온 파일에서 복원하는 경우(즉, mongod가 실행 중일 때), MongoDB는 시작 시 "더티" 키를 감지하고 데이터베이스 키를 자동으로 롤오버하여 IV(초기화 벡터) 재사용을 방지할 수 있습니다.
  • 콜드 백업에서 복원

    그러나 "cold" 백업을 통해 가져온 파일에서 복원하는 경우(즉, mongod가 실행 중이 아닌 경우), MongoDB는 시작 시 "더티" 키를 감지할 수 없으며, IV를 재사용하면 기밀성 및 무결성 보증이 무효화됩니다.

    4.2부터 콜드 파일 시스템 스냅샷에서 복원한 후 키 재사용을 방지하기 위해 MongoDB는 새로운 명령줄 옵션 --eseDatabaseKeyRollover를 추가합니다. --eseDatabaseKeyRollover 옵션으로 시작하면 mongod 인스턴스는 AES256-GCM 암호로 구성된 데이터베이스 키를 롤오버하고 종료합니다.

  • 일반적으로 MongoDB Enterprise 4.2+에 파일 시스템 기반 백업을 사용하는 경우 가능하면 "핫" 백업 기능을 사용합니다.

  • MongoDB Enterprise 버전 4.0 이하에서 AES256-GCM 암호화 모드를 사용하는 경우, 데이터 파일의 복사본을 만들거나 파일 시스템 스냅샷("hot" 또는 "cold")에서 복원하지 말고 하지 마세요.

백업을 캡처하기 전에 밸런서 를 중지하는 것이 중요 합니다.

백업을 캡처하는 동안 밸런서가 활성화된 경우, 백업을 기록하는 동안 청크 가 마이그레이션될 수 있으므로 백업 아티팩트가 불완전하거나 중복 데이터가 있을 수 있습니다.

이 절차에서는 클러스터 밸런서를 중지하고 구성 데이터베이스 를 백업한 다음 파일 시스템 스냅샷 도구를 사용하여 클러스터의 각 샤드를 백업합니다. 시스템의 정확한 순간 스냅샷이 필요한 경우 파일 시스템 스냅샷을 만들기 전에 모든 쓰기를 중지해야 합니다. 그렇지 않으면 스냅샷이 대략적인 시점만 표시됩니다.

샤드 클러스터를 백업하려면 fsync 명령 또는 db.fsyncLock() 메서드를 사용하여 클러스터에서 쓰기를 중지해야 합니다. 이렇게 하면 백업 중에 데이터 파일이 변경되지 않습니다.

배포가 인스턴스 내에 RAID가 구성된 Amazon의 EBS(Elastic Block Storage)에 의존하는 경우, 플랫폼의 스냅샷 도구를 사용하여 모든 디스크에서 일관된 상태를 얻는 것은 불가능합니다. 대안으로 다음 중 하나를 수행할 수 있습니다.

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

MongoDB 5 부터 시작.0.22 fsyncfsyncUnlock 명령은 mongos 에서 실행되어 샤드 cluster를 잠금하고 잠금 해제할 수 있습니다.

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

1

청크 마이그레이션, 리샤딩 및 스키마 마이그레이션 작업으로 인해 백업에 불일치가 발생할 수 있습니다. 백업을 수행하기에 좋은 시간을 찾으려면 애플리케이션과 데이터베이스 사용량을 모니터링하고 이러한 작업이 발생할 가능성이 낮은 시간을 찾으세요.

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

2

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

sh.stopBalancer()

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

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

sh.getBalancerState()
false

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

3

데이터베이스에 쓰기를 수행하면 백업 불일치가 발생할 수 있습니다. 데이터베이스를 쓰기로부터 보호하기 위해 샤드 클러스터를 잠급니다.

샤드 클러스터를 잠그려면 db.fsyncLock() 메서드를 사용합니다.

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

config 서버의 mongos 와 프라이머리 mongod 모두에서 다음 집계 파이프라인을 실행합니다. 잠금을 확인하려면 fysncLocked 필드가 true 을 반환하고 fsyncUnlocked 필드가 false 를 반환하는지 확인합니다.

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

참고

config 서버 를 백업하면 샤드 클러스터의 메타데이터가 백업됩니다. 구성 서버는 모두 동일한 데이터를 보유하므로 하나의 구성 서버만 백업하면 됩니다. CSRS 프라이머리 멤버에 대해 이 단계를 수행합니다.

config 서버의 파일 시스템 스냅샷을 생성하려면 스냅샷 생성 절차를 따르세요.

6

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

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

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

config 서버의 mongos 와 프라이머리 mongod 모두에서 다음 집계 파이프라인을 실행합니다. 잠금 해제를 확인하려면 fysncLocked 필드가 false 을 반환하고 fsyncUnlocked 필드가 true 을 반환하는지 확인합니다.

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 } ]
7

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

sh.startBalancer()

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

sh.getBalancerState()
true

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

← 샤드 클러스터 백업 및 복원

이 페이지의 내용