[AWS] Amazon RDS cross-Region read replica 생성

제공

개요


Amazon RDS 에서는 cross-Region read replica 라는 기능을 지원한다.

해당 기능은 master 에서 다른 리전에 read replica 를 생성하여 리전 간의 DB 를 공유할 수 있는 기능임.

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.CrossRegion.html

https://aws.amazon.com/ko/blogs/database/read-scalability-with-amazon-aurora-serverless-v2/

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html

기존에 MySQL 및 Aurora MySQL 에서도 지원하던 기능이었으나, 이번에 Serverless v2 에서도 지원한다는 내용이 추가되어 팀내 자원에 추가하였다.

하지만 실제 적용 과정에서 생각보다 제약사항 및 사전 설정이 필요하여, 해당 내용들을 문서에 정리하여 기록하였다.

기능 상세


Amazon Aurora 글로벌 데이터베이스 라는 기능이며, 다음과 같은 특징을 가짐

  • 로컬 지연 시간으로 다른 리전에 배포
  • 리전 전체 장애 시, 다른 리전에서 가용 상태로 사용 가능
  • DB 클러스터의 작업과 읽기/쓰기 인스턴스의 워크로드가 분리되어 성능에 영향을 미치지 않음

다음의 데이터베이스 버전을 지원하며

  • MySQL 8.0과 호환되는 Aurora MySQL, 버전 3.01.0 이상
  • MySQL 5.7과 호환되는 Aurora MySQL, 버전 2.09.1 이상
  • Aurora PostgreSQL 버전 13.3 이상, 12.4 이상, 11.9 이상, 10.14 이상

다음의 데이터베이스 형태로 생성해야 함.

  • Instance 타입을 지원함
  • Serverless v1 은 지원하지 않음
  • Serverless v2(Region Cluster) 로 생성할 경우, Serverless 인스턴스 클래스는 지원하지 않음
  • Serverless v2 인스턴스를 지원함 (2023-10-31 확인 완료)
    • Read Replica 생성, 기존 인스턴스 Modify 모두 가능함

Parameter Group 에서 replication 복제를 위한 기능을 활성화 해야함.

  • binlog_format 의 값을 ROW 나 MIXED 로 설정해야함

생성 방법


팀내 DB 인프라는 모두 MySQL 을 사용하므로, MySQL 호환 Aurora 로 선택함.

그리고 엔진 버전은 Serverless v2 최신 버전으로 선택함.

DB 인스턴스 클래스는 반드시 인스턴스 타입으로 선택함

t class, r class, Serverless v2 중에서 원하는 타입으로 선택함

read replica 에서 쓰기는 허용하지 않는 편이 좋으므로 선택하지 않음.

사전에 Parameter Group 를 생성해서 binlog_format 값을 변경한다.

그리고 해당 Parameter Group 을 적용한다.

Encryption 은 해제하여 생성함.

  • 민감한 데이터가 아닌 경우에는, 암호화에 따른 오버헤드가 더 리스크가 클 것으로 예상함

이슈 해결


binlog 복제가 안되는 현상

Amazon RDS 의 read replica 기능은 MySQL 의 binlog 복제 기능을 이용하는 것이므로, 아래와 같은 명령어로 binlog 의 복제 상태를 확인할 수 있음.

그런데 binlog 복제가 지연되거나, 동작하지 않을 경우, Slave_IO_Running 상태가 비정상인 경우가 있음.

아래와 같이 Slave_IO_Running 및 Slave_IO_State 가 Conneting 상태에 머물러 있는 경우, master DB 에 연결이 되지 않은 상태이다.

일반적인 MySQL 환경에서는 아래와 같은 이유로 발생함.

1. master DB 의 방화벽 및 Inbound 요청이 허용되지 않는 상태

2. master DB 에서 연결 허용된 호스트 혹은 유저가 아닐 경우

하지만 Amazon RDS 는 Amazon 관리형 서비스이므로, 디폴트 상태에서 연결성 및 보안 설정은 적용되어 있지 않으며, Master 와 Slave 간의 Security Group 설정이 필요하지 않음.

RDS 를 설정하는 과정에서 발견한 것은, RDS 인스턴스 접속을 위한 CA 인증서를 새로운 rds-ca-rsa2048-g1 로 사용하면 Slave_IO_Running 상태에 문제가 발생한다는 것임.

이를 기존에 사용하던 rds-ca-2019 인증서를 사용하면 Slave_IO_Running 문제가 해결이 되었다.

해당 인증서는 2024-08-23 에 만료되는 인증서이므로, 그 전에 완벽하게 동작하는 환경에 대해 테스트가 필요할 것으로 보임.


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다