aws에서 제공하는 서비스로, 관계형 데이터베이스 시스템을 관리해주는 서비스다.
온 프레미스로 서버실에 DB를 둘 수도 있고, EC2에 RDB를 설치해서 사용할 수도 있는데 왜 RDS를 사용하는가?
- DB 서버 구성을 자동으로 제공해줌(Automated provisioning, OS patching)
사용할 RDB, 인스턴스 유형, 스토리지, 네트워크 설정 등만 지정해서 몇 번 클릭만 하면 알아서 뚝딱 만들어줌
aws가 관리하는 DB 인스턴스의 운영에체 보안 업데이트, 성능 개선 패치 등을 자동으로 적용해줌.
- 자동 백업
특정 시점으로 복구 가능한 백업을 알아서 생성해줌
- 모니터링
대시보드에서 DB 성능을 모니터링 할 수 있음
- read replica 생성
읽기 전용 복제본을 활용한 읽기 성능 개선
- Multi AZ 구성
failover, disaster recovery목적으로 다중 가용 영역으로 구성 가능
- 유지관리 시간에 DB 업그레이드 가능
유지관리 시간동안 DB의 메이저, 혹은 마이너 버전 등을 업그레이드 해줌.
- scaliing capability
수직, 수평 확장이 용이함.
- EBS 스토리지 사용(gp2, io1 등)
- 스토리지 auto scailing
스토리지가 부족하면 자동으로 용량을 늘려줌. 스토리지를 수동으로 늘리기 위해 DB 실행을 중단할 필요가 없음.
남은 스토리지 공간이 10프로가 되면 자동으로 스토리지 공간을 확장함.
트래픽을 예측할 수 없는 상황에서 매우 유용함.
자동으로 용량을 늘리니까 프리티어 한도 내에서 사용하려면 storage auto scailing 설정을 꺼놓거나, 혹은 스토리지 확장 범위를 제한하여 프리티어 한도 내에서 할 수 있도록 하는 것임 좋음.
RDS 인스턴스에 ssh 접속이 안됨...(어차피 생성할 때 알아서 다 설정해주니까 별도로 접속해서 DB 설정할 필요 없어서 큰 단점은 아니라고 생각함)
읽기 전용 복제본은 15개 까지 생성 가능, 다른 가용 영역 혹은 다른 리전에 생성할 수도 있음.
읽기 전용 복제본과 마스터 이비 사이에서 비동기식 복제가 발생함.
읽기 전용 복제본에는 SELECT 문만 사용 가능함.
읽기 전용 복제본을 DB로 사용하기 위해 승격 시켜 DB 인스턴스로 만들수도 있음.(승격되면 자체적인 라이프사이클을 가짐)
aws에서는 서로 다른 가용 영역에서 데이터 통신을 할 경우 비용이 발생함.
하지만 관리형 서비스의 경우에는 이 비용이 제외되는 경우가 있음. RDS는 관리형 서비스에 해당함.(동일 리전에 해당해야 함)
예를 들어, 마스터 DB에 업데이트가 일어나면 읽기 전용 복제본에 비동기 복사가 일어나는데 마스터와 레플리카가 서로 다른 가용 영역에 있더라도 관리형 서비스에 해당하기 때문에 복사에 의해 발생하는 네트워크 비용은 부담하지 않아도 된다.
동기식으로 복제하는 스탠바이 DB 인스턴스(대기 인스턴스)가 존재함.
마스터 DB의 모든 변화를 동기적으로 복제함.
마스터 db와 standby db는 하나의 dns name을 가지며, 마스터 db에 문제가 생길 경우 standby db로 failover가 이루어진다.(standby db가 새로운 마스터 db가 됨)
standby db는 scaling 목적이 아니다.
read replica에는 읽기 권한만 있었는데, standby db에는 읽기 접근도 할 수 없다. 단지 대기만 하는 db이며, 문제가 생길 경우를 대비하기 위한 목적이다.
read replica를 multi az로 설정하는 것도 가능하다.
single AZ에서 multi AZ로 변경이 가능하다. 전환하기 위해 DB를 중지할 필요가 없음. RDS의 DB 인스턴스 수정에서 변경할 수 있음.
단일 AZ에서 다중 AZ로 변경 시 RDS에서 마스터 db의 스냅샷을 생성함.
이 스냅샷은 다른 AZ에 생성된 standby db에 복원된다.
복원된 이후 두 db 같에 동기화가 설정됨.