RDS
- 다양한 DB 엔진 지원
- SQL DB 관리형 서비스
사용 이유
- 인스턴스에 DB 띄우는 것과 무슨 차이가 있을까
- 말 그대로 관리형 서비스이다. 관리가 편함
- OS 패치, 프로비저닝 자동화
- 특정 시간 단위 백업 / 복구 지원
- 모니터링 대시보드 지원
- 읽기 전용 복제본 지원
- 재해 복구용 멀티 AZ
- 관리화면 제공
- 스케일링 용이
- EBS를 통한 스토리지 백업
- 인스턴스에 직접 접근 불가능
RDS 스토리지 Auto Scaling
- RDS 용량이 부족하면 스토리지를 자동으로 용량 증가
- Max Strorage Threshold를 설정해주면 최대 용량 설정 가능 (설정값과 요금은 무관)
- 예측이 어려운 워크로드에 유용
- 모든 종류의 RDS DB 엔진 지원
RDS 읽기 복제본과 읽기 스케일링
- 마스터의 쓰기 작업이 무거워서 write lock이 걸리면 read lock도 걸림.
- 장애 포인트가 될 수 있다.
- 읽기 복제본(Read Replica)을 두자
- 15대의 복제본 생성 가능
- 리전 / AZ 간 생성하거나, 동일 AZ에 생성한다.
- 복제본의 AZ 간 네트워크 비용은 발생하지 않음.
- 복제본의 리전 간 네트워크 비용은 발생함. (ex. 네이버 웹툰 업로드는 한국 본사에서만 하지만 읽는 것은 전세계 DB복제본에 뿌려주면 성능 향상. 그러나 네트워크 비용 발생)
- 비동기적 복제
- 궁극적 동일성(지금 당장은 다를 수 있지만 결과적으로는 동일해짐)
- 복제본이 마스터가 될 수 있다. (빠른 failover)
- 애플리케이션이 복제본이 연결하려면 connection string 업데이트 해줘야 함.
읽기 복제본 사용
- 집계 / 통계 역할 애플리케이션
- CQRS 구현 시
- 분석용 DB 구현
- 등등 읽기 전용
RDS 멀티 AZ 재해복구
- 동기화된 복사를 진행
- 한개의 DNS를 사용
- 고가용성을 위해 사용
- AZ에 문제가 생기거나, 네트워크 / 인스턴스 등에 문제가 생겼을 때를 대비
- 절대 Scaling을 위한 용도가 아닌, 재해복구의 용도
싱글 AZ에서 멀티 AZ로 전환하기
- 스냅샷 생성 -> 새로운 DB가 스냅샷 기반으로 복구 -> 동기화
- 다운타임 없음
- 수정 버튼 클릭 하나로 적용 가능
RDS 커스텀
- 관리형 오라클, MS SQL을 사용하는 경우, OS와 DB 파라미터(구성 방법)에 대한 커스텀 지원
- 관리형 DB에서 지원하는 자체 기능 수행 가능
- 이것조차도 내가 필요한 권한에 미치지 못하면 그냥 EC2에 올려서 써라.
- 자동 모드는 끄고 스냅샷을 미리 뜨는 것을 권장 (인프라 관련은 항상 스냅샷을 뜰 것)
RDS 백업
- 자동화된 백업 제공
- 매일 전체 DB 스냅샷 남김
- 트랜잭션 로그도 5분마다 백업
- 트랜잭션 로그 기반으로 복구 가능
- [1, 35]일까지의 데이터 저장
- 0으로 설정하면 자동 백업하지 않음.
- 수동 스냅샷
- 원하는 기간만큼 저장 가능
AWS Aurora
- 완전 관리형
- Postgres, My SQL 기반 엔진 제공 (이지만 My SQL, Postgres를 사용해서 새로운 엔진을 만든 거라고 봐야 한다.)
- AWS 클라우드 최적화
- RDS에 비해 성능이 높음 (mysql 기준 5배, postgre 기준 3배)
- 15개의 복제본 생성 가능
- 복제 생성도 빠름
- 고가용성
- 비쌈
고가용성과 읽기 스케일링
- 한개 Aurora 인스턴스가 쓰기 권한을 가짐 (마스터)
- 리전간 복제본 생성 지원
- 마스터가 장애 발생 시 30초 이내로 복구
- 데이터를 3개 AZ에 복사해서 저장
- 공유 볼륨을 사용하여 마스터가 쓰기 작업을 하면 공유 볼륨에도 같이 작성
- 레플리카들이 읽으면 공유 볼륨의 내용을 읽어 옴. (오토 스케일링이 빠르고, 장애 복구가 빠르고, 읽기 지연이 매우 짧음)
커스텀 엔드포인트
- 특정 읽기 복제본에 별도 엔드포인트 할당 가능
- 무거운 쿼리를 날리는 녀석들을 특정 엔드포인트에 보내면 나머지 복제본(인스턴스)들의 부하는 감소됨. (독박쓰기)
서버리스
- 사용량에 따라 자동 스케일링
- 동일한 양을 발생한다면 당연히 이게 더 비쌈
- 초당으로 비용 발생
Global Aurora
- 멀티리전 지원
- 리전간 읽기 복제본 지원
- 재해 복구에 유용
- 1개의 주요 리전과 5개의 부속 리전을 가짐
- 생성에 1초 미만
- 1초 이내의 지연 시간
- 부속 리전 당 16개의 읽기 복제본 생성 가능
- 주요 리전으로 승격(RTO)시키는 데에 1분 미만 소요
머신러닝
- ML 기반 예측 데이터를 SQL을 통해 추가할 수 있도록 지원
- AWS ML 서비스와 안전하고 효율적이고 단순하게 통합 가능
- SageMaker / Comprehend를 지원
- ML 경험이 없어도 쉽게 사용 가능
백업
- 자동화 백업 지원 (중지 불가능)
- 중지 불가능을 제외하면 일반 RDS와 자동화 백업 옵션 동일.
- 수동 백업 지원
- RDS와 옵션 동일
클론
- 신규 클러스터를 생성할 때 기존 클러스터를 통해 복제
- 스냅샷, 복구보다 빠름
- copy-on-write 프로토콜 사용 (기존 클러스터와 동일한 볼륨 사용, 이후부터의 데이터는 별도 스토리지 할당)
- 빠르고 비용적으로 효율적
- 스테이징 환경 구성 시에 유용함.
RDS 복구 및 마이그레이션
스냅샷
- 스냅샷을 기반으로 새로운 DB 생성 가능
S3
- RDS는 백업 파일을 S3에 넣고 불러오는 방식을 사용
- Aurora는 Percona XtraBackup과 같은 서드 파티 백업 툴을 사용 후, S3에 넣고 불러오기 (이 방식은 아마 mysql만 되는 것으로 추정)
보안
- DB 마스터와 복사본은 AWS KMS를 통해 암호화
- 마스터가 암호화가 안 됐다면 복사본도 암호화 불가능
- 스냅샷을 통해 복구할 때, 암호화 옵션을 켜서 암호화 가능
- TLS가 기본 적용됨 (AWS TLS 루트 인증서 사용)
- DB 접근을 위해 IAM role을 사용해야 함
- 보안 그룹을 통해 네트워크 보안 유지
- RDS Custom을 제외하고는 SSH 접근 불가 (EC2로 우회해서 접근하도록 하자)
- Audit 로그를 설정하고 Cloudwatch에 로그를 쌓을 수 있다.
RDS 프록시
- 애플리케이션이 DB 커넥션 공유 가능 (프록시로)
- 최소한의 커넥션만 유지하고 DB의 스트레스 감소
- 서버리스 / ASG / 멀티 AZ 등에서 사용할 것. (멀티 AZ는 경쟁 상태가 발생하고, 서버리스는 오버헤드가 커져서 그럼. 커넥션을 계속 연결했다 끊었다 하기 때문에 connection pool을 주는 것과 같음)
- 복구 시간을 66%쯤 향상 시킴 (대기 인스턴스가 줄어서 그런듯)
- 애플리케이션 내의 코드 변경은 불필요함. (connection string)
- IAM Secret Manager를 통해 관리
- 반드시 VPC를 통해 접근해야 함. (서버리스에서 RDS에 접근하려면 오버헤드가 커지니까 프록시를 사용해야 하는데, 프록시에 접근하려면 VPC를 통해 접근해야 하므로 람다를 VPC에 넣는 거였다.)
'자격증 > SAA' 카테고리의 다른 글
[SAA] S3 (0) | 2024.11.21 |
---|---|
[SAA] Route53 (0) | 2024.11.20 |
[SAA] Elasticache (0) | 2024.11.20 |
[SAA] Load Balancer (0) | 2024.11.12 |
[SAA] ENI (탄력적 네트워크 인터페이스) (0) | 2024.10.06 |