Question


고가용성을 위해 RDS 이중화 구성을 하고자 합니다.

AWS에서 DB 서버를 이중화 하는 방법이 있나요?




Answer


DB서버는 데이터의 일관성을 유지하고자 실행 서버를 시스템 안에서 하나로 구성하는 것이 일반적입니다.
하지만, 고가용성과 장애 조치 기능을 위해 Amazon RDS에서는 Multi-AZ라는 기능을 지원합니다.

따라서 이번 솔루션에서는 Multi-AZ 기능에 대해 안내해드리도록 하겠습니다 :)




Multi-AZ 란?


Multi-az 배포에서 mysql RDS는 자동으로 서로 다른 AZ(가용 영역)에 동기식 예비 복제본을 프로비저닝하고 유지하여 데이터 이중화를 제공합니다. (HA)
그 후, Master db 서버에 장애 발생 시 Standby 인스턴스를 master로 승격시키고, 새로운 Standby db 인스턴스를 생성하여 장애 조치를 수행합니다.

이 작업들은 관리자가 직접 개입할 필요 없이 RDS Multi-AZ 기능을 사용하시면 자동으로 진행됩니다.


Multi-AZ 작동 방식


1. 현재 Master db 인스턴스의 snapshot이 생성됩니다.


2. 생성된 snapshot을 이용하여 다른 AZ에 대기 인스턴스가 생성됩니다.


3. 기본 인스턴스와 Standby 인스턴스 간에 동기식으로 복제되어 데이터 중복성, snapshot 및 백업 중 I/O 중단 제거, 시스템 백업 중 지연 시간 급증을 최소화 합니다.




Multi-AZ 장애 조치 프로세스


Multi-AZ를 활성화 한 경우, DB 인스턴스에 중단이 발생하면 자동으로 다른 가용 영역에 있는 Standby replica(예비 복제본)으로 switch됩니다.
장애 조치가 완료되는데 소요되는 시간은 기본 DB 인스턴스를 사용할 수 없게 된 시점의 데이터 베이스 활동 및 기타 조건에 따라 달라지지만, 대략적으로 60~120초 정도 소요됩니다.

하지만, 트랜잭션의 규모가 크거나 복구 프로세스가 복잡한 경우 장애 조치에 소요되는 시간이 증가할 수 있으며, 콘솔에서 확인하는데는 시간이 좀 더 걸릴 수 있습니다.
따라서 특정 사용 사례에 대한 프로세스가 얼마나 오래 걸리는지 이해하고 DB 인스턴스에 엑세스하는 애플리케이션이 장애 조치 발생 이후에 새 DB 인스턴스에 자동으로 연결할 수 있는지 정확하게 확인하고 싶으시다면, DB 인스턴스에 대한 장애 조치를 테스트해보시는 것을 추천드립니다.


또한 장애 조치 매커니즘은 Standby DB 인스턴스를 가리키도록 DB 인스턴스의 DNS 레코드를 자동으로 변경합니다.



아래 조건 중 하나라도 만족하면, 기본 DB 인스턴스가 자동으로 Standby db로 전환됩니다.


장애 조치 이유 설명
RDS 데이터베이스 인스턴스 기반의 운영 체제가 오프라인 작업에서 패치되고 있습니다.

OS 패치 또는 보안 업데이트를 위한 유지 관리 기간 동안 장애 조치가 트리거되었습니다.

RDS 다중 AZ 인스턴스의 기본 호스트가 비정상입니다. 다중 AZ 배포에서 손상된 기본 DB 인스턴스를 감지하여 장애 조치했습니다.
네트워크 연결 손실로 인해 RDS 다중 AZ 인스턴스의 기본 호스트에 연결할 수 없습니다.

RDS 모니터링이 기본 DB 인스턴스에 대한 네트워크 연결 실패를 감지하여 장애 조치를 트리거했습니다.

RDS 인스턴스를 고객이 수정했습니다.

RDS DB 인스턴스 수정 때문에 장애 조치가 트리거되었습니다.

RDS 다중 AZ 기본 인스턴스가 사용 중이며 응답하지 않습니다.

