땡글이LAB

[Devops] RDS - Multi AZ(이중화), Read Replica, 이중화 테스트 본문

Devops

[Devops] RDS - Multi AZ(이중화), Read Replica, 이중화 테스트

땡글이B 2022. 7. 5. 18:28

RDS 서비스에서 Database를 생성하기 전에 먼저 해둬야할 "사전작업" 이 있다. 

  • 보안그룹 생성
  • RDS를 위한 서브넷 그룹 생성

 

RDS - Database 생성 (Multi AZ deployment)

RDS 를 통해 Database를 만들다보면, 이렇게 템플릿을 선택하는 란이 있는데 특별한 차이가 있는 것이 아니라, 템플릿에 따라서 스토리지(Storage)의 범위가 자동으로 결정된다. 

하지만, "프리티어"를 선택하게 되면, Multi Availabilty Zone으로 이중화 구성 옵션이 비횔성화된다는 점에 주의해야 한다.

 

 그리고 "가용성 및 내구성(Availabilty & durabilty)" 란에서는 Multi AZ deployment 에서 "대기 인스턴스 생성 (Create a standby instance)"를 선택해준다. 이는 복수의 가용영역에 데이터베이스를 생성하겠다는 것을 의미한다.

 

 참고로 위와 같이 Multi AZ deployment(다중 AZ 배포)를 하게 되면, 서브넷 그룹에 등록된 임의의 서브넷 한 개에 Master DB가 만들어지게 되고 다른 서브넷에 Standby DB가 만들어지게 된다.

 

RDS의 DB에 퍼블릭으로 접근하지 못하도록 "퍼블릭 액세스"란에 '아니오'를 선택해준다. 이렇게 하게 되면 사진에서 보이는 것과 같이 외부에서는 DB에 접속이 불가능하고 Database가 존재하는 VPC 내부에서만 Database에 접근할 수 있다. 

 그리고 "백업(Backup)" 란에서 자동 백업을 비활성화하거나 "백업 보존 기간(Backup retention period)" 를 0일 로 설정하면 Read-replica Database를 만들 수 없게 된다는 점에 주의해야 한다.  

 

 

 위와 같이 설정을 하고 마무리한 뒤 RDS 데이터베이스의 "구성"을 들어가서 확인해보면 다음과 같이 Multi AZ(다중 AZ) 에 'yes'라고 나오게 된다.

  • 설정을 할 때에 "Multi AZ deployment" 에서 '대기 인스턴스 생성(Create a standby instance)"을 선택해줬기 때문이다.

그리고 보조 영역(Secondary Zone)에서 데이터베이스의 영역(Region)과는 다르게 설정된다. 보조 영역에서는 Standby instance 가 생성되고 데이터베이스의 영역("리전 및 AZ")에서는 Master instance 가 생성된다. 즉, 데이터베이스가 이중화로 구성되어 있는 것이다.

 

EC2 서비스의 '네트워크 인터페이스'를 확인해보면 다음과 같이 두 개의 네트워크 인터페이스가 RDS 서비스에서 사용되고 있는 것을 확인할 수 있다. 두 개의 각 인터페이스는 Private IP 주소가 할당되어 있는 것도 확인할 수 있다. 

 이렇게 데이터베이스 인스턴스가 두 개의 가용영역에 이중화로 구성되어 있고 각각의 데이터베이스 인스턴스가 Private IP를 가지고 있는 것을 확인할 수 있었다. 

이제 두 개의 가용영역에서 Database에 접근해서 데이터를 읽어오거나 추가 및 삭제를 할 수 있다.

 

 

RDS - Read Replica 생성

 

 생성된 Database의 상세 페이지에 들어가서 '작업(Action)'에서 '읽기 전용 복제본 생성(Create Read replica)' 를 누른다.

 

 그리고 본 예제에서는 Read Replica를 하나의 영역에서만 생성되도록 하고, 퍼블릭 액세스는 차단하고, 보안 그룹도 RDS와 마찬가지로 같은 보안 그룹을 선택해준다. 그리고 '가용영역(Availbilty Zone)'은 Master instance가 만들어진 영역에 만들어주도록 한다. 

만드는 법이 간단해서 따로 이미지 첨부는 하지 않았다.

 Read Replica를 만들고 나면, Database에서 삽입 및 삭제 혹은 수정이 있어도 잘 읽어오는 것을 확인할 수 있다. 또한 Read Replica를 위한 네트워크 인터페이스도 잘 생성된 것을 확인할 수 있었다. (이전에는 RDS와 관련된 네트워크 인터페이스가 2개였지만, 3개가 됐다)

 

Failover를 통한 이중화 테스트

dig 명령어를 통해 "Master instance"의 Private IP 주소를 확인했다. EC2 서비스의 "네트워크 인터페이스"란을 보면, Master instance와 같은 가용영역에 있는 Read Replica의 Private IP 주소와 Master instance와 다른 가용영역에 존재하는 Standby instance의 Private IP 주소도 확인할 수 있다.

사진에서 가린 부분들은 RDS Database의 엔드포인트이다. 

RDS database(Read replica 아님!) 의 '작업(Action)'에서 '재부팅(Rebooting)'을 누른 뒤,  '장애 조치로 재부팅하시겠습니까? (Reboot with Failover?)' 란에 체크를 해준 뒤 재부팅시킨다. 재부팅이 완료되면, dig 명령어로 다시 한 번 RDS database의 엔드포인트를 입력해본다.

 확인해본 결과, 이전에 10.1.6.0/24 였던 IP 주소가 10.1.5.0/24 IP 주소로 바뀌었다. 즉 이것이 의미하는 바는 Master instance가 재부팅되면서, Master instance와 다른 가용영역에 존재하던 Standby instance가 Master database의 역할을 하게 된 것이다.

 그리고 재부팅된 기존 Master database는 Standby database가 된 것이다. 

 

References

'Devops' 카테고리의 다른 글

[Devops] Auto scaling - Scale in/out  (0) 2022.07.06
[Devops] Application Load Balancer  (0) 2022.07.04
[Devops] Bastion host와 NAT Gateway  (0) 2022.07.04
[Devops] EFS (Elastic File System)  (0) 2022.07.04
[Devops] Elastic IP (탄력적 IP) - AWS  (0) 2022.07.04
Comments