AWS RDS는 고가용성을 보장하기 위해 기본 DB 인스턴스(primary DB instance)와 동기화된 보조 DB 인스턴스(synchronous secondary DB instance)를 설정할 수 있다.
문제가 발생하면 기본 인스턴스에서 보조 인스턴스로 자동 장애 조치(failover)가 이루어진다.
읽기 부하(read load)를 분산하고 성능을 향상시키기 위해 읽기 복제본(read replicas)을 사용할 수 있다.
read replica는 DB 인스턴스의 읽기 전용 복사본 이다.
애플리케이션에서 읽기 복제본으로 쿼리를 라우팅하여 primary DB instance의 부하를 줄일 수 있다.
소스 DB 인스턴스에서 읽기 복제본을 만들기 위해 Amazon RDS는 DB 엔진의 내장 복제 기능을 사용 한다.
소스 DB 인스턴스에서 읽기 복제본을 생성한 하면 소스 DB 인스턴스는 primary DB instance가 된다.
primary DB instance를 업데이트할 때 Amazon RDS는 read replica에 비동기식으로 이를 복사합니다.
클라이언트는 primary DB instance에 대한 읽기/쓰기 액세스 권한과 read replica에 대한 읽기 전용 액세스 권한을 가진다.
Read Replica vs Multi-AZ
Multi-AZ 복제는 서비스가 항상 가동해야 하는 가용성을 위한 것이지, 부하 분산을 통한 성능 향상이 목적이 아니다.
Read Replica 기능은 Disaster Recovery(재해 복구) 용도가 아니다. 즉, 안정성을 위한 서비스가 아닌 퍼포먼스를 위한 서비스 이다.
Multi-AZ 복제본 같은 경우는 그저 안정성을 위해 아무것도 하지않는 인스턴스를 미리 준비해 가동하는 것이지만, Read Replica는 실제로 다른 EC2들과 상호작용을 하기 때문이다.
Read Replica는 Multi-AZ 와 달리 fail over(자동복구)가 불가능하다.
만약 RDS Primary가 고장났을경우, 관리자가 직접 수동으로 쓰기 DNS를 복제본에 연결해 복구를 해줘야 한다.
RDS 생성 시 VPC, 서브넷 그룹, 가용영역을 필수적으로 설정해야 하는데 해당 설정을 통해 어떤 서브넷 하위에 RDS가 생성될지 자동으로 지정되고 해당 서브넷의 IP 범주 안에서 Private ip가 할당된다.
서브넷 그룹은 2개 이상의 가용영역이 다른 서브넷을 포함해야만 생성이 가능하다.
만약 RDS의 가용영역을 기본 설정 없음 으로 선택하면 서브넷 그룹에 속하는 서브넷들의 가용영역중 하나가 임의로 할당되는데 퍼블릭 액세스를 가능하게 설정할 경우 Public 서브넷이 존재한다면 해당 서브넷에 할당되고 불가능 하게 설정 했다면 Private 서브넷에 할당된다.
하지만 퍼블릭 액세스를 가능하게 설정했다 하더라도 Private 서브넷 하위에 RDS가 생성될 경우 외부 접근이 불가능하다.
RDS의 인스턴스 클래스를 변경하면 새로운 네트워크 인터페이스가 생성되어 Public, Private IP가 모두 변경된다. 기존 네트워크 인터페이스는 삭제 된다.
RDS의 Private IP 주소를 알고 싶으면 동일한 VPC 내에 위치한 EC2에서 nslookup [rds엔드포인트] 명령어를 실행하면 알 수 있다.
Public IP 주소를 알고 싶으면 다른 VPC 내에 위치한 EC2에서 위의 명령어를 실행하면 알 수 있다.
하지만 RDS 인스턴스의 IP주소는 동적으로 변하므로 static IP address 나 Elastic IP 를 할당할 수 없다.
1. 인스턴스가 중지되었다가 시작 되었을 경우, 재시작의 경우에는 변하지 않는다.