Skip to main content

RDS, Aurora, ElastiCache

RDS

  • RDS는 관계형 데이터베이스 서비스를 의미합니다.
  • SQL을 쿼리 언어로 사용하는 DB를 위한 관리형 DB 서비스입니다.
  • AWS에서 관리하는 클라우드에서 데이터베이스를 생성할 수 있습니다.
  • Postgre
  • MySQL
  • MariaDB
  • Oracle
  • Microsoft SQL Server
  • Aurora (AWS 독점 데이터베이스)

EC2에 DB를 배포하는 것보다 RDS를 사용할 떄의 이점

RDS는 관리형 서비스입니다.

  • 자동 프로비저닝, OS 패치
  • 지속적인 백업 및 특정 타임스탬프로 복원 (특정 시점 복원)
  • 모니터링 대시보드
  • 읽기 성능 향상을 위한 읽기 복제본
  • 재해복구를 위한 다중 AZ(sync) 설정
  • 업그레이드를 위한 유지 관리 기간
  • 확장 기능(수직 및 수평)
  • EBS 지원 스토리지 (gp2 또는 io1)
그러나 인스턴스에 SSH로 연결할 수 없습니다.

RDS Backups

백업은 RDS에서 자동으로 활성화됩니다.

자동 백업:

  • 데이터베이스의 일일 전체 백업 (유지보수 기간 동안)
  • 트랜잭션 로그는 5분마다 RDS에서 백업됩니다.
  • 원하는 시점으로 복원하는 기능 (가장 오래된 백업부터 5분 전까지)
  • 7일 보관 (35일까지 연장 가능)

DB 스냅샷:

  • 사용자가 수동으로 실행
  • 원하는 기간 동안 백업 보존

RDS - Storage Auto Scaling

  • RDS DB 인스턴스의 스토리지를 동적으로 늘릴 수 있습니다.
  • RDS에서 사용가능한 데이터베이스 스토리지가 부족함을 감지하면 자동으로 확장됩니다.
  • 데이터베이스 스토리지를 수동으로 확장하지 마세요.
  • Maximum Storage Threshold (DB 스토리지의 최대 한도)를 설정해야 합니다.

다음과 같은 경우 스토리지를 자동으로 수정합니다.

  • 무료 저장용량은 할당된 저장용량의 10% 미만입니다.
  • 낮은 저장 시간은 최소 5분 동안 지속됩니다.
  • 마지막 수정 이후 6시간 경과

  • 예측할 수 없는 워크로드가 있는 애플리케이션에 유용
  • 모든 RDS 데이터베이스 엔진 지원(MariaDB, MySQL, PostgresSQL, SQL Server, Oracle)

RDS 읽기 확장성을 위한 읽기 복제본

rds_aurora_elasticache1

  • AZ, 교차 AZ 또는 교차 리전 내 최대 5개의 읽기 전용 복제본
  • 복제는 ASYNC이므로 읽기는 최종 일관성이 있습니다.
  • 복제본은 자체 DB로 승격될 수 있습니다.
  • 애플리케이션은 읽기 전용 복제본을 활용하기 위해 연결 문자열을 업데이트해야 합니다.
note

MySQL, MariaDB, PostgreSQL, Oracle 및 SQL Server 데이터베이스 엔진의 경우, Amazon RDS에서 소스 DB 인스턴스의 스냅샷을 사용해 두 번째 DB 인스턴스를 생성합니다. 그런 다음 엔진의 기본 비동기식 복제 기능을 사용해 소스 DB 인스턴스가 변경될 때마다 읽기 전용 복제본을 업데이트합니다. 읽기 전용 복제본은 읽기 전용 연결만 가능한 DB 인스턴스 역할을 수행합니다. 애플리케이션을 읽기 전용 복제본에 연결하는 방법은 DB 인스턴스에 연결하는 방법과 동일합니다. Amazon RDS는 원본 DB 인스턴스의 모든 데이터베이스를 복제합니다.

리전 간 읽기 전용 복제본 생성

  • MariaDB, MySQL, Oracle 또는 PostgreSQL은 다른 리전에 읽기 전용 복제본 생성 가능
  • SQL Server에서는 다른 리전에 읽기 전용 복제본 생성 불가

RDS Read Replicas - Use Cases

