Relational Database Service - RDS
- RDS: 관계형 데이터베이스 서비스
SQL을 쿼리 언어로 사용하는 데이터베이스용 서비스
RDS에 DB를 생성해 AWS가 관리한다.
- PostgreSQL
- MYSQL
- MariaDB
- Oracle
- Microsoft SQL Server
- Aurora
- 인스턴스 자체에 DB를 배포하지않고 RDS를 사용하는 이유는 뭘까?
- RDS는 관리형 서비스이다.
DB뿐만아니라 다양한 서비스를 제공
- DB 프로비저닝, OS 패치가 자동화 되어 있다.
- 지속적으로 백업이 생성되 특정 타임스탬프로 복원 가능
- DB 성능을 대시보드에서 모니터링 제공
- 읽기 전용 복제본을 활용해 읽기 성능을 개선
- 재해 복구 목적으로 다중 AZ 설정 가능
- 유지 관리 기간에 업그레이드 가능
- 인스턴스 유형을 늘려 수직 확장
- 읽기 전용 복제본을 추가해 수평 확장
- 파일 스토리지는 EBS에 구성(gp2,io1)
- RDS 인스턴스에 SSH 액세스할 수 없다
- 관리형 서비스이므로 AWS가 서비스를 제공하지만 기본 EC2 인스턴스에는 액세스할 수 없다.
-> EC2 인스턴스에 DB 엔진을 배포할 때 설정할 모든 것을 AWS가 제공해주기 떄문에 괜찮다.
- RDS 스토리지 오토 스케일링
RDS로 DB를 만들때 용량을 20GB로 설정했는데 나중에 공간이 부족해 질 수도 있다.
이때, 스토리지 오토 스케일링 기능이 활성화 되어 있으면 자동으로 스토리지를 확장해준다.
-> 용량 확장을 위해 DB를 다운 시킬 필요가 없다.
- 이를 위해서는 최대 스토리지 임곗값을 설정해야하는데
예를 들어, 할당된 용량에서 남은 용량이 10% 미만이면 스토리지를 자동으로 수정
또 다른 예, 스토리지 부족 상태가 5분 이상 지속되거나 지난 수정으로부터 6시간 지났을 경우 수정
- 워크로드를 예측할 수 없는 애플리케이션에 유용하다.
모든 DB 엔진에 모두 지원되는 기능이다.
RDS 읽기 전용 복제본과 다중 AZ
RDS 읽기 전용 복제본
왜 필요한가?
너무 많은 요청이 있을때 충분히 스케일링하기 힘들기 때문에 읽기를 스케일링하고자 할때 사용.
- 최대 15개까지 읽기 전용 복제본 생성
- 동일한 가용 영역 또는 가용 영역이나 리전을 걸쳐서 생성될 수 있다.
- 주 RDS 인스턴스와 두 읽기 전용 복제본 사이에는 비동기식 복제가 발생한다.
-> 애플리케이션에서 데이터를 복제하기 전 읽기 전용 복제본을 읽어들이면 모든 데이터를 얻을 수 있다.

- 읽기 전용 복제본을 데이터베이스로 승격시켜 이용할 수 있다.
-> 권한설정하면 된다. 그러면 이 복제본은 복제 메커니즘을 완전 탈피하고, 자체적인 생애 주기를 갖는다.
- 읽기 전용 복제본을 사용하려는 경우 주요 애플리케이션에 있는 모든 연결을 업데이트 해야 하며, 이를 통해서 RDS 클러스터 상의 읽기 전용 복제본 전체 목록을 활용할 수 있다.
- Use Cases
- 프로덕션 DB
- 프로덕션 DB에서는 메인 RDS 데이터베이스 인스턴스에 대한 읽기 및 쓰기가 수행된다.
- 이때 새로운 팀이 와서 데이터를 기반으로 몇 가지 보고와 분석을 실시하고자 한다면
- 보고 애플리케이션을 메인 RDS 데이터베이스 인스턴스에 연결하면 오버로드가 발생하고 생산 애플리케이션의 속도가 느려진 텐데
- 이럴때 새로운 워크로드에 대한 읽기 전용 복제본을 생성하는 것이다.
- 읽기 전용 복제본을 생성하면 메인 RD DB 인스턴스와 읽기 전용 복제간 비동기식 복제가 발생해
- 보고 애플리케이션이 생성한 읽기 전용 복제본에서 읽기 작업과 분석을 실행하게 되는것.
- 이 경우 생산 애플리케이션은 전혀 영향을 받지 않는다.
- 읽기 전용 복제본이 있는 경우 select 명령문만 사용해야하는 점을 주의하자.

