오픈스택 연구하기: Disaster Recovery Project Freezer

반응형

오픈스택 연구하기 : Disaster Recovery Project Freezer

안녕하세요 김민욱입니다.

 

이번 포스팅에서는 오픈스택에서 Disaster Recovery Project인 Freezer에 대해 간단하게 포스팅하고자 합니다. 먼저 Disaster Recovery란 무엇일까요? 장애가 발생했을 때 이를 복구하는 것을 의미합니다. 간단하게 말해 Freezer는 가상 머신을 주기적으로 스냅샷을 찍어 오브젝트 스토리지에 보관하다가 장애 시 Restore 기능을 이용해 정상적인 상태의 가상 머신으로 재생성할 수 있습니다. 

 

그림 1. Freezer 심볼

 

Freezer를 이용하여 고가용성 연구[2]를 진행한 포스팅을 업로드 해두었으니 필요하신 분은 참고하셔도 될 것 같습니다. 

 

* 해당 포스팅은 openstack Freezer 공식 문서 및 개인적인 연구를 통해 작성된 포스팅입니다.

 

Architecture & Concept

Freezer는 2015년에 발표 된 Backup, Restore, Disaster Recovery project입니다. 사실 가상 머신 백업뿐만 아니라 File System, Oracle, Mysql 등 다양한 모드로 백업이 가능합니다. 또한 관리자가 주기적으로 Backup & Restore를 수행하도록 스케줄 기능을 지원하기도 합니다. 

 

저장된 Backup data를 기반으로 그대로 Restore가 가능한데 이때 특정 날짜의 데이터를 자동으로 파일 시스템을 통해 복구가 가능합니다. Backup시 저장되는 데이터에 대해 다양한 압축 알고리즘을 지원합니다.(zlib, bzip2, xz) 또한 이전 백업을 자동으로 제거 가능하고, Netwon 버전부터는 Live Migration을 지원하기도 합니다. 

 

그림 2. Freezer 아키텍쳐(참조 : [3])

그림 2에서는 Freezer 아키텍쳐를 나타냅니다. Freezer를 구성하는 구성 요소들에 대해서 하나씩 알아보도록 하겠습니다.

 

* Freezer Web UI 

  • Freezer API와 상호 작용하는 웹 인터페이스  

  • 여러 노드에 대한 백업 및 동기화 설정 제공

* Freezer Scheduler(Freezer-client)

  • 백업이 실행 될 노드에서 실행 중인 클라이언트

  • VM, Physical Node(컨트롤, 컴퓨트 노드) 등에 설치

  • 여러가지 작업(Backup & Restore)에 대한 스케줄 관리

* Freezer Agent

  • 실행중인실행 중인 시스템에서 Backup & Restore에 대한 실질적인 수행

  • 유연성 제공을 위한 옵션 제공 

  • 실질적으로 데이터를 저장소에 Backup 및 Restore

* Freezer API

  • Job, Session 등과 같은 Backup, Restore에 대한 정보를 데이터베이스에 저장 요청(Job, Session에 대해서는 뒤에서 설명드리겠습니다.) 

  • 여러 작업에대한 인터페이스 제공(정보 관리)

* Elasticsearch

  • 작업 상태 등과 같은 여러 정보를 저장하고 검색하기 위해 Freezer-API에서 사용하는 백엔드 DB

결론적으로 Freezer API는 서버 측에, Agent 및 Scheduler는 실질적으로 Backup과 Restore 작업을 수행하는 Node 쪽에 설치되어  상호 작용을 실시하게 됩니다.  사용자가 Horizon 혹은 CLI를 통해 명령을 전달하면 Freezer API는 해당 정보를 Elasticsearch에 저장하고 Freezer-Scheduler에게 관리자 명령을 전달합니다. Freezer Agent는 원격지의 파일 시스템 혹은 Swift를 통해 Backup 된 데이터를 저장하게 됩니다. 

 

Freezer Job과 Session

Freezer scheduler는 Job과 Session 단위로 backup과 restore 주기를 관리합니다. 이는 템플릿으로 작성하게 되고 Freezer-scheduler을 통해 이를 읽어 들여 그 이후 템플릿에 명시된 대로 액션을 반복적으로 수행하게 됩니다. 

 

그림 3. JOB 템플릿 예

그림 3에서는 JOB 템플릿의 예를 나타냅니다. json 형태로 되어있는 템플릿은 일시적인 명령이 아닌 주기적으로 반복해야할 액션에 대한 여러 옵션들을 명시하게 됩니다.  템플릿을 보시면 action은 backup이고 모드는 파일 시스템 백업이 됩니다. 따라서 저장할 파일 시스템의 경로와 저장할 대상인 swift의 컨테이너 이름을 명시하게 됩니다. 또한 언제부터 어느 간격에 액션을 수행할지도 명시할 수 있습니다. 

 

