Droplet 스냅샷을 사용하여 MongoDB 백업 방법

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 스냅샷을 사용할 때 성능에 영향을 미칠 수 있으며, 특히 고부하 데이터베이스에 영향을 미칠 수 있습니다.먼저 아날로그 부하가 있는 비생산 데이터베이스를 사용하여 이 과정이 생산 배치에서 유효한지 검증해야 합니다.

선결 조건


이 안내서를 사용하기 전에 다음 필수 단계를 완료했는지 확인하십시오.
  • Ubuntu 16.04 마이크로 방울, sudo 권한을 가진 비root 사용자, 예를 들어Initial Server Setup with Ubuntu 16.04
  • MongoDB 설치 및 구성, 상세 정보How to Install MongoDB on Ubuntu 16.04
  • 이 설명서는 MongoDB 3.2 이상의 버전을 설치한 경우 기본 WiredTiger 스토리지 엔진을 사용하고 로깅을 활성화합니다.또한 이 안내서를 사용하려면 디렉터리(기본적으로 데이터 파일이 포함된 디렉터리dbpath를 단일 볼륨에 매핑해야 합니다.액체에 다른 블록 스토리지 볼륨을 추가하지 않은 경우 이 지침을 따를 수 있습니다.
    Droplet에 로그인하여 MongoDB를 시작하고 실행하면 됩니다.

    1단계 - MongoDB 설정 확인


    우리는 우선 로그 기록이 활성화되었는지 확인해야 한다.
    로그 기록은 MongoDB의 기능으로 로그 파일에 작업을 기록함으로써 데이터베이스가 고장났을 때 지속성을 제공합니다.MongoDB 로그에 대한 자세한 내용은 MongoDB Manual 을 참조하십시오.
    위의 지침을 따르면 로깅이 기본적으로 활성화됩니다.이러한 상황을 확인하기 위해 MongoDB 구성 파일을 확인할 수 있습니다.
    좋아하는 텍스트 편집기로 열기 /var/lib/mongodb (예: nano:
    1. nano /etc/mongod.conf
    다음 블록이 표시됩니다.
    /etc/mongod.형태
    1. # Where and how to store data.
    2. storage:
    3. dbPath: /var/lib/mongodb
    4. journal:
    5. enabled: true
    6. # engine:
    7. # mmapv1:
    8. # 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]
    >
    
    셸이 사용하는 기본 데이터베이스는 테스트 데이터베이스입니다.
    테스트 데이터베이스에 존재하는 집합을 보여 줍니다.
    1. show collections
    우리는 아직 데이터베이스에 어떤 내용도 삽입하지 않았기 때문에 집합이 없고, 알림부호로 돌아가며, 출력이 없습니다.
    가상 레스토랑 컬렉션에 문서를 삽입하면 다음과 같이 컬렉션을 만들 수 있습니다.
    1. db.restaurants.insert({'name': 'Sammy's Pizzeria'})
    다음 출력을 볼 수 있습니다.
    1. 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를 사용하여 다음을 확인할 수 있습니다.
    1. 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가 실행되지 않으면 잠금 파일을 삭제하고 서비스를 시작해야 합니다.
    1. rm /var/lib/mongodb/mongod.lock
    2. sudo systemctl start mongod
    systemctl를 사용하여 MongoDB가 제대로 시작되었는지 확인합니다.
    MongoDB가 시작되고 실행되면 자체 정리가 시작되고 스냅샷이 발생한 시점으로 상태가 복구됩니다.이것은 몇 분 걸릴 수도 있고, systemctl status 셸은 이 작업을 끝내기 전에 사용할 수 없을 수도 있습니다.
    서버를 사용할 수 있으면 mongo 명령을 사용하여 로그인할 수 있습니다.
    1. mongo
    이제 몬고 셸 알림을 볼 수 있습니다.
    Output
    MongoDB 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 명령을 실행합니다.
    1. db.restaurants.validate({full:true})
    다음과 같은 출력을 볼 수 있습니다.
    1. {
    2. "ns" : "test.restaurants",
    3. "nrecords" : 1,
    4. "nIndexes" : 1,
    5. "keysPerIndex" : {
    6. "test.restaurants.$_id_" : 1
    7. },
    8. "indexDetails" : {
    9. "test.restaurants.$_id_" : {
    10. "valid" : true
    11. }
    12. },
    13. "valid" : true,
    14. "errors" : [ ],
    15. "ok" : 1
    16. }
    만약 validate를 보신다면 집합의 모든 방면이 유효합니다. 생산에서 이 집합의 데이터를 안전하게 사용할 수 있습니다.

    결론


    이 강좌에서는 실행 중인 MongoDB 데이터베이스 서버의 물리적 파일 시스템 레벨 백업을 어떻게 완성하는지 배웠습니다.
    MongoDB 데이터베이스 백업 방법에 대한 자세한 내용은 MongoDB manual 을 참조하십시오.
    Digital Ocean의 편리한 물방울 스냅 기능 때문에 이런 특수한 백업 기술이 가능해졌다.액체 스냅에 대한 자세한 내용은 Snapshot docs 을 참조하십시오.
    또한 백업 기능을 사용하여 이러한 스냅샷을 자동으로 생성할 수 있습니다.액적 백업에 대한 자세한 내용은 Backups Introduction 을 참조하십시오.