RDS Overview
RDS
- 관계형 데이터베이스 서비스를 나타내며 이는 SQL을 쿼리 언어로 사용하는 데이터베이스를 위한 관리형 데이터베이스를 뜻합니다.
- 이 언어를 이용해서 클라우드에 데이터베이스를 생성할 수 있고 이와 같은 데이터베이스는 AWS 상에서 관리되므로 그 이점이 아주 큽니다.
- Postgres
- MySQL
- MariaDB
- Oracle
- Microsoft SQL Server
- Aurora
- EC2 인스턴스 상에 자체 데이터베이스 서비스를 배포하지 않고 RDS를 사용하는 이유
RDS
는 관리형 서비스로 AWS가 데이터베이스뿐만 아니라 여러 기타 서비스 또한 제공하고 있습니다.
- 프로비저닝 자동화, 기본 운영 체제 패치 자동화
- 지속적인 백업이 수행되며 특정 타임스탬프도 복구할 수 있습니다.
(PITR) (Point in Time Restore)
- 모니터링 대시보드
- 읽기 전용 복제본에 대한 강의도 따로 존재
- 다중 AZ를 설정
- 업그레이드를 위한 유지 보수도 존재
- 읽기 전용 복제본을 추가함으로써 수직 및 수평 확장성을 증가\
- 스토리지가 EBS를 기반
- 단, RDS 인스턴스에는 SSH를 따로 가질 수 없습니다.
- AWS에서 제공되므로
기본 EC2 인스턴스에 대해서는 사용자가 따로 접근 권한을 갖지 않기 때문입니다.
RDS Backups
- 백업은 RDS에서 자동으로 활성화되며 자동으로 생성됩니다.
- 매일 수행되는 데이터베이스 전체에 대한 백업과 트랜잭션 로그, 즉 일일 트랜잭션 로그가 매 오 분마다 RDS에 백업됩니다.
- 이 두 가지를 함께 이용해서 그 어떤 지정 시점으로든 데이터베이스를 복원할 수 있습니다.
- 오래된 백업에서부터 단 오 분 전 백업으로까지 자유롭게 돌아갈 수 있습니다.
- 자동 백업은 기본적으로는 7일간 보관되지만 최대 35일까지로 보관 기간을 설정할 수 있습니다.
DB Snapshots
스냅샷
은 사용자가 수동으로 발동시키는 백업으로 백업 보관 기간을 사용자 임의로 설정할 수 있습니다.
RDS - Storage Auto Scaling
- RDS 데이터베이스를 생성할 때는 원하는 스토리지 용량을 지정해야 합니다.
- RDS 스토리지 오토 스케일링이 활성화되어 있으면 RDS가 자동으로 스토리지에 대한 스케일링을 수행합니다.
- 데이터베이스 스토리지를 수동으로 확장하는 작업을 피하는 것이 골자입니다.
- 최대 스토리지 임계값을 설정해야 합니다.
- 이러한 상황일 때 자동으로 스토리지를 수정합니다.
- 사용 가능한 스토리지가 할당된 스토리지의 10% 미만일 경우.
- 낮은 스토리지 상태가 오 분 이상 지속되는 경우.
- 지난 수정이 여섯 시간 이상 지났을 경우.
- 이는 워크로드를 예측할 수 없는 애플리케이션에 아주 유용합니다.
RDS 읽기 전용 복제본과 다중 AZ
RDS 읽기 전용 복제본 (Read Replicas)
- 읽기를 스케일링합니다
- 최대 다섯 개까지 생성할 수 있습니다.
동일한 가용 영역
또는 가용 영역
이나 리전
을 걸쳐서 생성될 수 있습니다.
- 읽기 전용 복제본 사이에
비동기식 복제
가 발생합니다.
비동기식
이란 결국 읽기가 일관적으로 유지된다는 것을 뜻합니다.
- 복제본 중 하나를 데이터베이스로 사용하고자 하며
그에 대한 권한을 획득하면 이를 데이터베이스로 승격시킬 수 있습니다.
- 주요 애플리케이션에 있는 모든 연결을 업데이트해야 합니다.
- RDS 클러스터 상의 읽기 전용 복제본 전체 목록을 활용할 수 있습니다.
- 읽기 전용 복제본이 있는 경우에는 SELECT 명령문에만 사용하는 점을 명심해야 합니다.
네트워크 비용 (Cost)
- AWS에서는 하나의 가용 영역에서 다른 가용 영역으로 데이터가 이동할 때에 비용이 발생합니다.
- 예외가 존재하며 이 예외는 보통 관리형 서비스에서 나타납니다. 그리고 읽기 전용 복제본은 관리형 서비스입니다.
- 읽기 전용 복제본이 다른 AZ 상이지만 동일한 리전 내에 있을 때는 비용이 발생하지 않습니다.
- 서로 다른 리전에 복제본이 존재하는 경우,
RDS DB 인스턴스와 읽기 전용 복제본이 여러 리전을 넘나들어야 하기 때문에 네트워크에 대한 복제 비용이 발생합니다.
다중 AZ
다중 AZ
는 주로 재해 복구에 사용됩니다.
- 동기식으로 이를 AZ B에 스탠바이 인스턴스로 복제합니다.
- 하나의 DNS 이름을 갖고 애플리케이션 또한 하나의 DNS 이름으로 통신하며 마스터에 문제가 생길 때에도 스탠바이 데이터베이스에 자동으로 장애 조치가 수행됩니다.
가용성
을 높일 수 있습니다.
- 전체 AZ 또는 네트워크가 손실될 때에 대비한 장애 조치이자 마스터 데이터베이스의 인스턴스 또는 스토리지에 장애가 발생할 때 스탠바이 데이터베이스가 새로운 마스터가 될 수 있도록 하는 겁니다.
- 따로 앱에 수동으로 조치를 취할 필요가 없습니다.
- 스케일링에 이용되지도 않습니다.
- 재해 복구를 대비해서 읽기 전용 복제본을 다중 AZ로 설정할 수 있습니다.
단일 AZ에서 다중 AZ로 RDS 데이터베이스 전환이 가능할지?
- 단일 AZ에서 다중 AZ로 전환할 때에 데이터베이스를 중지할 필요가 없다는 가정하에,
- 데이터베이스 수정을 클릭하고 다중 AZ 기능을 활성화시키기만 하면 됩니다.
- 다음이 내부적으로 발생하는 일입니다.
- 기본 데이터베이스의 RDS가 자동으로 스냅샷을 생성합니다.
- 이 스냅샷은 새로운 스탠바이 데이터베이스에 복원됩니다.
- 스탠바이 데이터베이스가 복원되면 두 데이터베이스 간 동기화가 설정되므로
스탠바이 데이터베이스가 메인 RDS 데이터베이스 내용을 모두 수용하여 다중 AZ 설정 상태가 됩니다.
RDS 암호화 + 보안
암호화
미사용 데이터 암호화
는 AES 256비트 암호화를 사용하는 AWS의 키 매니지먼트 서비스인 AWS KMS
로 마스터 데이터베이스
와 읽기 전용 복제본
을 암호화할 수 있습니다.
- 암호화 실행 시 실행 시간을 정의해야 합니다.
- 마스터 데이터베이스를 암호화하지 않으면 복제본도 암호화할 수 없습니다.
- Oracle과 SQL 서버에서
TDE
라고 하는 투명한 데이터 암호화
를 활성화할 수 있고 이는 데이터베이스 암호화의 대안을 제공합니다.
전송 중 암호화
는 늘 SSL 인증서가 필요합니다.
클라이언트
에서 데이터베이스
로 전송 중인 것을 말합니다.
- 데이터베이스에 연결 시 신뢰할 수 있는 인증서로
SSL 옵션
을 제공하면 SSL을 연결할 수 있습니다.
- 모든 클라이언트가 SSL을 사용하도록 하려면,
PostgreSQL
에서는 rds.force_ssl=I
인 콘솔 매개변수 그룹을 설정.
MySQL
에서는 GRANT USAGE ON *.* TO 'mysqluser'@%'REQUIRE SSL
이라는 명령문을 데이터베이스 내부에서 실행.
암호화 작업
- 암호화 RDS 백업
암호화 되지 않은 RDS 데이터베이스
에서 스냅샷
을 생성하면
스냅샷 자체는 암호화되지 않는 것
입니다.
암호화된 RDS 데이터베이스
에서 스냅샷
을 생성하면
모든 스냅샷이 기본으로 암호화되는데 이는 항상 기본 값은 아닙니다.
- 그래서
암호화되지 않은 스냅샷
을 암호화된 스냅샷
으로 복제
해야 합니다.
- 암호화되지 않은 RDS 데이터베이스의 암호화 방법
- 암호화 되지 않은 RDS 데이터베이스의 스냅샷을 생성해야 하고 이는 암호화되지 않습니다.
- 복제한 스냅샷의 암호화를 활성화합니다.
이 암호화된 스냅샷
으로 데이터베이스를 복원
할 수 있으며
이는 암호화된 RDS 데이터베이스를 제공합니다.
- 새 암호화된 RDS 데이터베이스로 옮기고
이전 데이터 베이스를 삭제
합니다.
RDS 보안 - 네트워크와 IAM
- 네트워크 보안
네트워크 보안의 RDS 데이터베이스
는 대게 퍼블릭 서브넷이 아닌 프라이빗 서브넷에서 배포됩니다.
RDS 보안
은 RDS 인스턴스에 연결되어 있는 보안 그룹을 활용해 실행
됩니다.
EC2 인스턴스와 동일한 개념입니다.
RDS와 통신할 수 있는 IP 또는 보안 그룹을 제어합니다.
- 액세스 관리
IAM 정책
은 AWS RDS를 관리
하는 사람만 제어
할 수 있습니다.
기존의 방식으로 데이터베이스를 연결하려면
,
데이터 베이스에 로그인하기 위해 기존 사용자 이름
과 암호
를 사용해야 합니다.
- 또는
RDS MySQL
과 PostgreSQL
과 같은 IAM 기반의 인증
을 사용할 수 있습니다.
결국 데이터베이스 보안은 주로 데이터베이스 안에서 이루어지는 것.
IAM 인증
MySQL
과 PostgreSQL
에서만 실행
되며 암호는 필요하지 않고,
인증 토큰
이라는 것이 필요한데
RDS API 호출을 사용해서 IAM으로 직접 얻을 수 있습니다.
인증 토큰
은 수명이 짧은데 수명은 15분입니다.
- 장점
- 네트워크 내외로 SSL로 암호화됩니다.
IAM
은 데이터베이스 내부에서의 사용자 관리 대신 중앙에서의 사용자 관리에 사용합니다.
IAM 역할
과 EC2 인스턴스 프로파일
을 쉽게 통합할 수 있습니다.
정리
미사용 데이터 암호화
는 데이터베이스 인스턴스를 처음 생성할 때만 실행되며 암호화되지 않았으면 스냅샷을 생성해야 합니다.
그리고 스냅샷을 복제해 암호화 한 다음에 암호화된 스냅샷에서 새 데이터베이스를 생성하면 데이터베이스를 암호화합니다.
사용자의 책임
- 모든 포트와 IP 보안 그룹, 인바운드 규칙 사용 가능한 데이터베이스의 보안 그룹을 확인합니다.
- 내부 데이터베이스의 모든 사용자 생성 및 권한을 관리합니다.
- MySQL과 PostgreSQL 용 IAM으로 관리해야 합니다.
- 퍼블릭 액세스가 있고 없는 데이터베이스를 생성해 프라이빗 서브넷이나 퍼블릭 서브넷으로 가게 합니다.
- 파라미터 그룹과 데이터베이스가 SSL 연결만 허용하도록 구성되어 암호화되는지 확인해야 합니다.
AWS의 책임
- SSH 액세스가 발생하지 않도록 합니다.
- 데이터베이스 패치나 OS 패치를 할 필요가 없습니다.
- 기본 인스턴스도 확인하지 않아도 됩니다.
Amazon Aurora
Amazon Aurora
- Aurora는 AWS의 독점 기술입니다.
- 오픈 소스는 아니지만 MySQL 및 Postgres와 호환됩니다.
- 클라우드에 최적화
- RDS의 mySQL보다 성능이 5배나 향상
- RDS의 Postgres보다는 3배 향상
- Aurora 스토리지는 자동으로 커집니다.
- 10GB ~ 128TB
- DB 또는 SysOps가 여러분이 디스크를 모니터링하지 않아도 시간에 따라 자동으로 커진다는 점입니다.
- 15개의
읽기 전용 복제본
을 가지고 복제 속도도 훨씬 더 빠릅니다.
MySQL은 5개예요.
- Aurora에서는 장애 조치가 즉각적으로 이루어집니다.
비용
은 RDS보다 20% 정도 더 높지만, 훨씬 더 효율적이어서 규모가 클 경우, 비용 절감이 가능합니다.
Aurora의 고가용성 및 읽기 스케일링
Aurora
는 쓰기 요청
을 할 때 마다 6개의 데이터 복제본
을 3개의 AZ에 걸쳐 저장
합니다.
- 그리고
읽기 요청
에는 6개 중 3개의 복제만 필요
합니다.
자가 복구 과정
이 있어서 어떤 데이터가 손상되거나 잘못되었을 경우에
백엔드에서 P2P 복제를 통해 자가 복구를 할 수 있어 좋습니다.
- 수백 개의 볼륨이 있습니다.
- Aurora는 RDS를 위한 다중 AZ라고 할 수 있습니다.
Aurora
에 마스터
가 있고 거기에 쓰기를 합니다.
- 마스터가 작동하지 않으면 평균적으로 30초 안에 장애 조치가 이루어집니다.
- 마스터 외에도 읽기를 할 수 있는 15개의 읽기 전용 복제본을 가질 수 있습니다.
- 모든 읽기 전용 복제는 마스터에 장애 발생 시 마스터를 대체할 수 있습니다.
- 읽기 전용 복제의 좋은 점은
리전 간 복제를 지원
합니다.
Aurora DB 클러스터
-
Writer 엔드포인트
-
Reader 엔드포인트
- 리더 엔드포인트의 기능은 라이터 엔드포인트와 동일합니다.
- 로드 밸런싱 연결을 도와주고 모든 읽기 전용 복제본에 자동으로 연결합니다.
- 클라이언트가 리더 엔드포인트에 연결할 때마다
읽기 전용 복제본 중 하나
에 연결되고 로드 밸런싱 할 수 있게 됩니다.
- 로드 밸런싱이 이루어지는 곳이 문장 수준이 아니라 연결 수준이라는 사실입니다.
Aurora 특징
- 자동 장애 조치
- 백업 및 복구 격리와 보안
- 산업 규정 준수
- 푸시 버튼 스케일링
- 다운타임 없는 자동 패치
- 확장 모니터링
- 정기 유지 보수
- 백트랙
Aurora 보안
- 보안의 경우 RDS와 유사합니다.
- KMS를 사용해 암호화합니다.
자동 백업
및 스냅샷
그리고 복제본
도 암호화
합니다.
- SSL을 통해 전송 중 암호화가 이루어집니다.
- IAM 토큰을 사용하는 인증도 있습니다.
보안 그룹을 사용한 인스턴스 보호
는 여전히 여러분의 몫이며 인스턴스에 SSH 할 수 없습니다.
- Aurora 보안은 전부 RDS 보안과 동일합니다.
Amazon Aurora Advanced
Aurora 복제본, 오토 스케일링
Amazon 오로라 데이터베이스의 CPU 사용량이 증가했다고 합시다.
이 경우 오토 스케일링 복제본을 설정할 수 있습니다.
그렇게 하면 Amazon 오로라 복제본이 추가되고 그러면 자동으로 리더 앤드 포인트가 이 새 복제본을 포함할 수 있도록 확장될 겁니다.
이 새 복제본은 트래픽을 수신하기 시작하고 전체 CPU 사용량을 낮추기 위해 좀 더 분산된 방식으로 읽기를 수행합니다.
Aurora - 커스텀 엔드포인트
Aurora 인스턴스에서 사용자 지정 엔드 포인트를 정의한다고 하겠습니다.
그렇게 하는 이유는
이 인스턴스가 더 강력하기 때문에
특정 복제본에 대한 분석 쿼리를 실행하는 것이 더 낫기 때문입니다.
- 실무에서는 다양한 워크로드에 대한 많은 사용자 지정 앤드 포인트를 설정하여 오로라 복제본의 하위 집합만을 쿼리할 수 있습니다.
Aurora 서버리스
자동화된 데이터베이스 인스턴스화
와 실제 사용을 기반으로 한 오토 스케일링
을 제공합니다.
- 드물거나 간헐적이거나 예측할 수 없는 워크로드가 있을 때 유용합니다.
- 용량 계획을 수행할 필요가 없습니다.
- 훨씬 더 비용면에 효율적입니다.
Aurora 다중 마스터
라이터 노드
에 대한 높은 가용성
을 원하는 경우에 씁니다.
- 라이터 노드에 대한 즉각적인 장애 조치를 원하는 경우
- 모든 노드가 읽기와 쓰기 작업을 합니다.
- 이 때 쓰기 노드가 하나만 있고 다운돼서 실패하게 되면 읽기 복제본을 새로운 마스터로 승격시킵니다.
Global Aurora
- Aurora 리전 간 읽기 전용 복제본이 있다면 재해 복구에도 유용하고 아주 간단하게 구현할 수 있습니다.
- Aurora 글로벌 데이터베이스를 설정할 수도 있습니다.
- 이 경우 모든 읽기 및 쓰기가 발생하는
하나의 기본 리전
이 있지만
최대 다섯 개의 보조 읽기 전용 리전
을 설정할 수도 있습니다.
보조 리전
당 복제본 랙이 1초 미만이어야 하고 최대 16개의 읽기 전용 복제본을 가질 수 있습니다.
- 전 세계의 읽기 전용 복제본에 대한 지연 시간을 줄일 수 있습니다.
- RTO가 있으므로 복구 시간 목표는 1분 미만이 될 겁니다.
Aurora 머신러닝
- SQL 인터페이스를 통해 애플리케이션에 ML 기반 예측을 추가할 수 있는 개념입니다.
- 오로라와 다양한 AWS 머신 러닝 서비스 간의 간단하고 최적화된 안전한 통합입니다.
- 지원되는 서비스
- SageMaker : 모든 종류의 머신 러닝 모델을 사용
- Amazon Comprehend : 감정 분석을 수행
- 머신 러닝 경험은 필요 없습니다.
- 사용 사례
- 사기 탐지, 광고 타겟팅 감정 분석, 제품 추천
Amazon ElastiCache
ElastiCache
- RDS와 동일한 방식으로 관계형 데이터베이스를 관리할 수 있습니다.
Redis
또는 Memcached
같은 캐시 기술을 관리할 수 있도록 합니다.
- Cache?
- 캐시는
높은 성능
과 낮은 지연 시간
을 가진 인 메모리 데이터베이스입니다.
- ElasiCache를 사용하면 읽기 집약적인 워크로드의 부하를 줄이는데 도움이 됩니다.
- 애플리케이션을 무상태(stateless)로 만들 수 있도록 합니다.
AWS
는 운영 체제
, 패치
, 최적화
와 설정
, 구성
, 모니터링
, 장애 회복
그리고 백업
을 RDS
와 동일한 유지 보수를 수행합니다.
- 애플리케이션에 관한 몇 가지 어려운 코드 변경을 요청할 수도 있습니다.
ElastiCache 솔루션 아키텍쳐 - DB Cache
- RDS 데이터베이스에서 부하를 줄이는데 도움을 주는데 데이터를 캐시에 저장하기 때문에 캐시 무효화 전략이 있어야 하며 가장 최근 데이터만 사용하는지 확인해야 합니다.
ElastiCache 솔루션 아키텍쳐 - User Session Store
- 사용자 세션을 저장해 애플리케이션을 무상태로 만드는 것입니다.
Redis vs Memcached
- Redis
자동 장애 조치
로 다중 AZ
를 수행하는 기술입니다.
읽기 전용 복제본
은 읽기 스케일링에 사용
되며 가용성
이 높습니다.
- 지속성으로 인해 데이터 내구성도 있으며 백업과 기능 복원 기능도 있습니다.
- Memcached
데이터 분할
에 다중 노드를 사용합니다. == 샤딩
- 가용성이 높지 않습니다.
- 복제가 발생하지 않습니다.
- 지속적인 캐시가 아닙니다.
- 백업과 복원 기능도 없습니다.
- 다중 스레드 아키텍처로 몇몇 샤딩과 함께 캐시에서 함께 실행되는 여러 인스턴스가 있습니다.
Redis
는 고가용성과 백업 읽기 전용 복제본 등이 있습니다.
Memcached
는 데이터를 손실할 수 없는 단순한 분산 캐시입니다.
가용성이 높지 않고 백업과 복원 기능도 없습니다.
Cache Security
ElastiCache
는 Redis
에서만 IAM 인증을 지원하며, 나머지 경우에는 사용자 이름과 비밀번호를 사용하면 됩니다.
ElastiCache
에서 정의할 IAM 정책은 AWS API 수준 보안에만 사용됩니다.
- 캐시 생성, 캐시 삭제 같은 종류의 작업을 의미합니다.
- Redis AUTH
- Redis 클러스터를 생성할 때 비밀번호나 토큰를 설정할 수 있고
이렇게 하면 캐시에 들어갈 때 비밀번호를 사용할 수 있습니다.
- 이는 캐시에 사용할 수 있는 보안 그룹에 대한 추가적인 수준의 보안입니다.
- Memcached
- EC2 인스턴스
- 자체 보안 그룹도 레디스에 액세스할 수 있는 자체 보안 그룹이 있습니다.
- 그래서 ElastiCache를 사용하여 보안 그룹 수준의 보안을 수행할 수 있습니다.
ElastiCache에 데이터를 불러오는 패턴
- Lazy Loading
- 모든 읽기 데이터가 캐시되고 데이터가 캐시에서 부실해질 수 있습니다.
- Write Through
- 데이터를 오래된 데이터가 없는 데이터베이스에 기록될 때마다 캐시에 데이터를 추가하거나 업데이트하는 것입니다.
- Session Store
- Time To Live(TTL) 속성으로 세션을 만료시킬 수 있습니다.
Redis 사용 사례
- 게임 리더보드 생성
- Redis에는 고유성과 요소 순서를 모두 보장하는 정렬된 집합이라는 기능이 있습니다.
- 요소가 추가될 때마다 실시간으로 순위가 매겨진 다음 올바른 순서로 추가됩니다.
- 모든 레디스 캐시는 동일한 리더보드를 사용할 수 있습니다.
레디스로 Amazon ElastiCache와 통신할 때 클라이언트는 이 실시간 리더보드에 액세스할 수 있고 애플리케이션 측에서 이 기능을 프로그래밍할 필요가 없습니다.
From
AWS Certified Solutions Architect Associate 시험합격!