개요
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://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 에 만료되는 인증서이므로, 그 전에 완벽하게 동작하는 환경에 대해 테스트가 필요할 것으로 보임.
답글 남기기