재해복구(DR)를 위한 오로라 데이터베이스 구성

Jan.19.2019 이재웅

Infra

지난해 11/22 오전에 AWS 서울 리전의 전면 장애가 있었습니다.
서울 리전의 경우 2개의 가용영역으로 분리되어 있으나 장애가 리전 전체에 영향을 미쳤기 때문에 배달의민족을 포함한 많은 업체들의 서비스가 약 84분 동안 서비스를 제공하지 못했습니다.
그러자 재해복구(DR)에 대한 필요성이 다시 대두되고 있는데요.
AWS는 DR 관련하여 RDS 오로라 데이터베이스에서 어떤 기능들을 갖고 있을까 궁금했습니다.

기능 MySQL 5.6 호환 MySQL 5.7 호환
교차 리전 읽기 리플리카 지원 지원
글로벌 데이터베이스 지원 미지원

Amazon RDS Aurora MySQL – Differences Among Editions

교차 리전 읽기 리플리카

여러 AWS 리전에 걸쳐 Amazon Aurora MySQL DB 클러스터 복제
교차 리전 읽기 리플리카 생성
원본 오로라 데이터베이스로부터 다른 리전에 읽기 리플리카를 생성합니다.
원본 리전 장애 시 다른 리전의 읽기 리플리카를 승격하여 서비스에 사용할 수 있습니다.
클러스터는 리전에 종속되어 서울 리전에 원본, 도쿄 리전에 복제본이 있다면 각각의 리전 콘솔에선 자신의 클러스터만 보입니다.
클러스터의 역할을 확인하면 Master, Replica 역할로 구분되어 있습니다.
리플리카 promote

글로벌 데이터베이스

Amazon Aurora 글로벌 데이터베이스
글로벌 데이터베이스 생성
글로벌 데이터베이스 목록
AWS 계정 내에서 오로라 데이터베이스를 여러 리전으로 확장할 수 있습니다.
글로벌 데이터베이스를 생성하면 위와 같이 글로벌 역할 아래에 리전 별 클러스터가 포함되고 각 클러스터별로 인스턴스가 위치하게 됩니다.
리전 별로 Primary, Secondary 역할을 나눠가지게 됩니다.
최초 생성한 리전이 Writer 가 되며 다른 리전의 클러스터들은 Reader 역할을 합니다.
Secondary 클러스터의 RW 엔드포인트는 비활성화 됩니다.
글로벌 Secondary 엔드포인트
오레곤 리전의 오로라 데이터베이스(Primary)에 데이터를 입력하고 아일랜드 리전의 오로라 데이터베이스(Secondary)에서 바로 데이터를 확인할 수 있습니다.
글로벌 데이터베이스에 새로운 리전을 추가할 수 있고 제거할 수도 있습니다. 제거할 경우 리전 내 별도의 독립적인 클러스터가 됩니다.
클러스터가 AWS계정에 종속되어 다른 리전의 콘솔에서도 이 데이터베이스를 확인할 수 있습니다.

동기화 방식

교차 리전 읽기 리플리카는 binlog 를 통해 데이터를 동기화 합니다.
사전에 binlog 사용 옵션이 활성화 되어 있어야 합니다.
원본 클러스터의 스냅샷을 캡처하여 복제하려는 리전으로 전송합니다.
이후 복제를 구성하여 데이터를 동기화 합니다.
이 작업들은 모두 자동으로 구성됩니다.
리플리카 slave 상태

글로벌 데이터베이스는 오로라 스토리지 노드간의 데이터 전송을 통해 이루어집니다.
redolog 만을 이용하여 동기화하기 때문에 적은 양의 트래픽과 동기화 시간을 제공합니다.
이는 장애 발생 시 동기화로 인한 장애 대응 시간을 줄여줍니다.

장애 발생 시

교차 리전 읽기 리플리카

원본 리전의 장애 시 다른 리전의 읽기 리플리카에서 promote read replica 를 실행하여 읽기 리플리카를 새로운 원본 클러스터로 만듭니다.
리플리카 promote
이때 복제 슬레이브 구성은 제거 됩니다.
클러스터의 롤도 Master 로 변경됩니다.
어플리케이션에서는 새로운 클러스터를 사용하도록 커넥션을 변경해야 합니다.

글로벌 데이터베이스

Primary 리전의 장애 시 Secondary 리전을 글로벌에서 제거 하는 방식으로 Secondary 리전을 새로운 원본 클러스터로 만듭니다.
글로벌 제거1
글로벌 제거2
Secondary 는 이제 새로운 클러스터가 되면서 쓰기가 가능합니다.
역시 애플리케이션의 커넥션을 새로운 클러스터로 변경해야 됩니다.

비용

각각 리전별로 클러스터를 구성하기 위한 추가 인스턴스 사용,
동기화를 위한 리전 간 쓰기 IO 비용 등이 발생합니다.

마치며

  • 장애조치가 오로라 클러스터와는 다르게 수동으로 이루어지는 점 -> 자동화 개발이 필요
  • 리전 장애가 복구 되었을때 Master, Primary 역할을 다시 원본 리전으로 이관하고 싶다면? -> 역방향으로 다시 구성이 필요
  • RDS만 멀티 리전으로 구성한다고 DR 대비는 아니다. -> EC2 나 다른 리소스도 같이 이루어져야 됨
  • 추가 비용 감안
    글로벌 데이터베이스의 경우 아직 북미, 유럽(아일랜드) 에서만 사용이 가능하고 MySQL 5.6 호환 버전만 사용이 가능합니다.
교차 리전 읽기 리플리카 글로벌 데이터베이스
지원 버전 Aurora MySQL 5.6, 5.7 Aurora MySQL 5.6
리전 전체 북미, 유럽 일부
동기화 방식 binlog를 이용한 복제 스토리지 레이어 동기화
장애조치 리플리카 승격 Secondary 클러스터를 글로벌에서 제거하여 승격