Cloud/AWS

RDS Healthcheck Disaster Recovery

ISFJ 개발자의 이야기 2026. 2. 11. 23:39

이번 글에서는 AWS RDS를 Multi-Region 구조로 구성하여 고가용성을 확보하는 방법에 대해 정리해보겠습니다.

단일 리전에 RDS를 구성할 경우, 해당 리전에 장애가 발생하면 데이터베이스에 접근할 수 없게 되는 치명적인 문제가 발생할 수 있습니다. 이러한 리전 단위 장애(Region Failure)에 대비하기 위해, RDS를 서로 다른 리전에 구성하고 장애 발생 시 자동으로 다른 리전의 RDS로 트래픽을 전환하는 Disaster Recovery(재해 복구) 아키텍처를 설계해보겠습니다.

 

구축 방안

우선 아래의 Github 링크를 통해 인프라를 테라폼을 이용해 구성해야 합니다.

https://github.com/learning-wlstmd/db-health

 

GitHub - learning-wlstmd/db-health

Contribute to learning-wlstmd/db-health development by creating an account on GitHub.

github.com

 

인프라를 모두 구성 완료 했다면 다음으로 서로 다른 리전에 있는 VPC를 Peering으로 연결해줍니다.

다음으로 Accept를 해주어 Peering을 해줍니다.

  • 각 리전의 public, private 모든 라우팅 테이블에 피어링 규칙 생성을 해줘야 합니다.
    • ap-northeast-2 VPC CIDR : 10.101.0.0/16
    • us-east-1 VPC CIDR : 10.100.0.0/16

다음으로 us-esat-1 리전에 있는 EC2 서버에 접근해 아래의 명령어를 실행해줍니다.

  • Terraform으로 인프라 구성 시 db-health.py 파일이 자동으로 서버에 생성이 됩니다.
AP_ENDPOINT=$(aws rds describe-db-cluster-endpoints --query "DBClusterEndpoints[?EndpointType=='WRITER'].Endpoint" --region ap-northeast-2 --output text)
US_ENDPOINT=$(aws rds describe-db-cluster-endpoints --query "DBClusterEndpoints[?EndpointType=='WRITER'].Endpoint" --region us-east-1 --output text)
sed -i "s|AP_ENDPOINT|$AP_ENDPOINT|g" db-health.py
sed -i "s|US_ENDPOINT|$US_ENDPOINT|g" db-health.py
sudo yum install python-pip -y
pip3 install flask pymysql
nohup python3 db-health.py &

 

다음으로 Route53 Healthcheck를 생성해줍니다.

  • us-esat-1 rds check (IP address 부분은 EC2의 Public IP:5000을 사용하면 됩니다.)

  • ap-northeast-2 rds check (IP address 부분은 EC2의 Public IP:5000을 사용하면 됩니다.)

다음으로 Route53 Private Hosted Zone을 생성해줍니다.

다음으로 생성한 Hosted Zone에 레코드를 생성해줍니다.

아래의 사진과 같이 US 리전에 있는 RDS DNS를 입력 해주고 생성한 US Healthcheck를 선택해줍니다.

마찬가지로 아래의 사진과 같이 AP 리전에 있는 RDS DNS를 입력 해주고 생성한 AP Healthcheck를 선택해줍니다.

마지막으로 아래의 사진과 같이 Failover Records가 Primary, Secondary로 올바르게 생성해줍니다.

Result

테스트를 위해 Cluster를 Stop 상태로 전환해보겠습니다.

US 리전에 있는 DB Cluster를 Stop 해보겠습니다.

아래의 명령어로 MySQL에 접속 및 상태를 확인해보겠습니다.

mysql -h db.demo.local -uadmin -pSkill53##
SELECT SERVER_ID FROM information_schema.replica_host_status;

 

아래의 사진과 같이 Primary RDS인 US 리전에 있는 RDS는 Unhealthy 상태이지만 RDS의 접속이 잘되는 모습을 확인 할 수 있으며 접속한 RDS를 정보를 확인 해보면 Secondary RDS인 AP 리전에 있는 RDS로 전환된 모습을 확인 할 수 있습니다.

 

이것으로 RDS Healthcheck Disaster Recovery 아키텍처 구성글을 마치겠습니다. 감사합니다!

'Cloud > AWS' 카테고리의 다른 글

AWS EC2 Fail2ban  (0) 2026.02.11
Route53 DNSSEC  (0) 2026.01.05
Route53 DNS Query Logging  (0) 2026.01.03
EC2 Connect Endpoint  (0) 2025.12.31
Event Bridge를 이용해 ECR Image Push 감지 후 서버 실행하기  (0) 2025.10.02