RDS Database의 고가용성을 위하여 Read Replicas와 Multi AZ 기능을 이용하는 것이 좋습니다. 오늘은 이 두 기능에 대해 알아봅시다.
1. Read Replicas
Read(읽기)를 스케일링하여 DB의 부하를 분산시킵니다.
- MySQL, MariaDB, PostgreSQL DB 엔진은 최대 15개를 생성할 수 있습니다.
- Oracle, Microsoft SQL Server DB 엔진은 최대 5개를 생성할 수 있습니다.
- 동일한 가용 영역 또는 가용 영역이나 리전을 걸쳐서(Cross AZ, Cross Region) 생성이 가능합니다.
- DB Instance와 Read Replicas 간 비동기식(Async) 복제가 발생하여 Read가 일관적으로 유지됩니다.
- DB Instance로 승격시킬 수 있습니다.
- DB Instance와 Read Replicas가 같은 리전에 있을 때 비용이 발생하지 않습니다.
- 다른 리전에 있을 때는 네트워크 비용이 발생합니다.
- 각각 고유 DNS가 할당되어 접근이 가능합니다.
- 단, 원본 DB의 장애 발생 시 수동으로 DNS 변경이 필요합니다.
- 자동 백업이 활성화되어 있어야 생성 가능합니다.
- 각 DB의 엔진 버전이 다를 수 있음을 주의해야 합니다.

2. Multi AZ
Master DB Instance를 동기식(Sync)으로 다른 AZ에 Standby Instance로 복제합니다.
- Master DB의 모든 변화를 동기적(Sync)으로 복제합니다.
- 하나의 DNS를 사용하여 Standby Instance에 자동으로 장애 조치가 수행됩니다.
- AZ 또는 네트워크가 손실될 때에 대비한 장애 조치입니다.
- Master DB 또는 Storage에 장애가 발생할 때 Standby Instance가 새로운 Master가 될 수 있도록 합니다.
- Standby Instance는 단지 대기 목적 하나만을 수행합니다. 평상시에는 Read / Write가 불가능합니다.

3. 실습
다음 글에 나와있는 실습을 따라하면 되나, 몇 가지 옵션만 변경하면 됩니다.
[AWS] RDS의 개념과 기본 실습
웬만한 애플리케이션은 데이터베이스를 사용합니다. 데이터베이스 중에서도 수요가 많은 것은 관계형 데이터베이스 (RDB)입니다. 관계형 데이터베이스는 데이터가 하나 이상의 열과 행의 테이
arcozz.tistory.com
템플릿으로 Production을 선택합니다.

Multi AZ 기능을 사용하기 위해 Deployment options로 Multi-AZ DB Instance를 선택합니다.

나머지는 기존 글 옵션을 따르고 Create database를 눌러 생성합니다. 조금만 기다리면 Available 상태가 됩니다.

이제 Read Replica를 생성해보겠습니다.
DB Instance를 선택하고, Actions > Create read replica를 누릅니다.

먼저, Read Replica 식별자를 입력합니다.

DB Instance의 설정이 그대로 전달되기 때문에 한 가지 설정만 변경하면 됩니다.
Read Replica는 Multi AZ가 필요없기 때문에 Deployment options에서 Single DB instance를 선택합니다.

이제 Create read replica를 누른 뒤, 조금만 기다리면 Replica 생성이 완료됩니다.

이제 Master DB에 접속하여 간단한 Database와 Table을 생성하고, 데이터 하나를 추가하겠습니다.
CREATE DATABASE demo;
USE demo;
CREATE TABLE member (
idx INT NOT NULL AUTO_INCREMENT,
user_id VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL,
PRIMARY KEY(idx)
);
INSERT INTO member(user_id, password) VALUES ('admin', 'pw1234');
Master DB는 Read / Write 모두 가능하기 때문에 SELECT 또한 가능합니다.
MySQL [demo]> SELECT * FROM member;
+-----+---------+----------+
| idx | user_id | password |
+-----+---------+----------+
| 1 | admin | pw1234 |
+-----+---------+----------+
1 row in set (0.001 sec)
Read Replica의 endpoint로 접속하면 마찬가지로 SELECT는 가능하지만, 그 외의 Write 동작은 불가합니다.
MySQL [demo]> SELECT * FROM member;
+-----+---------+----------+
| idx | user_id | password |
+-----+---------+----------+
| 1 | admin | pw1234 |
+-----+---------+----------+
1 row in set (0.003 sec)
MySQL [demo]> INSERT INTO member(user_id, password) VALUES ('demo', 'demo1234');
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement
이번에는 Multi AZ 테스트를 위해 Reboot를 해보겠습니다.
Reboot 전에 EC2 Instance에서 반복문을 사용하여 Database IP가 바뀌는 것을 관찰하겠습니다.
while true; do host demo-db.cacgnhyyutg6.ap-northeast-2.rds.amazonaws.com; sleep 1; done
Master DB를 선택한 뒤, Actions > Reboot를 누릅니다.

