본문 바로가기
AWS

AWS Section 8. RDS+Aurora+ElasticCache

by _비니_ 2024. 9. 27.

📌 RDB (Relational Database)

  • RDS는 관계형 데이터베이스 서비스의 약자
  • SQL을 쿼리 언어로 사용하는 DB용 관리형 DB 서비스
  • 클라우드에서 AWS가 관리하는 RDS 서비스인 데이터베이스를 만들 수 있음
    • Postgres
    • MySQL
    • MariaDB
    • Oracle
    • Microsoft SQL Server
    • IBM DB2
    • Aurora (AWS 독점 DB)

 

💡 RDS 의 주요 특징

_ EC2에 DB를 배포하는 것보다 RDS를 사용하는 것이 더 유리

 

💡RDS는 관리형 서비스이므로 단순히 DB 제공 외에도 많은 서비스 제공💡

  • 자동화된 운영
    • 프로비저닝 및 운영 체제 패치가 자동으로 이루어짐
    • 지속적인 백업특정 시점 복원(Point in Time Restore) 가능.
    • 모니터링 대시보드 제공으로 데이터베이스 성능 모니터링 가능.
  • 읽기 복제본 (Read Replicas)
    • 읽기 성능을 향상시키기 위한 복제본 설정 가능.
  • 다중 가용 영역 (Multi-AZ)
    • 재해 복구(Disaster Recovery)를 위한 다중 가용 영역 설정 가능.
  • 확장 기능
    • 수직적 확장: 인스턴스 크기 증가.
    • 수평적 확장: 읽기 복제본 추가.
  • EBS 스토리지
    • RDS 스토리지는 EBS (Elastic Block Store)로 지원됨
  • SSH 접근 불가
    • RDS 인스턴스에는 SSH를 사용할 수 없으며, AWS에서 모든 관리가 이루어짐

 

📌 RDS - 스토리지 오토스케일링 (시험)

  • 자동 스토리지 확장
    • RDS는 데이터베이스 스토리지가 부족하면 자동으로 스토리지를 확장함

  • 사용자가 수동으로 스토리지 확장 작업을 할 필요가 없음.
  • 최대 스토리지 임계값을 설정해야 하며, 무한 확장을 방지할 수 있음
  • 자동 스케일 조건
    • 할당된 스토리지의 10% 미만이 남고,
    • 5분 이상 스토리지 부족 상태가 지속되며,
    • 마지막 수정 이후 6시간이 지난 경우 스토리지가 자동으로 확장됨
  • 유용성
    • 예측 불가능한 업무량을 가진 애플리케이션에서 매우 유용하며, RDS용 모든 데이터베이스 엔진에서 지원됨

 

📌 RDS 읽기 전용 복제본 (Read Replicas)

  • 목적: 읽기 성능을 향상시키기 위해 사용.

 

특징:

  • 최대 5개의 읽기 전용 복제본 생성 가능.
  • 동일 AZ, 다른 AZ, 또는 다른 리전에 복제본 생성 가능.
  • 주된 RDS DB와 두 읽기 전용 복제본 사이에 비동기식 복제가 발생 (비동기식 : 결국 읽기가 일관적으로 유지된다는 것을 뜻함)
  • 읽기 전용 복제본을 독립적인 데이터베이스로 승격 가능.
    • 이후에는 복제 메커니즘을 완전히 탈피
  • 애플리케이션 연결 업데이트 필요
    • 애플리케이션이 복제본을 활용하려면 애플리케이션의 모든 연결을 업데이트해야 함.
    • 이를 통해 RDS 클러스터 상의 읽기 전용 복제본 전체 목록 활용 가능
  • 🚨 사용 제한: 읽기 전용 복제본은 SELECT 명령문에만 사용 가능!! (INSERT, UPDATE, DELETE는 불가능).

Use cases

  • 메인 RDS에서 인스턴스에 대한 읽기, 쓰기가 수행됨
  • 다른 팀이 와 우리의 데이터를 기반으로 보고 및 분석을 실시한다 했을 때 읽기 전용 복제본을 생성!!>> 메인 RDS DB와 읽기 전용 복제본 간 비동기식 복제가 발생
  • Reporting application에서 데이터를 읽을 때, production application 에 부담을 주지 않고 복제본에서 읽기 작업을 수행함으로써 성능 저하를 방지.

 