- 네트워킹 비용
AWS는 주로 하나의 가용 영역에서 다른 가용 영역으로 데이터가 이동할때 비용이 발생하게 된다.
그러나 예외가 존재한다면 이는 관리형 서비스에서 나타날 것이다.
RDS 읽기 전용 복제본은 관리형 서비스이다.
그래서 읽기 전용 복제본이 다른 AZ 상이지만 동일한 리전 내에 있을 때는 비용이 발생하지 않는다.
그러나 다른 리전에 있을때는 비용이 발생한다.

다중 AZ
다중 AZ: 주로 재해 복구에 사용

- 가용 영역 AZ A에서 읽기/쓰기를 수행하는 마스터 DB 인스턴스를 동기식으로 AZ B에 스탠바이 인스턴스로 복제한다.
- 마스터 DB의 모든 변화를 동기적으로 복제하는 것인데 -> 마스터에 쓰이는 변경 사항이 대기 인스턴스에도 그대로 복제된다는 것
즉, 하나의 DNS 이름을 갖고 애플리케이션 또한 하나의 DNS 이름으로 통신하며 마스터에 문제가 생길때에도 스탠바이 DB에 자동으로 장애 조치가 수행된다.
- 이를 통해 가용성을 높일수 있기 때문에 다중 AZ라 부른다
- 전체 AZ 또는 네트워크가 손실될 때에 대비한 장애 조치
- 마스터 DB 인스턴스 또는 스토리지에 장애가 발생할 때 스탠바이 DB가 새로운 마스터가 될 수 있도록 하는 것.
- 앱에 수동으로 조치를 취할 필요가 없다.
자동으로 DB에 연결이 시도되고, 장애 조치가 필요할때에도 스탠바이가 마스터로 승격되는 과정이 자동으로 이루어짐.
- 스케일링에 이용되지 않는다. -> 대기 목적 하나만 수행(읽기/쓰기 X)
만약 재해복구를 대비해 읽기전용 복제본을 다중 AZ로 설정 할 수 있는가?
=>가능하다
단일 AZ에서 다중AZ

다운타임이 없음 -> 단일AZ에서 다중AZ로 전환할 때 DB를 중지할 필요가 없다.
DB 수정을 클릭하고 다중 AZ 기능을 활성화 하기만 하면된다.
이를 통해 RDS DB 인스턴스는 마스터를 가지고 동기식 복제본인 스탠바이 DB를 확보한다.
(내부작업 과정)
1. 기본 DB의 RDS가 자동으로 스냅샷을 생성한다.
2. 스냅샷은 새로운 스탠바이 DB에 복원된다.
3. 스탠바이 DB가 복원되면 두 DB간 동기화가 설정 된다.
4. 동기화 설정이 되면 스탠바이 DB가 메인 RDS DB내용을 모두 수용해 다중 AZ 설정 상태가 된다.
RDS Custom
RDS에서는 기초 OS나 사용자 지정 기능에 액세스할 수 없다.
그러나 RDS Custom에서는 가능하다.
-
RDS Custom이 다루는 제품
오라클
Microsoft SQL Service
-
RDS Custom: Oracle,Microsoft SQL Service 통해 OS 및 DB 사용자 지정 기능에 액세스할 수 있게 해주는 역할.
RDS를 통해 AWS에서의 데이터베이스 자동화 설정, 운영, 그케일링의 장점을 모두 챙길 수 있다.
여기에 RDS Custom옵션을 추가하면 기저 데이터베이스와 운영체제에 액세스 가능.
-> 내부 설정 구성, 패치 적용, 네이티브 기능 활성화 가능, SSH|SSM 세션 관리자를 사용해 RDS 뒤에 있는 기저 인스턴스에 액세스 가능
- 사용자 지정 설정을 사용하려면 RDs가 수시로 자동화, 유지관리, 스케일링 작업을 수행하지 않도록 자동화 기능을 꺼두어야 한다.
- 기저 인스턴스에 액세스가 가능하기 때문에 문제를 대비한 스냅샷을 만들어두는 것이 좋다.
RDS vs RDS Custom
RDS는 DB 전체를 관리, OS와 나머지는 AWS에서 관리
RDS Custom는 Oracle과 Microsoft SQL Server에서만 사용가능하고, OS와 DB에 대한 관리자 권한 전체를 갖게 되는 것.