[오픈스택 개발] 백업 기반의 VNF 고가용성 기술 개발

반응형

백업 기반의 VNF 고가용성 기술 개발

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

 

이번 포스팅에서는 VNF가 제공하는 서비스에 장애가 발생해도 서비스를 제공받는 입장에서 계속적으로 서비스를 받을 수 있는 기법을 개발한 결과를 포스팅하고자 합니다. 

 

VNF가 제공하는 서비스 유지 기법은 고가용성을 연구하는 분야나 실제 서비스 사업자들도 굉장히 중요한 문제입니다. 예를 들어 요즘 같이 클라우드 스트리밍, 게임 등과 같이 서비스를 지속적으로 제공하고 장애가 발생해도 사용자가 인지하지 못하게 하여 콘텐츠를 계속 이용할 수 있는 것은 사업의 성공에 중요한 키워드가 될 것 같습니다. 

 

이러한 서비스 유지 기법을 구현하고 해결하기 위해서는 여러 방법들이 있겠지만, 저의 경우에는 가상 머신 스냅샷, 즉 백업 기능을 이용하여 VNF 서비스 유지 기법을 설계하고 구현해 보았습니다. 

 

따라서 이제 백업 기반의 서비스 유지 기법과 워크플로우 그리고 데모에 대해 확인하겠습니다. 이렇게도 접근 할 수 있겠다는 하나의 방법으로 봐주시면 감사하겠습니다. 

 

Architecture & Workflow

본 구현의 핵심 프로젝트는 오픈스택 백업 프로젝트인 Freezer[1]MANO 프로젝트인 Tacker [2]를 연동합니다. Freezer는 주기적으로 VNF 백업을 수행하다가 Tacker가 모니터링하는 VNF에 장애가 발생하게 되면 Freezer에게 요청하여 백업되어 있는 VNF를 기반으로 새로운 VNF를 생성하여 장애를 복구합니다. 

 

그림 1. 백업 기반 VNF 서비스 유지 기법 구조

그림 1에서는 백업 기반 VNF 서비스 유지 기법의 구조를 나타냅니다. Tacker에서는 Freezer와 연동하기 위해 Freezer Client Plugin을 구현하였고, 장애 복구 액션을 수행하기 우해 모니터링 정책으로 Recovery라는 액션을 구현하였습니다. 따라서 Freezer 플러그인은 VNF가 생성된 뒤 VNF를 백업하거나, 모니터링 정책에서 복구 액션이 발생하게 되면 호출 되게 됩니다.

 

Freezer-Agent는 Nova에게 요청하여 VNF에 스냅샷을 찍고 해당 데이터는 오브젝트 스토리지인 Swift에 저장 되게 됩니다. 해당 주기는 Tacker를 통해 설정할 수 있게 됩니다. 

 

Tacker가 모니터링 중이던 VNF에 장애가 발생하게 되면, Freezer plugin을 통해 Swift에 저장되어 있는 가상 머신 이미지를 기반으로 새로운 VNF를 생성하게 됩니다. 이때 Neutron 로드밸런서를 통해 사용자는 서비스에 접근하게 되므로 기존 VNF대신 새로운 VNF가 Neutron 로드밸런서에 추가되고 사용자는 지속적으로 서비스를 사용할 수 있게 됩니다. 

 

*소스 코드 참조

 

[GITHUB-Cli]   : https://github.com/delightwook/Service-Recovery-based-on-Backup-client

[GITHUB-Ser]  : https://github.com/delightwook/Service-Recovery-based-on-Backup-server

 

Demo

위에서 언급한 백업 기반 서비스 복구 구조를 토대로 이를 구현하고 특정 시나리오에 따라 VNF 장애 발생 시 이들의 복구를 진행하는 것 을 확인 하실수 있습니다.

 

그림 2. 장애 복구 시나리오 

그림 2에서는 장애 복구 시나리오를 나타냅니다. 먼저 Tacker는 VNF를 생성하게 되고, 해당 VNF는 소켓 서버로 숫자를 카운팅해주는 기능을 포함하고 있습니다. VNF 생성 뒤 Tacker는 Freezer-agent와 Freezer-API에게 각각 요청을 보내게 됩니다. 먼저 Freezer-agent는 Nova의 스냅샷 기능을 통해 VNF를 주기적으로 저장하게 됩니다. Freezer-API는 데이터베이스 최신화를 진행하게 됩니다.

 

Socket 클라이언트는 로드 밸런서를 통해 생성한 VNF로부터 숫자를 전달받습니다. VNF가 장애가 발생하였을 경우 Tacker는 Freezer-agent를 통해 Swift에 저장 되어 있는 VNF를 기반으로 새로운 VNF를 생성합니다. 그 뒤 Tacker는 로드밸런서에게 새로 생성된 VNF를 등록하게 됩니다. Socket 클라이언트는 기존의 VNF에 장애가 발생하더라도 새로 생성된 VNF에 로드밸런서를 통한 접근으로 서비스를 유지할 수 있게 됩니다. 

 

 

동영상 1. 데모

동영상에서는 본 구현의 데모를 나타내고 있습니다. 확인하시고 혹 이해가 안되는 부분이 있으시다면 언제든지 문의하시면 답변드리겠습니다. 감사합니다. 

 

결론

본 포스팅에서는 백업 기반으로 서비스를 유지하여 사용자의 편의를 추구하기 위한 기법을 설계하고 구현하였습니다. 구현의 결과는 서비스는 유지가 되지만 백업-리스토어 사이에서 발생하는 시간 차이가 조금 있어서 서비스가 살짝 끊기는 부분이 존재합니다. 해당 연구는 조금 더 연구가 필요한 부분이 많다고 생각되지만, 혹 이런 기능을 위해 이런 식으로 접근해보았다고 생각해도 좋을 것 같습니다.  도움이 되시길 바랍니다.

 

감사합니다. 

인용글

[1] Openstack Backup project Freezer :https://docs.openstack.org/freezer/latest/

[2] 오픈스택 연구하기(2) : NFV Project Tacker : https://delightwook.tistory.com/17

업데이트로그

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

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

 

반응형

댓글

Designed by JB FACTORY