📌 RDS 읽기 전용 복제본 - 네트워크 비용

  • 동일 리전 내에서의 복제:
    • 동일 리전의 다른 AZ에 있는 읽기 전용 복제본으로 비동기 복제가 이루어질 경우, 네트워크 비용이 무료
    • 크로스 리전 복제:
      • 서로 다른 리전으로 복제할 경우, 네트워크 복제 비용이 발생..

 

📌 RDS 다중 AZ (Multi-AZ) (재해 복구용)

  • 목적: 재해 복구(Disaster Recovery)를 위한 설정.

  • 가용영역 AZ A에서 읽기와 쓰기를 수행하는 마스터 데이터베이스 인스턴스
  • 그리고 마스터 데이터베이스의 모든 변화를 동기적으로 AZ B에 복제
    • 이는 마스터 애플리케이션의 변경사항이 대기 인스턴스에도 그대로 복제된다는 것을 의미함
    • 즉 하나의 DNS 이름을 가지고 애플리케이션 또한 하나의 DNS 이름으로 통신해 마스터에 문제가 생길 때도 AZ B에 자동으로 장애 조치가 수행됨 (가용성👆🏻)

특징 정리

  • 동기화 복제(SYNC Replication): 마스터 인스턴스에서 변경된 모든 데이터가 스탠바이 인스턴스에 동기식으로 복제됨.
  • 자동 장애 조치(Failover): 가용 영역 손실, 네트워크 실패, 인스턴스 또는 스토리지 장애 시 자동으로 스탠바이 인스턴스로 장애 조치됨.
  • 애플리케이션 수정 불필요: 장애 발생 시 애플리케이션이 자동으로 스탠바이로 연결되므로 수동 개입이 필요 없음.
  • 다중 AZ 가능 But 확장 목적이 아님: 다중 AZ는 성능 확장이 아닌, 장애 대비용으로 사용.

 

📌 단일 AZ에서 다중 AZ로의 전환

  • 제로 다운타임 (다운타임 없음)
    • 데이터베이스를 중지할 필요 없이 다중 AZ로 전환 가능.
    • ‘수정’만 누르면 됨
  • 작업 절차

  • 자동으로 스냅샷 생성.
  • 새로운 AZ에 스탠바이 데이터베이스 복원.
  • 두 데이터베이스 간 동기화 완료.

 

👩🏻‍💻 실습_ Amazon RDS 👩🏻‍💻

 

보안 그룹의 인바운드 규칙 수정

  • 포트 3306의 소스 >> 내 IP 에서 Anywhere-IPv4로 수정

 

📌 Aurora (🌟시험 출제 多) _ 작동방식 이해가 중요

  • Aurora는 AWS의 독점 기술 (오픈 소스 X)
    • 오픈 소스가 아니지만 PostgresMySQL을 지원.
  • 성능:
    • 오로라는 "AWS 클라우드에 최적화된" 제품
    • MySQL RDS보다 5배 빠르고, Postgres RDS보다 3배 빠른 성능.
    • 자동 스토리지 확장: 10GB에서 시작해 최대 128TB까지 자동으로 확장. (설계 방식과 관련 O)
    • 복제본: 최대 15개의 읽기 전용 복제본을 가질 수 있으며, 복제 지연이 매우 짧음.
    • 오로라에서 장애 조치를 수행하는 경우, 즉각적으로 이루어짐
    • 비용: RDS보다 약 20% 더 비싸지만 효율적.

 

📌 Aurora 고가용성과 읽기 확장성

  • 6개의 데이터 복사본을 3개의 AZ에 분산
    • 쓰기 시 6개 중 4개의 복사본이 필요.
    • 읽기 시 6개 중 3개의 복사본이 필요.
    • 즉 읽기에 대한 가용성이 높음
    • 자가 복구P2P 복제를 통해 데이터 손상 시 자동으로 복구.
    • 볼륨은 수백 개의 볼륨에 의지함
    • 자동 장애 조치: 마스터 인스턴스에 장애가 발생하면 30초 이내에 자동으로 장애 조치.