기본 DB 인스턴스가 응답하지 않습니다. 다음을 수행하는 것이 좋습니다.

  • 이벤트 및 CloudWatch 로그에서 과도한 CPU, 메모리 또는 스왑 공간 사용량을 검사합니다.

  • 워크로드를 평가하여 적절한 DB 인스턴스 클래스를 사용 중인지 확인합니다. 

  • 실시간 운영 체제 지표에 대해 향상된 모니터링을 사용합니다. 

  • 성능 개선 도우미를 사용하면 DB 인스턴스의 성능에 영향을 미치는 문제를 분석할 수 있습니다.

RDS 다중 AZ 인스턴스의 기본 호스트 기반의 스토리지 볼륨에 오류가 발생했습니다. 다중 AZ 배포에서 기본 DB 인스턴스의 스토리지 문제를 감지하여 장애 조치했습니다.
사용자가 DB 인스턴스의 장애 조치를 요청했습니다.

사용자가 DB 인스턴스를 재부팅하고 장애 조치를 사용하여 재부팅을 선택했습니다.




Multi-AZ 설정 방법

RDS Multi-az 기능은 매니지드 콘솔 화면, CLI등으로 쉽게 설정하실 수 있으며, 아래에 Multi-az 기능을 설정하는 방법을 안내하도록 하겠습니다.

  1.  DB Subnet group 생성


    DB Subnet group은 사용자가 VPC에서 만든 다음, DB 인스턴스에 대해 지정하는 서브넷의 모음, 그룹으로 두 개 이상의 가용 영역에 서브넷이 있어야 합니다.
    Amazon RDS는 DB 인스턴스와 연결할 서브넷 내의 서브넷과 IP 주소를 선택합니다.
    DB 인스턴스를 생성할 때, DB 서브넷 그룹을 사용하여 특정 VPC를 지정할 수 있으며, Multi-az 기능을 사용하셔서 db 인스턴스를 생성하시면, 해당 서브넷 그룹 안에 Master db 인스턴스와 standby db 인스턴스가 생성됩니다.
    그 후, 만약 Master DB 인스턴스에 장애가 발생할 경우, DB 서브넷 그룹 안의 또 다른 Standby db 인스턴스를 승격한 후 다른 가용 영역 중 하나에서 서브넷 IP 주소를 사용하여 새로운 Standby db를 생성합니다.


    a. [RDS] -> [서브넷 그룹] 에서 DB 서브넷 그룹 생성을 선택합니다.


    b. DB Subnet group 설정



    DB 서브넷 그룹에 사용할 서브넷에 해당하는 VPC를 선택하시고, 추가할 가용영역과 서브넷을 선택하여 DB 서브넷 그룹을 생성합니다.


  2. 데이터베이스 생성

    a. database 생성

    [RDS] -> [데이터베이스] 에서 데이터베이스 생성을 선택합니다. mysql을 선택하여 주십시오.



    b. 서브넷 그룹 선택
    이전 단계에서 생성하신 서브넷 그룹을 선택합니다.


    c. [가용성 및 내구성] -> 다중 AZ 배포 섹션에서 [대기 인스턴스 생성] 을 선택합니다. 




위의 방법처럼 간단하게 Multi-az 기능을 사용하여 DB 이중화를 구성하실 수 있습니다.
Master db 서버에 장애 발생시 Standby db가 master로 승격되며, 기존 master 가 사용하던 서브넷에 standby 서버가 자동으로 새로 생성됩니다. 

하지만 이 기능은 읽기 전용 시나리오의 솔루션이 아니므로 standby replica를 사용하여 읽기 트래픽을 지원할 수 없습니다. 만약 읽기 전용 트래픽을 지원하고자 하신다면 "읽기 전용 복제본" 을 사용하시길 바랍니다.

추가적으로 Multi-az 에 관한 자세한 가이드와 레퍼런스는 아래 링크를 참고하여 주시길 바랍니다.

# 1. Amazon RDS를 위한 고가용성 (Multi-AZ)
https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html

# 2. RDS를 이용하여 DB 서버 이중화 하기
https://digitalbourgeois.tistory.com/41

# 3. DB 서브넷 그룹을 사용한 작업
https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html

# 4. RDS Best Practice
https://jayendrapatil.com/aws-certification-rds-best-practices/



추가적인 문의 사항이나 궁금하신 점은 언제든지 저의 기술 지원 포털에 티켓 남겨주시길 바립니다?