블로그로 돌아가기

자동 주기적 스냅샷을 통한 스토리지 관리

자동 주기적 스냅샷을 통한 스토리지 관리

얼마 전에 저희는 드라이브의 스냅샷을 생성하는 기능을 도입했습니다. 이는 라이브 시스템에서도 드라이브 상태를 빠르고 효율적으로 저장할 수 있는 매우 유용한 기능입니다.

Thanks to ZFS 덕분에, 자동 스냅샷은 현재 상태와 스냅샷이 생성된 시점 사이의 델타만 소비합니다. 즉, 원래 드라이브가 15GB이고 스냅샷과 현재 상태 사이에 1MB의 데이터만 변경된 경우 스냅샷의 크기는 1MB가 됩니다. 디스크에 다른 메가바이트를 쓰면 스냅샷은 다른 메가바이트만큼 커집니다.

이 시스템의 또 다른 장점은 모든 스냅샷을 전체 디스크 드라이브로 승격(복제)할 수 있다는 것입니다. 즉, 완전히 다른 스토리지 시스템의 서버에 마운트할 수 있는 독립적인 복사본을 만들 수 있습니다. 따라서 이는 (작업 부하에 따라) 스토리지 관리 전략의 기반을 형성합니다.

주의 사항

정기적인 스냅샷을 사용하는 것이 백업 전략의 일부가 될 수는 있지만, 스냅샷을 유일한 전략으로 의존하는 것은 현명하지 않습니다.

실행 중인 데이터베이스 서버의 스냅샷을 찍는 등 이러한 스냅샷을 사용하는 것이 작동하지 않는 상황도 많이 있습니다. 스냅샷 기능은 중지된 데이터베이스 서버에서 여전히 유용할 수 있지만(특정 시점 복구 생성), 이 역시 유일한 백업 전략이 되어서는 안 됩니다.

자동 스냅샷 생성

저희의 Python 라이브러리를 사용하면 스냅샷을 자동화하는 것이 정말 간단합니다. 하지만 스냅샷을 트리거하는 시스템에 CloudSigma 자격 증명을 저장해야 하므로, 프로덕션 서비스 자격 증명이 안전하지 않게 노출되는 것을 강력히 권장하지 않습니다. 예를 들어 클라우드 서버에서 이를 실행하려면 나머지 인프라로부터 차단되어 있고(저희의 네트워크 정책 기능 사용 등) 완전히 잠겨 있는지 확인하십시오.

Python 라이브러리를 설치한 후, 다음과 같이 스크립트를 다운로드하고 실행할 수 있습니다:

[bash light=”true”] $ wget https://raw.githubusercontent.com/cloudsigma/pycloudsigma/master/samples/snapshot.py
$ python snapshot.py drive-uuid my-snapshot
[/bash]

snapshot.py는 두 개의 인수를 받습니다:

  • 스냅샷을 찍으려는 드라이브의 UUID
  • 스냅샷의 식별하기 쉬운 이름(friendly name)

수동으로 스냅샷을 생성하고 작동하는지 확인한 후(드라이브의 ‘snapshot’ 섹션에서 확인할 수 있음), 이제 이를 자동화할 수 있습니다.

이와 같은 작업을 실행하는 가장 적합하고 표준화된 방법은 crontab을 사용하는 것입니다(Linux 또는 Mac OS X를 사용 중이라고 가정).

위에서 스냅샷을 생성한 것과 동일한 사용자로 다음을 실행합니다:
[bash light=”true”] $ crontab -e
[/bash]

매일 밤 새벽 1시에 스냅샷을 찍으려면 다음 줄을 추가하십시오:

또한 스크립트가 스크립트를 실행하는 사용자의 홈 디렉토리에 있는 snapshot.log라는 파일에 로그를 기록하는 것을 확인할 수 있습니다.

스냅샷 자동 삭제

스냅샷은 시간이 지남에 따라 커지므로 일정 시간이 지난 후에는 이러한 스냅샷을 삭제하고 싶을 것입니다. 이 문제를 해결하기 위해 이를 대신 수행할 수 있는 다른 스크립트를 만들었습니다. 이 스크립트의 이름은 snapshot_purge.py 이며 두 개의 인수를 받습니다:

  • 드라이브의 UUID
  • 보관할 스냅샷의 일수

예를 들어, 30일 동안의 스냅샷을 보관하려면 다음과 같이 실행하면 됩니다:
[bash light=”true”] $ wget https://raw.githubusercontent.com/cloudsigma/pycloudsigma/master/samples/snapshot_purge.py
$ python snapshot_purge.py drive-uuid 30
[/bash]

물론 이것도 자동화할 수 있습니다. 예를 들어, 30일보다 오래된 스냅샷을 삭제하려면 crontab에 다음을 추가할 수 있습니다(새벽 1시 30분에 실행됨):

마무리

이상입니다, 여러분. 이 두 스크립트를 사용하면 드라이브 스냅샷을 자동화할 수 있습니다. 여러 드라이브의 스냅샷을 찍어야 하는 경우, 서로 다른 UUID를 사용하여 crontab에 snapshot.py 행을 더 추가하기만 하면 됩니다.

물론 스냅샷으로 할 수 있는 일의 아주 일부분만 다루었지만, 이 글이 스토리지 관리 루틴에 스냅샷을 활용하는 방법에 대한 빠른 입문서가 되기를 바랍니다.

더 정교한 데이터 보존 요구 사항이 있는 경우, 위 스크립트의 일부 코드를 재사용할 수 있기를 바랍니다.

author

Viktor Petersson

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.