AWS RDS AuroraDB 로 변경 작업

AWS Aurora란

AWS가 자사의 클라우드 환경에 맞게 성능과 가용성을 고려한 RDB를 만든 것이 Aurora이다.

AS-IS

개발, 베타, 운영 DB의 RDS DB 엔진을 MySQL Community 사용하고 있었다. 각 DB는 기본 역할로 하나씩 존재하다보니 DB에 부하가 걸릴때 인스턴스가 재부팅되어 수 분간의 다운타임이 발생하였다. 그래서 장애 조치를 위해 오로라로 변경하는 작업을 진행했다.

오로라로 선택한 이유

오로라는 여러 Read Replica가 같은 클러스터로 묶여 있고 Write 권한이 있는 마스터가 다운되면 RR중 하나를 마스터로 자동 승격시켜 대응한다. 몇 초 만의 Failover로 사용자가 장애로 인해 불편함을 겪는 것을 최소화한다.

자세한 설명은 이 글에 잘 나와있다.

(https://notemusic.tistory.com/69)

DB 설정

오로라 디비를 생성하는 과정은 아래 링크에 잘 나와있다.
DB 클러스터 생성 및 Aurora MySQL DB 클러스터의 데이터베이스에 연결
tip 문서에서 언급하지 않은 것 중에 하나를 추가하자면 대소문자를 구분을 하는것이 기본 값이기 때문에 이로 인한 에러가 발생 할 수 있다. 이식성을 위해서 parameter group에 lower_case_table_names 를 1로 주고 대소문자 구분 안함으로 해주는 것이 좋다.

수동 장애 조치

수동 장애 조치를 수행하려면 콘솔에서 기본 인스턴스 이름을 선택하고 Instance actions 메뉴에서 Failover를 선택하면 failover 테스트가 가능하다.

드라이버 변경

mariadb 드라이버로 변경해야 하는이유

처음에 datasource에서 db 엔드포인트만 변경하고 mysql 드라이버를 썼더니 문제가 발생했다.

첫번째 failover

인스턴스 failover 전 역할 failover 후 역할
a 기본 인스턴스 읽기 전용 복제본
b 읽기 전용 복제본 기본인스턴스


두번째 failover

인스턴스 failover 전 역할 failover 후 역할
a 읽기 전용 복제본 기본인스턴스
b 기본인스턴스 읽기 전용 복제본


Failover 테스트를 진행할 때 첫번째 failover시 정상적으로 읽기 전용 복제본이 기본인스턴스가 되고 기본인스턴스가 읽기 전용 복제본으로 변환이 잘 되지만 두번째 failover시 둘의 권한 변경은 정상적으로 이루어 지나 인스턴스 모두 read-only가 되어있었다. 즉 write가 되어야 할 인스턴스가 read-only이기 때문에 장애가 발생하였다.

드라이버 변경

드라이버 문제로 판단하고 mysql-connector-java의 버전 5.1.41에서 mariadb-java-client의 버전 2.6.0으로 변경하고 문제가 해결되었다. properties 파일에서는 아래와 같이 드라이버를 변경하고 변경된 주소를 넣어주면 된다.

기존 mysql datasource 설정

spring.datasource.url=jdbc:mysql://rds-prod.example.ap-southeast-1.rds.amazonaws.com:3306...
spring.datasource.driverClassName=com.mysql.jdbc.Driver

새로운 Aurora datasource 설정

spring.datasource.url= jdbc:mariadb:aurora://aurora-prod-cluster.cluster-example.ap-southeast-1.rds.amazonaws.com:3306/...
spring.datasource.driverClassName=org.mariadb.jdbc.Driver

Summary

AWS 콘솔과 코드에서의 설정을 간단히(?) 변경해 Aurora로 바꿨더니 한층 마음이 편해졌다. 앞으로 DB가 죽어서 운영이 중단되는 사태에 대한 대비를 어느 정도 해 놓은 거 같아서 두발 뻗고 잘 수 있을 것 같다.