rds_aurora_elasticache2

  • 정상 로드를 받는 프로덕션 데이터베이스가 있습니다.
  • REPORT 응용 프로그램을 실행하여 일부 분석을 실행하려고 합니다.
  • 거기에서 새 워크로드를 실행하기 위해 읽기 전용 복제본을 생성합니다.
  • 프로덕션 애플리케이션은 영향을 받지 않습니다.
  • 읽기 전용 복제본은 SELECT 전용 명령문 (INSERT, UPDATE, DELETE 제외)에 사용됩니다.

RDS Read Replicas - Network Cost

rds_aurora_elasticache3

  • AWS에서는 데이터가 한 AZ에서 다른 AZ로 이동할 때 네트워크 비용이 발생합니다.
  • 동일한 지역 내의 RDS 읽기 전용 복제본의 경우 해당 요금을 지불하지 않습니다.

RDS Multi AZ (Disaster Recovery)

rds_aurora_elasticache4

  • 동기화 복제
  • 하나의 DNS 이름 - 대기 모드로의 자동 앱 장애 조치
  • 가용성 향상
  • AZ 손실, 네트워크 손실, 인스턴스 또는 스토리지 장애 시 장애 조치
  • 앱에 수동 개입 없음
  • 스케일링에 사용되지 않음
  • 다중 AZ 복제는 무료입니다.
  • 참고: 읽기 전용 복제본은 재해 복구(DR)을 위한 다중 AZ로 설정됩니다.

RDS - From Single - AZ to Multi-AZ

rds_aurora_elasticache5

  • 다운타임 제로 운영(DB 정지 불필요)
  • 데이터베이스에 대해 "수정"을 클릭하기만 하면 됩니다.

내부적으로 다음과 같은 과정들이 발생합니다.

  • 스냅샷이 찍힙니다.
  • 새 AZ의 스냅샷에서 새 DB가 복원됩니다.
  • 두 데이터베이스 간에 동기화가 설정됩니다.

RDS Security - 암호화

At rest encryption

  • AWS KMS - AES-256 암호화로 마스터 및 읽기 전용 복제본 암호화 가능
  • 시작 시 암호화를 정의해야 합니다.
  • 마스터가 암호화되지 않으면 읽기 전용 복제본을 암호화할 수 없습니다.
  • Oracle 및 SQL Server에서 사용 가능한 TDE(투명한 데이터 암호화)

In-flight encryption

  • 전송 중인 RDS로 데이터를 암호화하는 SSL 인증서
  • 데이터베이스에 연결할 때 신뢰 인증서와 함께 SSL 옵션 제공

SSL 시행

PostgreSQL: AWS RDS 콘솔의 rds.force_ssl=1 (파라미터 그룹) MySQL: DB에서 사용 - GRANT USAGE ON *.* TO 'mysqluser'@'%' REQUIRE SSL;

RDS Encryption Operations

RDS 백업 암호화

  • 암호화되지 않은 RDS 데이터베이스의 스냅샷은 암호화되지 않습니다.
  • 암호화된 RDS 데이터베이스의 스냅샷이 암호화됩니다.
  • 스냅샷을 암호화된 스냅샷으로 복사 가능

암호화되지 않은 RDS 데이터베이스를 암호화하려면

  • 암호화되지 않은 데이터베이스의 스냅샷 생성
  • 스냅샷 복사 및 스냅샷 암호화 활성화
  • 암호화된 스냅샷에서 데이터베이스 복원
  • 애플리케이션을 새 데이터베이스로 마이그레이션하고 이전 데이터베이스 삭제

RDS Security - Network & IAM

Network Security

  • RDS 데이터베이스는 일반적으로 퍼블릭 서브넷이 아닌 프라이빗 서브넷 내에 배포됩니다.
  • RDS 보안은 보안그룹(EC2 인스턴스와 동일한 개념)을 활용하여 작동합니다.
  • RDS와 통신할 수 있는 IP / 보안그룹을 제어합니다.

IAM Management

  • IAM 정책은 누가 AWS RDS를 관리할 수 있는지 제어하는 데 도움이 됩니다. (RDS API를 통해)
  • 기존 사용자 이름과 암호를 사용하여 데이터베이스에 로그인할 수 있습니다.
  • IAM 기반 인증을 사용하여 RDS MySQL 및 PostgreSQL에 로그인할 수 있습니다.