<다이어그램 관점>

  • M 마스터는 쓰기 역할 / R 읽기 복제본은 여러 가용 영역에 분산되어 읽기 작업을 처리함
  • 3개의 가용 영역(AZ)
    • 다이어그램에는 3개의 가용 영역이 있음. 각 가용 영역은 데이터 복제를 통해 데이터를 보관
      • 각 가용 영역에 데이터가 분산 저장되는데, 그림 아래쪽에 나오는 여러 색깔의 블록은 데이터가 서로 다른 AZ에 나뉘어 저장되는 방식을 보여줌
        • 각 색깔은 데이터 블록을 의미하며, 같은 데이터를 여러 가용 영역에 복제하여 저장. 예를 들어, 파란색 데이터는 AZ 1, AZ 2, AZ 3 모두에 복제되어 저장됨
  • 공유 스토리지 볼륨
    • 각 가용 영역에는 공유 스토리지 볼륨이 있으며, 이는 복제, 자가 복구, 자동 확장 기능을 갖추고 있음
    • 데이터가 여러 AZ에 걸쳐 복제되어 있어 높은 내구성을 제공
  • 장애 복구
    • 만약 마스터 인스턴스에 장애가 발생하면, 다른 읽기 전용 복제본이 마스터 역할을 대체할 수 있음. 이 장애 조치는 30초 이내에 완료됨
  • 확장성 및 내구성
    • 시스템은 데이터를 자동으로 확장하고 복제하며, 만약 데이터에 문제가 생겨도 자동으로 복구됨
  • 복제본
    • 각 AZ에 걸쳐 여러 개의 데이터 사본이 존재하며, 최대 15개의 읽기 전용 복제본이 존재할 수 있음. 이를 통해 많은 양의 읽기 작업을 효율적으로 처리할 수 있음.

 

📌 Aurora DB Cluster

  • 클라이언트(Client)
    • 클라이언트는 데이터베이스와 상호작용하는 사용자.
    • 클라이언트는 데이터베이스에 데이터를 읽고 쓰는 요청을 보냄
  • Writer Endpoint
    • Writer Endpoint는 데이터베이스에 쓰기 작업을 담당하는 엔드포인트
    • 이 엔드포인트는 항상 마스터 인스턴스(M)를 가리킴.
    • 즉, 클라이언트가 데이터를 저장할 때 Writer Endpoint를 통해 마스터 인스턴스로 데이터를 보냄
    • DNS 이름으로 제공되며, 마스터 인스턴스에 장애가 발생해도 클라이언트는 계속해서 같은 Writer Endpoint로 연결을 시도할 수 있음. Aurora가 자동으로 새로운 마스터로 리디렉션을 해줌
  • Reader Endpoint
    • Reader Endpoint읽기 작업을 담당하는 엔드포인트
    • 클라이언트가 데이터를 읽으려고 할 때, Reader Endpoint는 여러 읽기 전용 복제본(R) 중 하나에 연결
    • 로드 밸런싱이 자동으로 이루어져, 여러 복제본 중에서 사용되지 않은 복제본을 골라 작업을 배분. 이를 통해 효율적으로 읽기 성능을 높일 수 있음
    • 로드 밸런싱은 문장 수준이 아니라 연결 수준에서 이루어짐. 즉, 연결이 성립될 때 어떤 복제본으로 연결할지가 결정됨
  • 읽기 전용 복제본(R)
    • 여러 개의 읽기 전용 복제본(R)이 존재하며, 이 복제본들은 오직 읽기 작업만을 처리. 읽기 복제본은 최대 15개까지 만들 수 있으며, 필요에 따라 오토 스케일링으로 개수를 자동으로 조절할 수 있음.
    • Auto Scaling : 읽기 복제본의 수가 증가하거나 감소할 수 있는데, 이는 트래픽 양에 따라 자동으로 조정됨
  • 공유 스토리지 볼륨
    • 아래쪽에 Shared Storage Volume이 있는데, 이 스토리지는 10GB에서 최대 128TB까지 자동으로 확장됨. 즉, 저장 공간이 부족해지면 자동으로 더 많은 데이터를 저장할 수 있도록 확장됨.
    • 이 스토리지는 모든 인스턴스와 공유되며, 읽기 복제본과 마스터 인스턴스가 모두 같은 데이터를 공유하고 사용함

 