Reboot With Failover?에 체크한 뒤 Confirm을 누릅니다.

잠시 후, EC2 Instance에서 출력되는 IP가 딜레이없이 바뀌는 것을 볼 수 있습니다.

Network interfaces에서 보면 ap-northeast-2c의 private IP에서 ap-northeast-2a의 private IP로 전환된 것을 확인할 수 있습니다.

오늘의 글은 여기까지입니다. 감사합니다!
참고
https://inpa.tistory.com/entry/AWS-📚-RDS-실전-사용하기-Multi-AZ-Read-Replica
[AWS] 📚 RDS 실전 구축하기 [Multi AZ / Read Replica]
RDS 실전 사용 세팅하기 이번 강의에서는 전반적인 RDS 생성 및 사용 방법과, 멀티 AZ와 Read Replica를 지원하는 RDS를 만들어보고, 만일 Primary를 강제로 내리면 Stanby가 fail over 되는 동작을 실전으로
inpa.tistory.com
https://youtu.be/koDIV5QMw38?si=zF-QRQQjhahuL6VK
https://www.udemy.com/course/best-aws-certified-solutions-architect-associate/
'AWS' 카테고리의 다른 글
[AWS] Global Aurora (Cross Region Read Replica, Global Database) (0) | 2023.10.02 |
---|---|
[AWS] Amazon Aurora - RDS DB Engine (0) | 2023.10.01 |
[AWS] RDS의 개념과 기본 실습 (0) | 2023.09.29 |
[AWS] EKS - AWS Load Balancer Controller (0) | 2023.09.26 |
[AWS] EKS AutoScaling - Karpenter (2) | 2023.09.25 |
RDS Database의 고가용성을 위하여 Read Replicas와 Multi AZ 기능을 이용하는 것이 좋습니다. 오늘은 이 두 기능에 대해 알아봅시다.
1. Read Replicas
Read(읽기)를 스케일링하여 DB의 부하를 분산시킵니다.
- MySQL, MariaDB, PostgreSQL DB 엔진은 최대 15개를 생성할 수 있습니다.
- Oracle, Microsoft SQL Server DB 엔진은 최대 5개를 생성할 수 있습니다.
- 동일한 가용 영역 또는 가용 영역이나 리전을 걸쳐서(Cross AZ, Cross Region) 생성이 가능합니다.
- DB Instance와 Read Replicas 간 비동기식(Async) 복제가 발생하여 Read가 일관적으로 유지됩니다.
- DB Instance로 승격시킬 수 있습니다.
- DB Instance와 Read Replicas가 같은 리전에 있을 때 비용이 발생하지 않습니다.
- 다른 리전에 있을 때는 네트워크 비용이 발생합니다.
- 각각 고유 DNS가 할당되어 접근이 가능합니다.
- 단, 원본 DB의 장애 발생 시 수동으로 DNS 변경이 필요합니다.
- 자동 백업이 활성화되어 있어야 생성 가능합니다.
- 각 DB의 엔진 버전이 다를 수 있음을 주의해야 합니다.

2. Multi AZ
Master DB Instance를 동기식(Sync)으로 다른 AZ에 Standby Instance로 복제합니다.
- Master DB의 모든 변화를 동기적(Sync)으로 복제합니다.
- 하나의 DNS를 사용하여 Standby Instance에 자동으로 장애 조치가 수행됩니다.
- AZ 또는 네트워크가 손실될 때에 대비한 장애 조치입니다.
- Master DB 또는 Storage에 장애가 발생할 때 Standby Instance가 새로운 Master가 될 수 있도록 합니다.
- Standby Instance는 단지 대기 목적 하나만을 수행합니다. 평상시에는 Read / Write가 불가능합니다.

