본문으로 건너뛰기
김신건의 로그

[AWS] RDS Multi-AZ + Read Replica

· 수정 · 📖 약 3분 · 1,185자/단어 #aws #rds #aurora #database #cloud
RDS, Aurora, Multi-AZ, Read Replica, RDS Proxy, RDS Aurora Serverless v2, Aurora Global Database

정의

RDS (Relational Database Service) = AWS 의 managed RDB. MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Aurora (AWS 자체).

Multi-AZ Deployment

flowchart LR
    Primary["Primary (AZ a)<br/>Master"]
    Primary -->|sync 복제| Standby["Standby (AZ b)<br/>passive"]
    Primary --> Client
    Note["Standby = 읽기 불가<br/>(HA 용)"]
  • 동기 복제.
  • AZ 장애 시 자동 failover (1-2분).
  • Read 분산 불가 (Standby = passive).

Read Replica

flowchart LR
    Primary["Primary"]
    Primary -.async 복제.-> R1["Read Replica 1"]
    Primary -.async.-> R2["Read Replica 2"]
    Primary -.async cross-region.-> R3["Read Replica 3<br/>(다른 region)"]
    Client -->|writes| Primary
    Client -->|reads| R1 & R2 & R3
  • 비동기 복제 (lag 가능).
  • 읽기 부하 분산.
  • Cross-region 가능 (DR).
  • Standalone DB 로 승격 가능.

Aurora vs RDS MySQL/PostgreSQL

RDS MySQL/PGAurora MySQL/PG
스토리지EBSAWS 자체 분산 (3 AZ x 2 복제)
처리량표준3-5배 빠름
백업snapshotcontinuous 백업 (PITR)
Read Replica5개 한도15개 + reader endpoint
Failover1-2분< 30초
가격약간 cheap약간 비쌈
Serverless옵션Aurora Serverless v2

IMPORTANT

2026 신규 = 거의 항상 Aurora. RDS MySQL/PG 보다 비싸지만 더 빠른 + 안정.

Aurora 분산 스토리지

flowchart TB
    Compute["Compute (DB engine)"]
    Compute --> Storage["Cluster Volume (자체)"]
    Storage --> AZa1["AZ a copy 1"]
    Storage --> AZa2["AZ a copy 2"]
    Storage --> AZb1["AZ b copy 1"]
    Storage --> AZb2["AZ b copy 2"]
    Storage --> AZc1["AZ c copy 1"]
    Storage --> AZc2["AZ c copy 2"]
  • 6 copy, 3 AZ.
  • quorum (4/6 write, 3/6 read).
  • 2 copy 손실 OK (가용성), 3 copy 손실 OK (durability).

RDS Proxy

flowchart LR
    Lambda --> RDSProxy["RDS Proxy<br/>(connection pool)"]
    EC2 --> RDSProxy
    RDSProxy -->|pool 재사용| RDS[(RDS)]
  • Connection poolAWS managed 로.
  • Lambda 의 connection 폭증 해결.
  • failover 시간 단축.

Aurora Serverless v2

  • 자동 scaling (0.5 ACU - 128 ACU).
  • cold start 없음 (v1 의 결함 해결).
  • 가변 워크로드 / dev / test.

Aurora Global Database

flowchart LR
    Primary["Primary Cluster (us-east-1)"]
    Primary -.< 1s 복제.-> Sec1["Secondary (eu-west-1)"]
    Primary -.-> Sec2["Secondary (ap-northeast-1)"]
    Note["DR: < 1분 failover<br/>Read: 글로벌 분산"]

백업

종류의미
Automated backup매일 + WAL. PITR (Point-in-Time Recovery)
Manual snapshot수동, 영구
Aurora Backtrack옛 시점으로 DB 자체 회귀 (snapshot 없이)

VPC 내 배치

RDS 인스턴스는 항상 VPC Private Subnet 에 배치. 퍼블릭 서브넷 배치는 절대 금지.

  • DB Subnet Group: 2개 이상 AZ 의 Private Subnet 지정. Multi-AZ 사용 시 필수 조건.
  • Security Group: EC2 SG 에서 RDS SG 로만 인바운드 허용. IP 기반 아님.
  • Bastion Host / SSM: 직접 접속이 필요할 때 SSH Tunnel 또는 AWS SSM Session Manager 활용.
