복잡한 인프라구조를 롤백해야한다면?

귀귀재재·2024년 7월 19일
0

배경


직접 클라우드 플랫폼을 만들면서, 여러 기능을 만들어보던 중

문득, 이런 생각이 들었다.

클라우드 플랫폼 서비스 오류로 Database를 특정 시점으로 롤백시키면,
클라우드 플랫폼 서비스 중 IaC로 관리중인 인프라도 롤백해야겠네?

또, 현재 IaC로 관리중인 자원들의 활성상태 및 정보를 Terraform의 tfstate에 의존해서 가져오고 있는데 Storage 오류로 IaC 파일들이 날라갔을때의 복구 방식에 대해 고민중에 있었다.

그래서 이러한 문제를 해결하고자 인프라구조를 롤백하는 방법에 대해 생각하게 되었다.

배경 지식

인프라를 둘로나누면 가변 인프라와 불변 인프라로 나눌수 있다.

Mutable Infrastructure 특징:
1. 서버를 수동으로 조작한다.
2. 원격 접속을 통해 패키지 설치나 원하는 버전으로 서비스를 배포할 수 있다.

Immutable Infrastructure 특징:
1. 일단 만들어진 인프라는 수정하지 않는다.
2. 버전 업그레이드나 수정이 필요할때는 기존의 자원을 삭제하고 새롭게 생성한다.

불변 인프라의 장점은 아래 글에서 자세하게 확인할 수 있다.
https://velog.io/@xgro/Mutable-and-Immutable-Infra

복잡하고 대용량의 트래픽을 처리하는 서비스는 인프라 구조도 복잡해진다. 이러한 복잡성을 줄이고자 code형태로 효율적으로 인프라를 관리하는 사례가 많다.

Infrastructure as Code를 위한 플랫폼은 여러가지가 존재한다. 테라폼, 클라우드포메이션, 오픈스택 히트등의 인프라 정의 도구를 사용하면 할당하려는 인프라 자원과 자원의 구성방법을 코드로 지정할 수 있다.

접근

클라우드 서비스의 장애로 특정시점으로 롤백한다면, 이미 정의되어있던 인프라 또한 롤백이 되어야하지 않을까?

어떻게 인프라구조를 롤백시킬까?

제일 처음에 먼저 들었던 생각은 IaC 파일시스템 매니징 프로그램을 따로 개발하여 IaC 파일의 수정,추가,삭제 등의 이벤트를 직접 기록하고 롤백시킬 수 있는 프로그램을 만들어야 겠다고 생각했다.

하지만, 이미 좋은 선례가 있어 굳이 프로그램 자체를 만들 필요가? 없을것 같다.

솔루션

제안하는것은 바로 Git을 이용하는 것이다.

Git을 이용해 IaC 파일의 수정,추가,삭제 이벤트들을 관리하고 서버에서 관리중이던 tfstate 파일이 날라가도 복구를 용이하게 할 수 있을 것이라 생각한다.

또 롤백시 git head를 이동시켜 특정 시점으로도 롤백할 수 있는 기능을 구현할 수 있다.

제기 되는 문제점

1. 무중단 배포 어떡할건데?

배포전략에서 차용하면 가능할 것 같다.


가장 최근의 인프라구조가 다음과 같이 정의 되어있다고 가정하자.



그리고 극단적으로 2000년대의 인프라구조가 다음과 같이 정의 되어 있었다고 가정하자.


최근 버전에서 2000년대 버전으로 인프라로 롤백하기 위해선 플로팅 IP를 가지고 있는 부분에만 신경써주면 될 것이다.

절차는 아래와 같다.


a. 롤백해야될 인프라 구조를 클론

b. 롤백을 위한 프록시 서버에 floating ip를 옮기고 두개의 서브넷을 물림

c. 웨이트값을 조절해가며 기존의 세션을 유지하며 롤백 인프라로 유저 이동

d. 이동이 완료되면 최신버전의 인프라 구조 삭제

e. 삭제 완료시 프록시 서버 삭제후, 2000년대 인프라로 floating ip 이동

2. 가변 인프라구조는 어떻게 할건데?

가변 인프라 자원들은 롤백에서 제외하여, 기존의 API 트랜잭션 관리 컴포넌트를 이용하여 DB consistency확보 가능하다.

profile
오늘 뭐하지///?

0개의 댓글