그림 4. Session의 예 

그림 4에서는 Session 템플릿의 예를 나타냅니다. 간단하게 Session은 여러 Job들의 그룹을 나타냅니다. 해당 Job들은 같은 스케줄을 공유하게 되고 Session은 Session id와 Session tag를 통해 구분 됩니다. 보시면 각각의 job에 대해 명시를 하게 되고 이를 jobs라는 카테고리로 묶습니다. 그다음 단을 스케줄을 작성하여 job들의 스케줄을 관리할 수 있습니다.

 

Freezer 실행 예

Freezer가 백업을 할 때, 백업 대상에 대해 다양하게 모드를 지원하고 있습니다. 그럼 지금부터 어떤 백업 모드가 있는지 간단하게 알아보도록 하겠습니다.

 

* NOVA Backup Mode

  • Backup 스케줄에 따라서 가상 머신 스냅숏 이미지를 Swift에 저장

  • Restore시에는 Swift에 저장 된 이미지를 그대로 VM 생성에 사용

* File System Backup Mode

  • 가상 머신 내에 지정 된 경로의 파일 혹은 디렉터리 백업

  • Local, Swift, SSH 등을 이용하여 백업

* Database Backup Mode

  • LVM(Logical Volume Manager)를 이용해 여러 데이터베이스 백업 

* Cinder Backup 

  •  Cinder 백업(cinder의 id 값을 이용) 

 

이처럼 Freezer는 다양한 모드를 CLI로 제공하고 있습니다. 또한 해당 CLI는 Schedule 혹은 Freezer API 없이도 단독으로 Freezer-Agent 명령어를 이용해 Backup과 Restore가 가능합니다. 

 

그림 5. Freezer 명령어 예

Mode Option에는 Nova,FS,Database 등의 키워드를 명시하게 됩니다. 따라서 해당 모드에 따라 가상 머신 스냅샷, 대상 경로의 파일 혹은 디렉터리 백업, 데이터 베이스 백업 등의 명령을 수행할 수 있습니다. 

 

Action option으로는 Backup과 Restore가 명시 되며, 그 외에 container는 Swift에 데이터를 저장하기 위한 container의 이름을 명시하게 됩니다. 생각하시는 그 Docker container와는 무관합니다. 

 

그림 6. Freezer 실행 예제

그림 6에서는 Freezer의 실행 예제를 나타냅니다. 기존에 두개의 VM이 동작하고 있는 상황에서 각각 Backup과 Restore를 통해 어떻게 진행되는지 확인해 보겠습니다. backup시 nova-inst-id 옵션에는 backup 대상에 대한 아이디를 작성합니다. restore시에는 마찬가지로 대상을 적어주고 backup 데이터를 기반으로 새로 생성된 가상 머신의 네트워크 아이디도 작성합니다.  마지막으로 다시 가상 머신 확인을 보면 3개의 가상 머신으로,  기존 가상 머신 스냅샷을 이용하여 새로운 가상 머신이 생성됩니다.

 

결론

이번 포스팅에서는 Freezer의 간단한 구조와 기능들에 대해 알아보았습니다. 제가 Freezer를 써보면서 느꼈던 부분은 Backup과 Recovery의 속도가 많이 느렸습니다. 아예 코드 레벨에서 속도를 올리기 위해 데이터 전송 속도를 변경하거나 여러 방법을 써보았지만 그래도 느리긴 느렸습니다.

 

그러나, Freezer의 기능은 관련된 연구를 진행하면서 성능을 떠나 기능 구현이 목적인 프로토타입 구현에는 쉽고 편리하게 사용하실 수 있을 것 같습니다.

 

혹 부족한 내용이 있다면 언제든지 말씀 부탁드립니다.

 

감사합니다. 

 

인용글

[1] Freezer 심볼 : https://www.openstack.org/project-mascots/

[2] 백업 기반의 VNF 고가용성 기술 개발 :  https://delightwook.tistory.com/20?category=766967

[3] Freezer Docs :  https://docs.openstack.org/freezer/latest/

업데이트로그

------------------------------------------------------------------------------------------------------------------------------

해당 글은 스스로 연구한 내용을 통한 주관적인 이해를 바탕으로 작성 되었습니다. 수정 할 부분이 있거나, 다른 의견이 있으시다면 언제든지 말씀해주시면 반영하도록 하겠습니다. 읽어 주셔서 감사합니다. 끝으로 불법으로 복제하는 것은 금합니다.

 

반응형

댓글

Designed by JB FACTORY