Share
Sign In

RDS / Aurora / ElastiCache

RDS

RDS(Relational Database Service)는 AWS에서 사용하는 RDBMS 서비스이다. 프로비저닝을 자동으로 수행하고 OS도 자동으로 붙는다. 또한 DB 백업과 복구, 모니터링을 지원한다. EC2처럼 Cross-AZ하게 묶을 수도 있고, 확장(수평, 수직)이 가능하다. RDS는 EBS 볼륨(gp2/io1)에 저장하는데 ssh는 사용할 수 없다.
백업 - 기본적으로 5분마다 트랜젝션 로그를 저장한다. 기본 7일, 최대 35일까지 저장 가능하다.
스냅샷 - 유저가 직접 수행해야 하고 저장 만료 기간이 없다.

Storage Auto Scaling

ASG와 비슷하게 RDS는 자동으로 스케일링을 수행한다. 기본적으로 남은 공간이 10% 이하거나, 최근 수정 시간이 6시간이 넘으면 용량을 조정한다. 한없이 증가할 수는 없으니 최대 스토리지 임계값을 설정할 수 있다. 이는 예측하기 힘든 작업에 유리하다.

Read Replicas / Multi AZ

Read Replicas(읽기 전용 복제본) - 기본 개념. 읽기 트래픽이 많아지면 읽기만을 담당하는 복제 db를 따로 만든다. AZ, Region에 상관없이 최대 5개까지 만들 수 있고 Master로부터 ASYNC 명령을 받아 일관성을 유지한다. 신기하게도 같은 리전이라면 ASYNC 명령에 부과되는 비용이 없다!
Multi AZ - 데이터 센터에 지진이 날 수도 있으니 다른 AZ에도 백업을 두고 싶다. Master의 스냅샷을 만들고 다른 AZ에다 Slave DB를 만든다. 이 과정은 동기적으로(SYNC) 일어난다. 만약 Master에 오류가 생기면 해당 Slave가 Master의 자리를 물려 받는다. 이 과정이 외부로 노출되지 않게 하기 위해 같은 DNS를 사용한다. 스케일링이 아니다!

RDS 보안 - 암호화

데이터를 암호화 (At rest Encryption)
Master, 읽기 전용 복제본 모두 AES-256를 통해 암호화된다.
처음 RDS를 만들 때 설정하기 때문에 암호화하지 않은 DB는 파생 DB 모두 암호화가 되어 있지 않다.
그래도 중간에 암호화하고 싶다면 스냅샷을 뜨고, 그 스냅샷에서 RDS를 만들 때 설정할 수도 있다.
오라클과 SQL Server는 TDE도 가능하다.
트렌젝션을 암호화 ( In-flight Encryption)
SSL 인증을 거치며 처음 database와 연결될 때 ssl 옵션을 설정한다.
PostgreSQL은 red.force_ssl=1, MySQL은 GRANT USAGE ON *.* TO 'mysqluser'@'%' REQUIRE SSL; 명령을 통해 SSL 사용을 강제할 수도 있다.

RDS 보안 - 네트워크 & IAM

네트워크 보안 - 배포용 RDS는 외부로 노출되지 않는다. 내부 인스턴스들만 접근이 가능하도록 하며, 정확히 어떤 IP, 보안 그룹이 접근 가능한지 명시한다.
접근 관리 - RDS에 접근할 수 있는 IAM Role을 할당한다. 그리고 그림과 같이 15분 동안 유효한 임시 토큰을 발급받는다. MySQL과 PostgreSQL에서만 동작한다.

Amazon Aurora

오로라는 AWS에서 만든 클라우드 특화 DB이다. 확장을 기본으로 지원하고 복제를 15개까지 할 수 있다(MySQL은 5개). 또한 가용성이 높고 매우 빠르다. 그치만 좀 비싸다
오로라는 RDS와 비교했을 때 역추적(Backtrack) 기능이 신기하다. 백업을 이용하지 않고 어느 시점이든 데이터를 복구시켜 준단다. 나중에 원리도 배워보자.
보안은 RDS와 똑같다. (사실상 MySQL + PostgreSQL + AWS 만의 기술 느낌이라)

High Availability and Read Scaling

오로라는 3개의 AZ에 각각 2개의 복제를 만든다. 6개 중 4개는 쓰기, 6개 중 3개는 읽기를 위한 것이다. 복제본들을 서로 비교해서(P2P) 오류를 찾으며 Master의 실패 복구 시간이 대부분 60초 미만으로 아주 빠르다. 최대 15개까지 복제본을 만들 수 있다.
Auto Scaling - CPU 사용률 등의 지표가 목표치 이상이면 알아서 확장한다.
Aurora Serverless - 간혈적이고 예측 불가능한 작업에 유리하다. 초당 얼마로 계산해서 효율적일 수도 있다.
Aurora Global Databse - AZ를 벗어나서 다른 리전에도 복제를 만든다. 최대 6(Primary + Secondary)개 리전, 리전 별 16개의 읽기 전용 복제를 만들 수 있다. 단 쓰기는 Primary 리전에서만 가능하다.
Aurora Machine Learning - AWS ML 서비스(SageMaker, Comprehend)와 결합하여 쓸 수 있다.
Client는 Writer/Reader Endpoint를 알고 있고 접근한다. 만약 fail이 발생하면 Writer Endpoint는 read replicas 중 하나로 바뀐다. (옵션에 multi-master가 있어서 여러 곳에서 쓸 수도 있다!)
그리고 Custom Endpoint를 만들고 원하는 replica만 넣을 수 있다. 이렇게 하면 해당 replicas는 성능이 좋게 한 다음 복잡한 연산을 시키기 좋다.

ElastiCache

AWS에서 Redis와 Memcached 같은 in-memory DB를 관리하기 위해 만든 서비스이다.
캐시 - 속도가 빠르고 비용이 비싸 캐시 용도 자주 쓴다. RDS는 비용은 싸지만 느리기 때문에 먼저 ElastiCache에 원하는 정보가 있는지 찾고, 없으면 RDS에 요청한다. 그리고 해당 결과를 캐시에 기록한다.
세션 유지 - 세션을 유지할 때 속도가 빠른 ElastiCache를 이용하면 좋다.

Redis vs Memcached

Redis
멀티 AZ
읽기 전용 replica 확장 가능
AOF persistence로 데이가 영구적임
백업 & 복구 기능
Sorted set 처럼 신기한 기능이 많
캐시 + 데이터베이스 느낌
Memcached
멀티 노드를 운영 (sharding)
복제 없음
영구적이지 않음
백업 & 복구 기능 없음
멀티 스레드 아키텍처 → 빠름
진짜 순수 캐시

인증

ElastiCache는 IAM 인증을 지원하지 않는다.
Redis AUTH - AWS Redis는 자체적으로 패스워드로 접속하는 기능을 제공한다. SSL도 있다.
Memcached AUTH - SASL 기반 인증을 지원한다.

패턴

Lazy Loading: 조회하는 데이터는 모두 캐시되기 때문에 상할 수 있다.
Write Through: DB에 적을 때 캐시에도 같이 적는다.
Session Store: TTL(time to live)을 이용해 임지 세션 데이터를 저장한다.