RDS - IAM Authentication

rds_aurora_elasticache6

  • IAM 데이터베이스 인증은 다음과 함께 작동합니다.
  • 비밀번호가 필요 없고 IAM 및 RDS API 호출을 통해 얻은 인증 토큰만 있으면 됩니다.
  • 인증 토큰의 수명은 15분입니다.

장점

  • 네트워크 입/출력은 SSL을 사용하여 암호화되어야 합니다.
  • DB 대신 사용자를 중앙에서 관리하는 IAM
  • 손쉬운 통합을 위해 IAM 역할 및 EC2 인스턴스 프로필을 활용할 수 있습니다.

RDS Security 요약

저장 시 암호화:

  • DB 인스턴스를 처음 생성할 때만 수행됩니다.
  • 또는 암호화되지 않은 DB -> 스냅샷 -> 암호화된 상태로 스냅샷 복사 -> 스냅샷에서 DB 생성

사용자 책임:

  • DB의 SG에서 포트 / IP / 보안그룹 인바운드 규칙 확인
  • 데이터베이스 내 사용자 생성 및 권한 또는 IAM을 통한 관리
  • 공개 액세스 여부에 관계없이 데이터베이스 만들기
  • 매개변수 그룹 또는 DB가 SSL 연결만 허용하도록 구성되었는지 확인

AWS 책임:

  • No SSH access
  • No manual DB patching
  • No manual OS patching
  • No way to audit the underlying instance

Aurora

  • Aurora는 AWS의 독점 기술입니다. (오픈 소스가 아님)
  • Postgres와 MySQL은 모두 Aurora DB로 지원됩니다. (즉, Aurora가 Postgres 또는 MySQL 데이터베이스인 것처럼 드라이버가 작동함)
  • Aurora는 "AWS 클라우드에 최적화"되었으며 RDS의 MySQL보다 5배, RDS의 Postgres 성능보다 3배 향상된 성능을 제공합니다.
  • Aurora 스토리지는 10GB 단위로 자동으로 최대 128TB까지 확장됩니다.
  • Aurora는 15개의 복제본을 가질 수 있는 반면 MySQL은 5개의 복제본을 가질 수 있으며 복제 프로세스가 더 빠릅니다. (10ms 미만의 복제본 지연)
  • Aurora의 장애 조치는 즉각적입니다. HA(고가용성)입니다.
  • Aurora 비용은 RDS보다 비싸지만 20% 더 효율적입니다.

Aurora의 고가용성과 스케일링 읽기

  • P2P 복제를 통한 자가 치유
  • 스토리지가 100개 볼륨에 걸쳐 스트라이핑됨
  • 하나의 Aurora 인스턴스가 쓰기(마스터)를 수행합니다.
  • 30초 이내에 마스터에 대한 자동 페일오버 마스터 + 최대 15개의 Aurora 읽기 전용 복제본 제공 읽기
  • 교차 지역 복제 지원
읽기 전용 복제본의 승격

Amazon Aurora의 경우 읽기 전용 복제본은 우선 순위 티어(0-15)와 연결됩니다. 장애 조치가 발생하는 경우 Amazon Aurora는 우선 순위가 가장 높은 읽기 전용 복제본을 승격합니다. 둘 이상의 Aurora 복제본이 동일한 우선 순위를 공유하는 경우 Amazon RDS는 크기가 가장 큰 복제본을 승격합니다. 둘 이상의 Aurora 복제본이 동일한 우선 순위와 크기를 공유하는 경우 Amazon Aurora는 동일한 승격 계층에서 임의의 복제본을 승격합니다.

Aurora DB Cluster

rds_aurora_elasticache7

Features of Aurora

  • Automatic fail-over
  • Backup and Recovery
  • Isolation and security
  • Industry compliance
  • Push-button scaling
  • Automated Patching with Zero Downtime
  • Advanced Monitoring
  • Routine Maintenance
  • Backtrack: restore data at any point of time without using backups