📌 Aurora의 주요 기능

  • 자동 장애 조치백업/복구.
  • 격리성 및 보안: 산업 규정 준수.
  • 푸시 버튼 확장: 쉽게 스케일링 가능.
  • 제로 다운타임으로 자동 패치 수행.
  • 고급 모니터링 및 정기적인 유지 관리.
  • Backtrack: 백업 없이도 특정 시점으로 데이터 복구 가능.

 

👩🏻‍💻 실습 👩🏻‍💻

  • writer instance와 reader instance를 위한 다른 인스턴스가 있다는 것
  • 이 둘은 AZ도 다름
  • database-2는 연결하기 이전에 엔드포인트가 2개 있음

 

이 엔드포인트들은 우리의 응용 프로그램이 Aurora에 연결하기 위해 사용해야할 것들

 

 

가능한 작업들

  • 우리가 정책을 생성했을 때, 복제본의 평균 CPU 활용에 기반한 혹은 Aurora 복제본으로의 평균 연결 수에 기반해 읽기 전용 복제본을 확장시킴

 

호환되는 인스턴스로 교체하면, 데이터베이스 클러스터로 다른 리전을 추가할 수 있게 됨! (내가 만든 건 X)

 

📌 RDS 및 Aurora 보안

1. 미사용 데이터 암호화 (At-rest encryption)

  • 데이터가 볼륨에서 암호화됨
  • AWS KMS를 사용하여 마스터와 복제본을 암호화해야 함
  • 암호화는 데이터베이스 생성 시 설정되어야 함.
  • 마스터 DB가 암호화되지 않으면 복제본도 암호화할 수 없음.
  • 기존 비암호화 DB를 암호화하려면, 스냅샷을 생성하고 암호화된 DB로 복원해야 함.

2. 전송 중 데이터 암호화 (In-flight encryption)

  • 클라이언트와 데이터베이스 간의 암호화
  • RDS 및 Aurora는 기본적으로 전송 중 암호화를 지원.
  • 클라이언트는 AWS TLS 루트 인증서를 사용해 데이터베이스와 통신할 수 있음.

3. IAM 인증 (IAM Authentication)

  • RDS와 Aurora는 전통적인 사용자 이름/암호 인증 방식을 사용할 수 있음.
  • IAM 역할을 사용하여 사용자 이름과 비밀번호 없이 인증 가능.
  • 예: EC2 인스턴스의 IAM 역할을 통해 데이터베이스에 직접 연결 가능.

4. 보안 그룹 (Security Groups)

  • 네트워크 접근 제어: 보안 그룹을 사용해 데이터베이스로의 접근을 허용하거나 차단 가능 (특정 포트, IP).

5. SSH 접근

  • RDS와 Aurora는 SSH 접근 불가 (관리형 서비스이므로).
  • 단, RDS Custom을 사용하는 경우 SSH 접근 가능.

6. 감사 로그 (Audit Logs)

  • 데이터베이스 쿼리와 활동 기록을 위한 감사 로그 활성화 가능.
  • 장기 보관을 위해 CloudWatch Logs로 전송 가능.

 

 

📌 RDS Proxy 개요

  • 완전 관리형 데이터베이스 프록시로, RDS 및 Aurora 데이터베이스와 애플리케이션 간의 연결을 관리.
  • 연결 풀링: 애플리케이션이 RDS 프록시에 연결하면, 프록시는 데이터베이스 인스턴스로의 연결을 풀링하여 리소스 소모를 줄임 (CPU, RAM 등).

 

🛠️ RDS Proxy의 주요 기능

  • 서버리스 및 자동 스케일링: 용량 관리를 필요로 하지 않으며, 다중 AZ 지원으로 높은 가용성 보장.
  • 장애 조치 시간 단축: RDS 및 Aurora 장애 조치 시간을 66%까지 줄여줌.
  • 지원하는 데이터베이스: RDS(MySQL, PostgreSQL, MariaDB) 및 Aurora(MySQL, PostgreSQL).
  • 코드 변경 불필요: 애플리케이션 코드를 변경하지 않고 RDS Proxy로 전환 가능.

 

