-
RDS (Aurora for Mysql) 운영 방법AWS Architecture 2022. 7. 16. 19:42
AWS에서 RDS를 운영하다 보면 Master RDS 와 Read Replica RDS 로 2대구성으로 운영을 하게 됩니다.
어플리케이션에서 select sql 은 Read Replica RDS로 Insert, Update sql 은 Master RDS로 실행하면 가장 좋지만
SQL Split하는 방법을 애플리케이션쪽에서 하지 않고 인프라쪽에서 하는 방법이 있습니다.
SQL Split이란 Select Sql은 Read Relica로 Insert, Update Sql은 Master에서 실행하도록 Sql를 나누어 주는 것입니다.
heimdal database proxy 를 이용하는 방법
자세한 내용은 아래 AWS 블로그에 자세하게 설명되어 있습니다.
Using the Heimdall Proxy to Split Reads and Writes for Amazon Aurora and Amazon RDS | Amazon Web Services
Horizontally scaling a SQL database involves separating the write-master from read-only servers. This allows the write server to perform dedicated write operations rather than processing redundant read queries. However, writing to one node and reading from
aws.amazon.com
SSM Change Calendar + Eventbridge Rule를 이용한 RDS Auto ScaleUp / ScaleDown
굳이 SQL Split를 이용하지 않고 RDS 를 Scale Up하는 방법도 있습니다.
제가 운영하는 쪽에서는 아침 6시30분에 Read Replica 를 Scale Up해서 Failover하여 Read Replica -> Master로 승격하여 운영하다가 저녁 9시에 Failover하여 Read Replica (원래 Master) -> Master로 승격시키고 원래 Read Replica 를 Scale Down 하여 운영하고 있었습니다.
Eventbridge Rule 의 Failover ( Reader를 Master로 승격 ) Cron설정 (월 ~ 금 아침 6시 30분 실행)
cron(30 21 ? * SUN-THU *)
Eventbridge Rule 의 Failback ( Master를 Reader로 강등 ) Cron설정 (월 ~ 금 저녁 9시 00분 실행)
cron(0 12 ? * MON-FRI *)
Eventbridge Rule 시간은 전부 UTC로 설정합니다.
Eventbridge Rule를 사용하면 Cron 설정으로 월~금만 Scale Up하게끔 할 수 있지만 공휴일인 경우에는 Scale Up하지 않도록 매번 수동으로 Eventbridge Rule를 Diable해야 했습니다.
그래서 자동으로 공휴일에도 Scale Up되지 않도록 Cron 설정만으로는 안되고 캘린더랑 연동할 수 있는 방법이 있지 않을까 해서 찾은게
SSM Change Calendar 라는 서비스가 있었습니다.
자세한 내용은 https://cloudpark-iolle.tistory.com/8 를 참조해 주세요.
최종적으로 SSM Change Calendar(holiday-calendar) -> Lambda(calendar-event rule) -> Eventbridge Rule(failoverrule-diable lambda) -> EventBridge Rule (rds-failover rule) -> Lambda(rds-auto-failover) -> RDS 로 이어지는 구성이 됩니다.
최종 Diagram
RDS Auto Failover by Calendar 여기서 RDS의 Size가 크면 클수록 ScaleUp / ScaleDown 실행시 Lambda 실행시간(15분)을 초과하는 경우가 있을 수 있습니다.
그래서 EventBridge Rule(rds-event rule)를 설정하여 Lambda는 ScaleUp만 실행시키고 종료하고 EventBridge Rule(rds-event rule)로 RDS Event를 캐치하여 Failover / Failback를 실행하도록 Lambda를 기동시키도록 하였습니다.
RDS Event로는 RDS-EVENT-0014 (InstanceClassModifyEndEventID) 와 RDS-EVENT-0071 (FailOverEndEventID)만 감시하도록 했습니다.
Event Flow
RDS Event Flow 반응형