flowchart LR
    App["EC2 / Lambda<br/>(Private Subnet)"] -->|"3306 / 5432"| RDSProxy["RDS Proxy<br/>(Private Subnet)"]
    RDSProxy --> RDS["RDS Primary<br/>(Private Subnet, AZ-a)"]
    RDS -->|"sync"| Standby["Standby<br/>(Private Subnet, AZ-b)"]
    Bastion["Bastion / SSM<br/>(Public Subnet)"] -.->|"SSH Tunnel"| RDS

파라미터 그룹

RDS 인스턴스 파라미터클러스터 파라미터 (Aurora) 가 분리됨.

파라미터영향재시작 필요
max_connections동시 접속 수아니오
innodb_buffer_pool_sizeInnoDB 캐시 크기
slow_query_log느린 쿼리 기록아니오
log_bin_trust_function_creators함수 생성 권한 완화아니오
character_set_server서버 기본 문자셋

IMPORTANT

Static 파라미터 변경은 인스턴스 재시작 이 필요. 프로덕션에서 갑작스럽게 적용되지 않도록 Maintenance Window 시간 확인.

모니터링 (CloudWatch)

지표설명권장 임계치
CPUUtilizationCPU 사용률> 80% 지속 시 업사이즈 검토
FreeStorageSpace남은 스토리지< 20% 알람 설정
DatabaseConnections현재 연결 수max_connections 80% 경보
ReplicaLagRead Replica 복제 지연> 1s 시 read-your-writes 위험
ReadIOPS / WriteIOPSIOPS프로비저닝 IOPS 한도 대비 확인
FreeableMemory여유 메모리< 200MB 알람

Enhanced Monitoring: OS 레벨 (메모리, 프로세스) 지표 추가 (1-60초 간격). Performance Insights: 쿼리별 대기 분석, DB 부하 시각화 (7일 무료, 2년 유료).

업그레이드 전략

유형방법다운타임
Minor 버전자동 또는 수동수 초 (재시작)
Major 버전Blue-Green 권장Blue-Green = 수 초
Aurora MajorBlue-Green 또는 snapshot 복원계획 다운타임 필요

Blue-Green 업그레이드 절차 (RDS 네이티브 지원):

  1. Green = 신 버전 복제 클러스터 자동 생성
  2. 복제 완료 후 동기화 확인
  3. Switchover: 트래픽 전환 (수 초)
  4. 검증 후 Blue 삭제

WARNING

Aurora Major 버전 업그레이드 (예: MySQL 5.7 -> 8.0) 는 호환성 확인 필수. 스토어드 프로시저, 뷰, 트리거의 deprecated 문법 검토 필요.

비용 최적화

항목방법
인스턴스 사이즈CloudWatch CPU/메모리 모니터링 후 rightsizing
Multi-AZDev/Test 환경은 Single-AZ 로 50% 절감
Read Replica리전 내 Reserved Instance 적용 가능
Aurora 스토리지사용량 기반 과금 (max 설정 없음), 읽기 IOPS 별도 과금 주의
Backup 보존자동 백업 보존 기간 최소화 (1-35일, 기본 7일)
Aurora Serverless v2간헐적 워크로드에서 ACU 절감 (0.5 ACU 까지 스케일 다운)

흔한 함정

WARNING

  1. Multi-AZ != Read Replica: Multi-AZ 의 Standby 는 읽기 불가. Read Replica 는 별도.
  2. Aurora major version upgrade: 다운타임 있음. 충분한 테스트 필요.
  3. Read Replica lag: async 복제 특성상 read-your-writes 가 깨질 수 있음.
  4. Aurora storage 비용: 사용량만큼 과금 (max 와 무관). 읽기 IOPS 비용 도 별도.
  5. 파라미터 그룹 수정 후 재시작 누락: Static 파라미터 변경이 반영 안 된 채로 운영 지속.

인스턴스 클래스 선택 가이드

Aurora 와 RDS 모두 인스턴스 클래스 가 성능을 결정.