🔒 보안 및 인증

  • IAM 인증 강화: 데이터베이스에 연결할 때 IAM 인증을 사용하도록 설정 가능.
  • AWS Secrets Manager와 연동하여 자격 증명을 안전하게 저장 및 관리.
  • 프록시 접근 제한: RDS Proxy는 VPC 내에서만 접근 가능하며, 공개적으로 접근 불가.

 

👫 Lambda와의 연동

  • Lambda 함수와의 통합: Lambda 함수가 다수의 연결을 빠르게 생성하고 종료하는 상황에서 RDS Proxy가 연결 풀링을 통해 효율적으로 관리.
  • Lambda 함수가 RDS 데이터베이스 인스턴스에 연결할 때 발생하는 연결 과부하를 해결해 줌.

 

👍🏻 장점 요약

  • 데이터베이스 리소스를 절약하고, 연결 효율을 높이며, 장애 조치 시간을 단축하는 동시에 IAM 인증과 보안을 강화해줌.

 

📌 Amazon ElastiCache 개요

  • 목적
    • RDS가 관리형 관계형 데이터베이스를 제공하는 것처럼 ElastiCache는 관리형 Redis 또는 Memcached를 제공
  • 캐시
    • 인 메모리 데이터베이스로 매우 높은 성능과 낮은 대기 시간을 제공하며, 읽기 집약적인 워크로드에서 데이터베이스 부하를 줄여줌
  • 애플리케이션 무상태화
    • 애플리케이션 상태를 캐시에 저장함으로써 무상태 애플리케이션 구현에 도움을 줌
  • AWS 관리
    • AWS는 운영 체제 관리, 패칭, 최적화, 설정, 모니터링, 장애 복구 및 백업을 처리
  • 코드 변경
    • ElastiCache 사용 시 애플리케이션 코드에 많은 변경이 필요. 단순히 활성화만으로 캐시를 사용할 수 있는 것이 아니며, 애플리케이션이 캐시를 쿼리하도록 코드를 변경해야 함

 

💾 ElastiCache 아키텍처_ DB 캐시

  • 애플리케이션이 ElastiCache를 먼저 쿼리하고, 없으면 RDS에서 데이터를 가져와 ElastiCache에 저장
    • 이를 통해 RDS의 부하를 줄여줌
  • 캐시 무효화 전략을 통해 항상 최신 데이터만 사용되도록 해야함!

 

💾 ElastiCache 아키텍처_ 사용자 세션 저장소

  • 사용자가 애플리케이션에 로그인하면 세션 데이터가 ElastiCache에 저장됨
  • 사용자가 다른 인스턴스로 이동할 때 ElastiCache에서 세션 데이터를 불러와 로그인 상태를 유지
  • 이를 통해 애플리케이션을 무상태로 만들 수 있음

 

🆚 Redis vs Memcached

  • Redis

  • 다중 AZ와 자동 장애 조치(Auto-Failover) 지원
  • 읽기 복제본(Read Replicas)을 통해 읽기 확장 및 고가용성 제공
  • 데이터 내구성(AOF) 지원 및 백업/복원 기능
  • 세트 및 정렬 세트(Sorted Sets) 지원

 

  • Memcached

  • 다중 노드를 통한 데이터 파티셔닝(Sharding)
  • 고가용성 없음 (복제 없음)
  • 비지속성 (데이터 영구 저장 안 함)
  • 백업/복원 기능 없음
  • 다중 스레드 아키텍처

 