Aurora Security

  • 동일한 엔진을 사용하기 때문에 RDS와 유사
  • KMS를 사용한 저장 데이터 암호화
  • 자동 백업, 스냅샷 및 복제본도 암호화됩니다.
  • SSL을 사용한 전송 중 암호화 (MySQL 또는 Postgres와 동일한 프로세스)
  • IAM 토큰을 사용하여 인증 가능 (RDS와 동일한 방법)
  • 사용자는 보안 그룹으로 인스턴스를 보호할 책임이 있습니다.
  • SSH 접속 불가

Aurora Replicas - Auto Scaling

rds_aurora_elasticache8

Aurora - Custom Endpoints

rds_aurora_elasticache9

  • Aurora 인스턴스의 하위 집합을 사용자 지정 엔드포인트로 정의
  • 예: 특정 복제본에 대한 분석 쿼리 실행
  • 리더 엔드포인트는 일반적으로 사용자 지정 엔드포인트를 정의한 후 사용되지 않습니다.

Aurora Serverless

rds_aurora_elasticache10

  • 실제 사용량에 따라 자동화된 데이터베이스 인스턴스화 및 자동 확장
  • 간헐적이거나 예측할 수 없는 워크로드에 적합
  • 용량 계획이 필요하지 않음
  • 초당 지불, 더 비용 효율적일 수 있음
Aurora Serverless

Amazon Aurora Serverless는 Amazon Aurora(MySQL 호환 및 PostgreSQL 호환 에디션)용 온디맨드 자동 확장 구성으로, 데이터베이스가 애플리케이션의 요구 사항에 따라 자동으로 시작, 종료 및 용량 확장 또는 축소됩니다. 데이터베이스 인스턴스를 관리하지 않고도 클라우드에서 데이터베이스를 실행할 수 있습니다. 간헐적이거나 예측할 수 없는 워크로드를 위한 간단하고 비용 효율적인 옵션입니다.

Amazon RDS Proxy

Amazon RDS Proxy를 사용하면 애플리케이션이 데이터베이스 연결을 폴링하고 공유하도록 허용하며 확장 기능을 향상할 수 있습니다. RDS Proxy는 애플리케이션 연결을 유지하면서 예비 DB 인스턴스에 자동으로 연결하여 데이터베이스 장애에 대한 애플리케이션의 복원력을 높입니다. RDS 프록시를 사용하면 데이터베이스에 대해 AWS Identity and Access Management (IAM) 인증을 사용하고 AWS Secrets Manager에 자격 증명을 안전하게 저장합니다.

RDS Proxy를 사용하면 연결을 초과 구독하거나 빠른 속도로 새 연결을 생성할 경우 발생할 수 있는 예기치 않은 데이터베이스 트래픽 금증을 처리할 수 있습니다. RDS Proxy는 데이터베이스 연결 풀을 설정하고 매번 새 데이터베이스 연결을 여는 데 필요한 메모리 및 CPU 오버 헤드 없이 이 풀에서 연결을 다시 사용합니다. 과다 구독으로부터 데이터베이스를 보호하기 위해 생성되는 데이터베이스 연결 수를 제어할 수 있습니다.

Aurora Multi-Master

rds_aurora_elasticache11

  • 쓰기 노드에 대한 즉각적인 장애 조치를 원하는 경우
  • 모든 노드에서 R/W 수행 - RR을 새 마스터로 승격
note

Aurora Multi-Master는 DB 쓰기 및 읽기에 대한 일관성을 제공하는 데이터베이스 노드 클러스터를 통해 고가용성 및 ACID 트랜잭션을 함께 달성하도록 설계되었습니다. 기본적으로 Aurora 클러스터는 컴퓨팅(데이터베이스) 노드 세트와 공유 스토리지 볼륨으로 구성됩니다. 스토리지 볼륨은 사용자 데이터의 고가용성 및 내구성을 위해 3개의 가용 영역에 배치된 6개의 스토리지 노드로 구성됩니다. 클러스터의 모든 데이터베이스 노드는 읽기 및 쓰기 질의를 실행할 수 있습니다.

Aurora 교차 리전 읽기 전용 복제본

rds_aurora_elasticache12

  • 재해 복구에 유용
  • 설치가 간편함

