RDS의 DB 엔진으로 MySQL, PostgreSQL을 선택해도 되지만, 아마존이 클라우드에 최적화되게 개발하여 성능이 좋은 Aurora를 선택해도 됩니다. 오늘은 DB 엔진 Aurora에 대해 알아봅시다.
1. Aurora
- MySQL과 PostgreSQL에서 호환됩니다.
- 여러가지 최적화를 통해 RDS의 MySQL보다 5배 높은 성능, Postgres보다 3배 높은 성능을 가집니다.
- 자동으로 스토리지를 확장합니다. 10GB에서 시작하여 128TB까지 확장 가능합니다.
- CPU 96vCPU와 메모리 768GB까지 증가 가능합니다.
- 최대 15개의 Read Replicas를 더 빠른 복제 속도로 생성 가능합니다.
- 즉각적인 장애 조치와 높은 가용성을 가지고 있습니다.
- RDS에 비해 약 20% 정도 높은 비용이지만 스케일링 측면에서 훨씬 더 효율적입니다.
2. Aurora의 고가용성
- 각 AZ마다 2개의 복제본을 저장하며 최소 3개의 AZ를 확보해 최소 6개의 복제본에 데이터를 분산 저장합니다.
- Write(쓰기)에는 6개의 복제본 중 4개만 있으면 됩니다.
- Read(읽기)에는 6개의 복제본 중 3개만 있으면 됩니다.
- 일부 데이터가 손상되거나 문제가 있으면 백엔드에서 P2P 복제를 통한 자가 복구가 진행됩니다.
- Aurora Storage는 Quorum 모델을 사용합니다.
- 단일 볼륨에 의존하지 않고 수 백 개의 볼륨을 사용합니다.
- Master DB가 동작하지 않을 시 평균 30초 이내로 장애 조치가 시작됩니다.
- Master DB에 문제가 생기면 Read Replicas 중 하나가 Master DB가 되어 대체합니다.
3. 실습
다음 글을 참고하여 Subnet group까지 생성해줍니다.
[AWS] RDS의 개념과 기본 실습
웬만한 애플리케이션은 데이터베이스를 사용합니다. 데이터베이스 중에서도 수요가 많은 것은 관계형 데이터베이스 (RDB)입니다. 관계형 데이터베이스는 데이터가 하나 이상의 열과 행의 테이
arcozz.tistory.com
RDS 콘솔에 접속하여 Create database를 누릅니다.
몇 가지 옵션만 변경하고, 나머지는 기본값으로 놔두면 됩니다.
먼저, DB 엔진을 Aurora (MySQL Compatible)로 설정합니다.
DB 클러스터 식별자, 마스터 유저이름, 마스터 비밀번호를 각각 설정합니다.
DB instance class로 가장 낮은 성능을 가지지만 저비용인 db.t3.medium을 선택합니다.
Multi-AZ deployment를 'Create ~'로 설정하여 다른 AZ에 있는 복제본을 통하여 장애 조치 할 수 있도록 합니다.
EC2 instance로 Aurora에 연결할 instance를 선택합니다.
private subnet만 선택했던 DB subnet group도 설정합니다.
보안그룹은 'demo-aurora-sg' 라는 이름으로 새로 생성하겠습니다.
모든 설정이 끝났으니 Create database를 누릅니다.
조금만 기다리면 클러스터 구축이 완료됩니다. Writer Instance와 Reader Instance가 서로 다른 AZ에 배치된 것을 볼 수 있습니다.
클러스터를 클릭하여 상세 정보를 보면 Endpoint 2개가 생성됐습니다. Writer Endpoint를 통하여 Write(쓰기) 작업, Reader Endpoint를 통하여 Read(읽기) 작업을 진행하면 됩니다.
Write(쓰기) 작업 (Read 또한 가능합니다)
[ec2-user@ip-10-0-6-197 ~]$ mysql -h demo-db.cluster-cacgnhyyutg6.ap-northeast-2.rds.amazonaws.com -P 3306 -u admin -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 194
Server version: 8.0.28 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> CREATE DATABASE demo;
Query OK, 1 row affected (0.004 sec)
MySQL [(none)]> USE demo;
Database changed
MySQL [demo]> CREATE TABLE member (
-> idx INT NOT NULL AUTO_INCREMENT,
-> user_id VARCHAR(20) NOT NULL,
-> password VARCHAR(20) NOT NULL,
-> PRIMARY KEY(idx)
-> );
Query OK, 0 rows affected (0.029 sec)
MySQL [demo]> INSERT INTO member(user_id, password) VALUES ('admin', 'pw1234');
Query OK, 1 row affected (0.004 sec)
Read(읽기) 작업 (Write는 불가합니다)
[ec2-user@ip-10-0-6-197 ~]$ mysql -h demo-db.cluster-ro-cacgnhyyutg6.ap-northeast-2.rds.amazonaws.com -P 3306 -u admin -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 161
Server version: 8.0.28 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> USE demo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MySQL [demo]> SELECT * FROM member;
+-----+---------+----------+
| idx | user_id | password |
+-----+---------+----------+
| 1 | admin | pw1234 |
+-----+---------+----------+
1 row in set (0.004 sec)
MySQL [demo]> INSERT INTO member(user_id, password) VALUES ('user01', 'pw5678');
ERROR 1836 (HY000): Running in read-only mode
이번엔 Writer instance를 Failover 시켜 Reader instance가 Promote 되는지 확인해봅시다.
Reboot 전에 EC2 Instance에서 반복문을 사용하여 Writer Database IP가 바뀌는 것을 관찰하겠습니다.
while true; do host demo-db.cluster-cacgnhyyutg6.ap-northeast-2.rds.amazonaws.com | grep address; sleep 1; done
Writer instance를 선택하고 Actions > Failover를 누릅니다.
Failover를 눌러 Failover를 진행합니다.
잠시 후, Console에서 Reader instance와 Writer instance가 뒤바뀐 것을 알 수 있습니다.
EC2 Instance에서 출력되는 IP와 DNS 또한 딜레이없이 바뀌는 것을 볼 수 있습니다.
오늘의 글은 여기까지입니다. 감사합니다!
참고
https://youtu.be/koDIV5QMw38?si=zF-QRQQjhahuL6VK
https://www.udemy.com/course/best-aws-certified-solutions-architect-associate/
'AWS' 카테고리의 다른 글
[AWS] Terraform VPC Module 사용 (0) | 2023.10.06 |
---|---|
[AWS] Global Aurora (Cross Region Read Replica, Global Database) (0) | 2023.10.02 |
[AWS] RDS Read Replicas & Multi AZ (2) | 2023.09.30 |
[AWS] RDS의 개념과 기본 실습 (0) | 2023.09.29 |
[AWS] EKS - AWS Load Balancer Controller (0) | 2023.09.26 |