
Droplet 스냅샷을 사용하여 MongoDB 백업 방법
2022-06-01 last update
14 minutes reading Ubuntu 16.04 DigitalOcean Solutions Backups MongoDB소개
정기적인 데이터베이스 백업은 의외의 데이터 분실 사건을 방지하는 관건적인 단계이다.일반적으로 파일 시스템 수준 (물리적 백업) 과 논리적 백업 등 두 가지 유형이 있습니다.파일 시스템 레벨 백업은 어느 시점에 하부 데이터 파일을 스냅샷하고 데이터베이스에서 스냅샷 파일에서 포착한 상태를 사용하여 깨끗한 자기 복구를 할 수 있도록 한다.논리적 백업은 도구(예:
mongodump
또는 pg_dump
를 사용하여 데이터베이스에서 백업 파일로 데이터를 내보낸 다음 적절한 복원 도구(예: mongorestore
또는 psql <
를 사용하여 백업 파일을 복원합니다.이 가이드에서는 실행 중인 MongoDB 설치에 대해 파일 시스템 수준의 백업을 수행하는 방법Droplet Snapshots을 보여 줍니다.또한 스냅샷 이미지에서 복구를 수행하는 방법에 대해 설명합니다.
참고: Digital Ocean 백업guide에서 설명한 바와 같이, Droplet 스냅샷을 사용할 때 성능에 영향을 미칠 수 있으며, 특히 고부하 데이터베이스에 영향을 미칠 수 있습니다.먼저 아날로그 부하가 있는 비생산 데이터베이스를 사용하여 이 과정이 생산 배치에서 유효한지 검증해야 합니다.
선결 조건
이 안내서를 사용하기 전에 다음 필수 단계를 완료했는지 확인하십시오.
dbpath
를 단일 볼륨에 매핑해야 합니다.액체에 다른 블록 스토리지 볼륨을 추가하지 않은 경우 이 지침을 따를 수 있습니다.Droplet에 로그인하여 MongoDB를 시작하고 실행하면 됩니다.
1단계 - MongoDB 설정 확인
우리는 우선 로그 기록이 활성화되었는지 확인해야 한다.
로그 기록은 MongoDB의 기능으로 로그 파일에 작업을 기록함으로써 데이터베이스가 고장났을 때 지속성을 제공합니다.MongoDB 로그에 대한 자세한 내용은 MongoDB Manual 을 참조하십시오.
위의 지침을 따르면 로깅이 기본적으로 활성화됩니다.이러한 상황을 확인하기 위해 MongoDB 구성 파일을 확인할 수 있습니다.
좋아하는 텍스트 편집기로 열기
/var/lib/mongodb
(예: nano:- nano /etc/mongod.conf
다음 블록이 표시됩니다./etc/mongod.형태
- # Where and how to store data.
- storage:
- dbPath: /var/lib/mongodb
- journal:
- enabled: true
- # engine:
- # mmapv1:
- # wiredTiger:
이것은 로깅이 활성화되었음을 나타냅니다.MongoDB 3.2+를 사용하는 경우 기본 스토리지 엔진은 WiredTiger(MMAPv1은 MongoDB의 원래 스토리지 엔진)입니다.이제 백업 및 복구 프로세스를 테스트하기 위해 가상 데이터를 삽입합니다.
2단계 - 테스트 데이터 삽입
만약 당신이 처음에 깨끗한 서버를 사용하기 시작했지만 아직 아무런 데이터가 없다면, 우리는 일부 예시 데이터를 가상 식당 집합에 삽입하여 시범을 보일 수 있습니다.데이터베이스에 집합과 문서가 저장되어 있다면 이 절차를 건너뛰십시오.
먼저 MongoDB 셸을 사용하여 실행 중인 데이터베이스에 연결합니다.
mongo
다음 Mongo 셸 프롬프트가 표시됩니다.MongoDB shell version: 3.2.19
connecting to: test
Server has startup warnings:
2018-02-16T02:40:13.071+0000 I CONTROL [initandlisten]
2018-02-16T02:40:13.071+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-02-16T02:40:13.071+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-02-16T02:40:13.071+0000 I CONTROL [initandlisten]
2018-02-16T02:40:13.071+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-02-16T02:40:13.071+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-02-16T02:40:13.071+0000 I CONTROL [initandlisten]
>
셸이 사용하는 기본 데이터베이스는 테스트 데이터베이스입니다.테스트 데이터베이스에 존재하는 집합을 보여 줍니다.
- show collections
우리는 아직 데이터베이스에 어떤 내용도 삽입하지 않았기 때문에 집합이 없고, 알림부호로 돌아가며, 출력이 없습니다.가상 레스토랑 컬렉션에 문서를 삽입하면 다음과 같이 컬렉션을 만들 수 있습니다.
- db.restaurants.insert({'name': 'Sammy's Pizzeria'})
다음 출력을 볼 수 있습니다.- WriteResult({ "nInserted" : 1 })
이것은 삽입 작업이 성공했음을 나타냅니다.식당 집합은 이전에 존재하지 않았기 때문에 동시에 만들어졌다.컬렉션을 다시 나열합니다.
show collections
이제 새로 만든 식당 시리즈를 볼 수 있습니다.restaurants
현재, 우리는 이미 데이터베이스에 몇 가지 예시 데이터를 저장하였으며, 지금은 백업을 진행할 수 있다.## 3단계 - 스냅샷 MongoDB 물방울
백업을 수행하려면 Digital OceanDroplet Snapshots을 사용합니다.물방울 스냅샷을 사용하면 스냅샷이 시작되는 시점에 물방울 이미지를 생성할 수 있습니다.그리고 이 그림을 새로운 액체로 복원할 수 있으며, 거기서 더 많은 복구 작업을 할 수 있다.
우리가 사용하는 것이 MongoDB 3.2 + (WiredTiger 및 로깅 사용) 인 것을 감안하면, 스냅샷이 발생할 때 파일 시스템에 대한 쓰기를 중단할 필요가 없습니다.이미지를 복구하고 데이터베이스를 시작하면 MongoDB는 체크포인트에서 자신을 복구하고 로그 파일에서 스냅샷이 발생하는 시점까지 작업을 다시 재생합니다.로깅 탐색에 관심이 있으시면 MongoDB Manual 에 문의하십시오.
스냅샷 프로세스를 시작하려면log in to your DigitalOcean account MongoDB Droplet으로 이동하여 사이드바에서 스냅샷 링크를 클릭합니다.
다음 프롬프트가 표시됩니다.

주의: 스냅샷을 찍기 전에 물방울의 전원을 끄는 것을 권장하지만, 생산 배치에서 항상 가능한 것은 아닐 수도 있습니다.MongoDB의 로그 기능은 데이터베이스와 Droplet이 실행될 때에도 일관되고 효과적인 스냅샷을 지원합니다.
스냅샷에 대한 설명 이름을 지정하고 [실시간 스냅샷 촬영] 버튼을 클릭하여 스냅샷 프로세스를 시작합니다.
다음 스냅샷 진행 표시기를 보십시오.

스냅샷이 완료되면 이미지에서 새 물방울을 생성하거나 실행 중인 물방울을 스냅샷 이미지에서 캡처한 상태로 복원할 수 있습니다.
이제 백업 프로세스를 복구하고 검증할 수 있습니다.
단계 4 - MongoDB 물방울 회복
현재, 우리는 새로운 액체를 만들 것이다. 이 액체는 방금 만든 이미지에서 회복될 것이다.MongoDB 데이터베이스에서 사용할 수 있는 데이터는 스냅샷을 찍을 때 사용할 수 있는 데이터와 같습니다.
사이드바를 사용하여 스냅샷을 다시 탐색하고 완료된 물방울 스냅샷을 찾습니다.

추가를 클릭하고 물방울 생성을 선택합니다.
스냅샷에서 새 물방울을 회전할 수 있는 물방울 만들기 메뉴로 이동합니다.
이전에 찍은 빠른 사진에 대응하는 이미지를 선택하십시오.이 예에서, 우리는mongo 백업 테스트 이미지를 사용할 것입니다.

복구 방울 구성을 완료하고 생성을 누르십시오.복구 방울이 시작되고 실행되면 로그인하십시오.
Droplet 부트 시 시작하도록 MongoDB를 구성한 경우 실행 중일 것입니다.
/etc/mongod.conf
를 사용하여 다음을 확인할 수 있습니다.- sudo systemctl status mongod
다음 출력을 볼 수 있습니다.Output● mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-02-14 21:14:40 UTC; 4min 53s ago
Docs: https://docs.mongodb.org/manual
Main PID: 1302 (mongod)
Tasks: 19
Memory: 87.2M
CPU: 1.802s
CGroup: /system.slice/mongod.service
└─1302 /usr/bin/mongod --quiet --config /etc/mongod.conf
모든 것이 정상임을 나타냅니다. MongoDB가 올바르게 시작되었습니다.MongoDB가 실행되지 않으면 잠금 파일을 삭제하고 서비스를 시작해야 합니다.
- rm /var/lib/mongodb/mongod.lock
- sudo systemctl start mongod
systemctl
를 사용하여 MongoDB가 제대로 시작되었는지 확인합니다.MongoDB가 시작되고 실행되면 자체 정리가 시작되고 스냅샷이 발생한 시점으로 상태가 복구됩니다.이것은 몇 분 걸릴 수도 있고,
systemctl status
셸은 이 작업을 끝내기 전에 사용할 수 없을 수도 있습니다.서버를 사용할 수 있으면
mongo
명령을 사용하여 로그인할 수 있습니다.- mongo
이제 몬고 셸 알림을 볼 수 있습니다.OutputMongoDB shell version: 3.2.19
connecting to: test
Server has startup warnings:
2018-02-14T21:14:41.923+0000 I CONTROL [initandlisten]
2018-02-14T21:14:41.923+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-02-14T21:14:41.923+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-02-14T21:14:41.923+0000 I CONTROL [initandlisten]
2018-02-14T21:14:41.923+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-02-14T21:14:41.923+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-02-14T21:14:41.923+0000 I CONTROL [initandlisten]
>
만약 네가 이 점을 해냈다면, 축하해!MongoDB 데이터베이스 백업 및 복원이 성공적으로 수행되었습니다.추가 예방 조치로서 우리는 수집의 완전성을 검사할 수 있다.
단계 5 - 데이터 무결성 확인
이 백업 데이터를 생산하기 전에 복원된 컬렉션에 잘못된 BSON 객체가 있는지 확인하는 것이 유용합니다.
주의:
mongo
명령은 매우 큰 집합에서 속도가 느릴 수 있습니다.또한 validate
명령이 되돌아오기 전에 집합의 모든 읽기와 쓰기를 막습니다.이 예에서, 우리는restaurants라는 집합을 가지고 있으며, 그 위에서
validate
명령을 실행하기를 희망합니다.mongo 셸에서 validate 명령을 실행합니다.
- db.restaurants.validate({full:true})
다음과 같은 출력을 볼 수 있습니다.- {
- "ns" : "test.restaurants",
- "nrecords" : 1,
- "nIndexes" : 1,
- "keysPerIndex" : {
- "test.restaurants.$_id_" : 1
- },
- "indexDetails" : {
- "test.restaurants.$_id_" : {
- "valid" : true
- }
- },
- "valid" : true,
- "errors" : [ ],
- "ok" : 1
- }
만약 validate
를 보신다면 집합의 모든 방면이 유효합니다. 생산에서 이 집합의 데이터를 안전하게 사용할 수 있습니다.결론
이 강좌에서는 실행 중인 MongoDB 데이터베이스 서버의 물리적 파일 시스템 레벨 백업을 어떻게 완성하는지 배웠습니다.
MongoDB 데이터베이스 백업 방법에 대한 자세한 내용은 MongoDB manual 을 참조하십시오.
Digital Ocean의 편리한 물방울 스냅 기능 때문에 이런 특수한 백업 기술이 가능해졌다.액체 스냅에 대한 자세한 내용은 Snapshot docs 을 참조하십시오.
또한 백업 기능을 사용하여 이러한 스냅샷을 자동으로 생성할 수 있습니다.액적 백업에 대한 자세한 내용은 Backups Introduction 을 참조하십시오.