3. 실습
다음 글에 나와있는 실습을 따라하면 되나, 몇 가지 옵션만 변경하면 됩니다.
[AWS] RDS의 개념과 기본 실습
웬만한 애플리케이션은 데이터베이스를 사용합니다. 데이터베이스 중에서도 수요가 많은 것은 관계형 데이터베이스 (RDB)입니다. 관계형 데이터베이스는 데이터가 하나 이상의 열과 행의 테이
arcozz.tistory.com
템플릿으로 Production을 선택합니다.

Multi AZ 기능을 사용하기 위해 Deployment options로 Multi-AZ DB Instance를 선택합니다.

나머지는 기존 글 옵션을 따르고 Create database를 눌러 생성합니다. 조금만 기다리면 Available 상태가 됩니다.

이제 Read Replica를 생성해보겠습니다.
DB Instance를 선택하고, Actions > Create read replica를 누릅니다.

먼저, Read Replica 식별자를 입력합니다.

DB Instance의 설정이 그대로 전달되기 때문에 한 가지 설정만 변경하면 됩니다.
Read Replica는 Multi AZ가 필요없기 때문에 Deployment options에서 Single DB instance를 선택합니다.

이제 Create read replica를 누른 뒤, 조금만 기다리면 Replica 생성이 완료됩니다.

이제 Master DB에 접속하여 간단한 Database와 Table을 생성하고, 데이터 하나를 추가하겠습니다.
CREATE DATABASE demo;
USE demo;
CREATE TABLE member (
idx INT NOT NULL AUTO_INCREMENT,
user_id VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL,
PRIMARY KEY(idx)
);
INSERT INTO member(user_id, password) VALUES ('admin', 'pw1234');
Master DB는 Read / Write 모두 가능하기 때문에 SELECT 또한 가능합니다.
MySQL [demo]> SELECT * FROM member;
+-----+---------+----------+
| idx | user_id | password |
+-----+---------+----------+
| 1 | admin | pw1234 |
+-----+---------+----------+
1 row in set (0.001 sec)
Read Replica의 endpoint로 접속하면 마찬가지로 SELECT는 가능하지만, 그 외의 Write 동작은 불가합니다.
MySQL [demo]> SELECT * FROM member;
+-----+---------+----------+
| idx | user_id | password |
+-----+---------+----------+
| 1 | admin | pw1234 |
+-----+---------+----------+
1 row in set (0.003 sec)
MySQL [demo]> INSERT INTO member(user_id, password) VALUES ('demo', 'demo1234');
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement
이번에는 Multi AZ 테스트를 위해 Reboot를 해보겠습니다.
Reboot 전에 EC2 Instance에서 반복문을 사용하여 Database IP가 바뀌는 것을 관찰하겠습니다.
while true; do host demo-db.cacgnhyyutg6.ap-northeast-2.rds.amazonaws.com; sleep 1; done
Master DB를 선택한 뒤, Actions > Reboot를 누릅니다.

Reboot With Failover?에 체크한 뒤 Confirm을 누릅니다.

잠시 후, EC2 Instance에서 출력되는 IP가 딜레이없이 바뀌는 것을 볼 수 있습니다.

Network interfaces에서 보면 ap-northeast-2c의 private IP에서 ap-northeast-2a의 private IP로 전환된 것을 확인할 수 있습니다.

오늘의 글은 여기까지입니다. 감사합니다!
참고
https://inpa.tistory.com/entry/AWS-📚-RDS-실전-사용하기-Multi-AZ-Read-Replica
[AWS] 📚 RDS 실전 구축하기 [Multi AZ / Read Replica]
RDS 실전 사용 세팅하기 이번 강의에서는 전반적인 RDS 생성 및 사용 방법과, 멀티 AZ와 Read Replica를 지원하는 RDS를 만들어보고, 만일 Primary를 강제로 내리면 Stanby가 fail over 되는 동작을 실전으로
inpa.tistory.com
https://youtu.be/koDIV5QMw38?si=zF-QRQQjhahuL6VK
https://www.udemy.com/course/best-aws-certified-solutions-architect-associate/
'AWS' 카테고리의 다른 글
[AWS] Global Aurora (Cross Region Read Replica, Global Database) (0) | 2023.10.02 |
---|---|
[AWS] Amazon Aurora - RDS DB Engine (0) | 2023.10.01 |
[AWS] RDS의 개념과 기본 실습 (0) | 2023.09.29 |
[AWS] EKS - AWS Load Balancer Controller (0) | 2023.09.26 |
[AWS] EKS AutoScaling - Karpenter (2) | 2023.09.25 |