Aurora 글로벌 데이터베이스 (권장):

  • 1 Primary Region (읽기 / 쓰기)
  • 최대 5개의 보조(읽기 전용)지역, 복제 지연 시간 1초 미만
  • 보조 지역당 최대 16개의 읽기 전용 복제본
  • 대기 시간 감소에 도움
  • 다른 지역 승격(재해 복구용)의 RTO는 1분 미만

Amazon ElastiCache

  • ElastiCache는 관리되는 Redis 또는 Memcached를 가져오는 것입니다.
  • 캐시는 성능이 매우 높고 대기 시간이 짧은 인메모리 데이터베이스입니다.
  • 읽기 집약적인 워크로드에 대한 데이터베이스의 부하를 줄이는 데 도움이 됩니다.
  • 애플리케이션을 스테이트리스(Stateless)로 만드는 데 도움이 됩니다.
  • AWS는 OS 유지 / 패칭, 최적화, 설정, 구성, 모니터링, 장애 복구 및 백업을 처리합니다.
  • ElastiCache를 사용하면 애플리케이션 코드가 많이 변경됩니다.

ElastiCache - DB Cache

  • 애플리케이션은 ElastiCache를 쿼리하고 사용할 수 없는 경우 RDS에서 가져와 ElastiCache에 저장합니다.
  • RDS의 부하를 완화하는 데 도움이 됩니다.
  • 캐시에는 최신 데이터만 사용되도록 하는 무효화 전략이 있어야 합니다.

ElastiCache - User Session Store

  • 사용자가 모든 애플리케이션에 로그인
  • 애플리케이션이 ElastiCache에 세션 데이터를 기록합니다.
  • 사용자가 애플리케이션의 다른 도메인(인스턴스)로 로그인 상태를 유지한 채 이동합니다.

ElastiCache - Redis vs Memcached

Redis

  • 자동 장애 조치가 있는 다중 AZ
  • 읽기 전용 복제본으로 읽기 확장 및 고가용성 확보
  • AOF 지속성을 사용한 데이터 내구성
  • 백업 및 복원 기능
  • String 뿐만 아니라 List, Set, Hash, Bit 배열 등 다양한 자료구조를 지원하기 때문에 활용도가 높다.

Memcached

  • 데이터 분할을 위한 다중 노드 (샤딩)
  • 고가용성 없음 (복제)
  • 비지속성
  • 백업 및 복원 없음
  • 다중 스레드 아키텍처
  • String 타입만 지원하며 오로지 읽기 전용
  • HTML 같은 단순한 코드를 캐싱할 때, 비교적 작은 메모리 사용

다음과 같은 경우 Memcached를 선택합니다.

  • 가능한 가장 단순한 모델이 필요한 경우
  • 여러 코어 또는 스레드가 있는 큰 노드를 실행해야 하는 경우
  • 시스템의 요구 사항이 증가하고 감소함에 따라 노드를 추가 및 제거하는 확장 및 축소 기능이 필요한 경우
  • 객체를 캐시에 저장해야 하는 경우

ElastiCache - Cache Security

ElastiCache의 모든 캐시

  • IAM 인증을 지원하지 않음
  • ElastiCache의 IAM 정책은 AWS API 수준 보안에만 사용됩니다.

Redis AUTH

  • Redis 클러스터를 생성할 때 "비밀번호 / 토큰"을 설정할 수 있습니다.
  • 이것은 캐시에 대한 추가 보안 수준입니다. (보안 그룹 위에 있음)
  • 전송 중 암호화에서 SSL 지원

Memcached

  • SASL 기반 인증 지원 (고급)

Patterns of ElastiCache

  • Lazy Loading: 모든 읽기 데이터가 캐시되고 데이터가 캐시에서 부실해질 수 있습니다.
  • Write Through: DB에 기록할 때 캐시에 데이터 추가 또는 업데이트 (부실 데이터 없음)
  • Session Store: 임시 세션 데이터를 캐시에 저장 (TTL 기능 사용)
  • Quote: 컴퓨터 과학에는 캐시 무효화와 이름 지정이라는 두 가지 어려운 일이 있습니다.

ElastiCache - Redis Use cases

  • 게임 순위표는 계산적으로 복잡합니다.
  • Redis Sorted 세트는 고유성과 요소 순서를 모두 보장합니다.
  • 새로운 요소가 추가될 때마다 실시간으로 순위가 매겨진 다음 올바른 순서로 추가됩니다.