🤔 캐싱 구현 시 고려사항

  • 데이터 캐시가 안전한가?
    • 데이터가 최신이 아닐 수 있고, 결국 일관성이 유지되지만 시간이 소요될 수 있습니다.
  • 데이터에 캐싱이 효과적인가?
    • 패턴: 데이터가 천천히 변하고 자주 필요한 키가 적은 경우.
    • 안티 패턴: 데이터가 빠르게 변하고 전체 키 공간이 자주 필요할 경우.
  • 데이터 구조가 캐싱에 적합한가?
    • 예를 들어, 키-값 저장이나 집계 결과 캐싱이 적합한 경우.
  • 적합한 캐싱 설계 패턴은 무엇인가?
    • 적절한 패턴을 선택하는 것이 중요합니다.

 

📌 Lazy Loading / Cache-Aside / Lazy Population

  • 장점:
    • 요청된 데이터만 캐싱되어 불필요한 데이터로 캐시를 채우지 않음.
    • 노드 실패가 발생해도 치명적이지 않음(다만 캐시 예열로 인해 대기 시간이 증가).
  • 단점:
    • 캐시 미스로 인한 3번의 네트워크 왕복 발생으로 성능 지연.
    • 캐시의 데이터가 오래되어 최신 상태가 아닐 수 있음.
  • 의사 코드 예시

 

 

📌 Write-Through (데이터베이스가 업데이트될 때 캐시를 추가 또는 업데이트)

  • 장점:
    • 캐시의 데이터는 절대 오래되지 않으며 읽기가 빠름.
  • 단점:
    • 데이터베이스에 데이터가 추가 또는 업데이트되기 전까지는 데이터 누락 발생 가능.
    • 많은 데이터가 캐시에 있지만 실제로는 사용되지 않을 수 있음 (캐시 이탈률).

 

 

📌 Cache Eviction (캐시 제거) 및 Time-to-live (TTL)

  • 캐시에서 데이터 제거는 세 가지 방법으로 발생:
    • 명시적으로 삭제.
    • 메모리가 가득 차서 최근 사용되지 않은 데이터 제거(LRU).
    • 타임 투 리브(TTL)를 설정해 일정 시간이 지나면 삭제.
  • TTL 활용: 리더보드, 코멘트, 활동 스트림 등에서 유용하며, TTL은 몇 초에서 며칠까지 다양하게 설정할 수 있음.

 

 

💡 중요한 사항 요약

  • Lazy Loading은 구현이 쉽고 대부분의 경우에서 유용.
  • Write-Through는 Lazy Loading과 함께 사용하여 성능 최적화를 돕는 방식.
  • TTL 설정은 일반적으로 나쁜 생각이 아니며 적절한 값으로 설정하는 것이 중요.
  • 필요한 데이터만 캐싱해야 하며, 모든 데이터를 캐싱하려 해서는 안 됨.

 

 

📌 Amazon MemoryDB for Redis 개요

  • Redis 호환: Redis와 호환되며 내구성이 뛰어난 인 메모리 데이터베이스 서비스.
  • 초고속 성능: 초당 1억 6천만 건 이상의 요청을 처리할 수 있는 매우 빠른 성능.
  • 내구성 있는 데이터 저장: 다중 AZ 트랜잭션 로그를 사용하여 내구성을 보장하는 인 메모리 데이터 스토리지.
  • 확장성: 10GB에서 100TB 이상의 스토리지를 무리 없이 확장 가능.
  • 사용 사례: 웹 및 모바일 애플리케이션, 온라인 게임, 미디어 스트리밍 등 성능이 중요한 애플리케이션에 적합.

 

 

🛠️ 주요 기능

  • 마이크로서비스와의 적합성: 여러 마이크로서비스가 Redis 호환 인 메모리 데이터베이스에 액세스해야 하는 경우에 적합.
  • 다중 AZ 트랜잭션 로그: 여러 가용 영역에 데이터를 저장하여 빠른 복구 및 데이터 내구성 제공.
  • 인 메모리 속도: 수백 개의 노드에서 인 메모리로 데이터를 저장해 초고속 성능을 제공.
반응형

'AWS' 카테고리의 다른 글

AWS Section 10. VPC 기초  (0) 2024.09.27
AWS Section 9. Route 53  (0) 2024.09.27
AWS Section 7-2. ELB + AS  (0) 2024.09.27
AWS Section 7-1. ELB + ASG  (0) 2024.09.27
AWS Section 6-2. EC2 인스턴스 스토리지  (0) 2024.09.27