클래스 계열특징적합한 워크로드
db.t4g.*버스트 가능 (Graviton2)Dev / Test, 낮은 기준 부하
db.m7g.*범용 (Graviton3)웹 애플리케이션
db.r7g.*메모리 최적화대용량 인메모리 캐시, Analytics
db.x2g.*고메모리 (SAP HANA급)초대형 인메모리 DB

IMPORTANT

t 클래스는 CPU 크레딧 소진 시 성능 저하. 프로덕션 지속 부하에는 m 또는 r 계열 사용.

Reserved Instance (1년/3년 약정) 사용 시 On-Demand 대비 최대 70% 절감. 안정적인 워크로드라면 RI 를 우선 검토.

접속 보안 베스트 프랙티스

항목권장
암호화 (전송)SSL/TLS 강제 (require_secure_transport = ON)
암호화 (저장)RDS 생성 시 Encryption at rest 활성화 (KMS)
인증IAM DB 인증 (MySQL/PG 지원, 패스워드 불필요)
SecretsAWS Secrets Manager + 자동 rotation
네트워크VPC Private Subnet + Security Group 최소 권한
-- IAM 인증 토큰으로 접속 (MySQL 예시)
-- 1. IAM 역할에 rds-db:connect 권한 부여
-- 2. 토큰 발급
MYSQL_PWD=$(aws rds generate-db-auth-token \
  --hostname mydb.xxx.us-east-1.rds.amazonaws.com \
  --port 3306 \
  --username iam_user)

-- 3. SSL + 토큰으로 접속
mysql -h mydb.xxx.us-east-1.rds.amazonaws.com \
  --ssl-ca=global-bundle.pem \
  -u iam_user \
  --password="$MYSQL_PWD"

관련 위키

이 글의 용어 (9개)
[AWS] ALB vs NLB: L7 vs L4 로드 밸런서cloud
정의 | | ALB | NLB | (Classic ELB) | |---|---|---|---| | Layer | L7 (HTTP) | L4 (TCP/UDP) | L4 + L7 (…
[AWS] CloudWatch: 메트릭, 로그, 알람cloud
정의 CloudWatch = AWS 의 모니터링 + 로그 + 알람 통합 서비스. 메트릭 수집, 로그 집계, 대시보드, 알람, 이상 감지를 하나의 서비스에서 제공. 사용 상황 | …
[AWS] ECS + Fargate: 컨테이너 오케스트레이션cloud
정의 ECS (Elastic Container Service) = AWS 의 컨테이너 오케스트레이션. K8s 보다 단순하고 AWS 네이티브. Fargate = ECS (또는 EK…
[AWS] IAM: User, Role, Policy, STScloud
정의 IAM (Identity and Access Management) = AWS 의 권한 관리 전부. User, Group, Role, Policy 로 구성. "누가 어떤 리소…
[AWS] KMS: 암호화 키 관리, envelope encryptioncloud
정의 KMS (Key Management Service) = 암호화 키 중앙 관리. envelope encryption + IAM 통합 + 감사 로그. 키 종류 | 종류 | 의미…
[AWS] Secrets Manager + Parameter Storecloud
정의 AWS Secrets Manager = 회전이 필요한 비밀 (DB 패스워드, API key) 을 안전하게 저장/관리하는 서비스. Lambda 기반 자동 회전과 암호화 내장.…
[AWS] VPC: subnet, route, NAT, peeringcloud
정의 VPC (Virtual Private Cloud) = AWS 안의 논리적 격리 네트워크. CIDR 정의 + subnet 분할 + 라우팅. AWS 리소스를 격리된 네트워크에 …
[DB] MySQL / InnoDB: clustered index, redo log, MVCCdatabase-internals
정의 MySQL + InnoDB (기본 스토리지 엔진) 의 clustered index + redo log 기반 행 기반 RDBMS. 웹 / SaaS 의 가장 흔한 backbon…
[DB] PostgreSQL: 프로세스 모델, MVCC, WAL, 확장성database-internals
정의 PostgreSQL 은 오픈소스 ORDBMS. 1986 UC Berkeley POSTGRES 의 후예. MVCC, 확장 가능 타입, JSONB, full-text searc…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기