AWS - 9 [RDS + Aurora]

_Block·2022년 9월 9일
0

AWS

목록 보기
10/27
post-thumbnail

🍊 RDS

RDS는 관계형 데이터베이스를 의미하며 일반적인 MySql을 생각하면 됩니다.

  • PostgreSQL, MySQL, MariaDB, Microsoft SQL 등등이 대표적으로 있습니다.

EC2인스턴스 상에 굳이 자체 데이터베이스 서비스를 배포하지 않는 이유는 따로 RDS라는 서비스를 제공해 주기 떄문입니다.

RDS 자체적으로도 프로비저닝 자동화, 운영 체제 패치, 백업 및 복수 등이 가능하기 떄문에 굳이 EC2에 데이터베이스를 올려서 사용할 이유가 없습니다.

다중 AZ 설정이 가능하고, 읽기전용 인스턴스를 늘려서 확장성 또한 확보 가능합니다.

기본적으로 EBS기반으로 하지만 SSH통신이 불가능 합니다.

  • 관리형 서비스 이기 떄문에 AWS가 관리해 주지 따로 사용자 접근 권한이 없기 떄문입니다.

백업은 매 5분마다 자동으로 백업이 이루어 지며 자동 백업 같은 경우에는 기본적으로 7일 저장되지만 최대 35일까지 저장 가능합니다.

스냅샷 또한 가능합니다.

  • 스냅샷 같은 경우에는 사용자가 임의로 데이터를 백업하는 것이기 떄문에 백업 보관 기간을 임의로 설정 가능합니다.

🔨 RDS 오토 스케일링 기능

기본적으로 RDS를 생성할떄 기본 용량을 설정하지만, 서비스가 진행됨에 따라 용량이 불가능해지면 오토스케일링 기능이 작동합니다.

  • 이 부분은 옵션으로 활성화 시켜야 합니다.

즉 자동으로 증가시켜주기 떄문에 데이터베이스를 중단하는 과정이 생략이 되며 자동으로 특정한 임계값을 확인해서 수행이 됩니다.

  • 이 부분은 최대 임계값을 설정하여 조율 가능합니다.

이러한 기능은 예측할 수 없는 환경에서 주로 사용이 되며, custom정책과 유사하게 직접 설정할 수 있습니다.

  • 예를들면 ==> 사용가능한 스퇴지가 10%미만일떄 작동

🍊 RDS 읽기 전용 복제본 vs 다중 AZ

🔨 읽기 전용 복제본

이름에서 알 수 있듯이 읽기를 스케일링 합니다.

애플리케이션과 RDS가 있다면 애플리케이션은 RDS에 읽기와 쓰기를 수행할 것입니다.

하지만 트래픽이 몰리게 되면 모든 요청을 수행 불가능 합니다.

그러기 떄문에 두개의 RDS가 읽기 전용 복제본으로 활동을 합니다.

  • 최대 5개까지 가능합니다.
  • 동일한 가용 영역 or 리전을 걸쳐서 생성 가능합니다.

이 읽기전용 RDS는 메인 RDS에서 비동기식 복제를 유발 합니다.

  • 쉽게 말해 싱크가 맞는 복제를 의미합니다.

즉 이렇게 구성을 하게 된다면 애플리케이션은 읽을 떄는 읽기 전용 RDS, 쓰기 일때는 메인 RDS를 통해서 트래픽을 관리합니다.

  • 만약 읽기전용 RDS를 DB로 사용하고자 한다면 승격 시켜서 활용하면 됩니다.
  • 하지만 만약 이렇게 탈피하게 된다면 자체적인 생애 주기를 가지게 됩니다.

읽기전용 RDS에서는 SELECT 명령어만 사용 가능합니다.

---- 비용 문제 ----

AWS에서는 AZ를 이동할 떄에는 비용이 발생 합니다.

이떄 예외가 존재하는데 이 예외는 보통 관리형 서비스인 경우에는 비용이 발생하지 않는다는 예외입니다.

읽기 전용 복제본은 관리형 서비스이기 떄문에 같은 리전내에 있다면 비용이 발생하지 않습니다.

하지만 리전간에 이동은 네트워크에 대한 복제 비용이 발생 합니다.

🔨 다중 AZ

다중 AZ는 주로 재해 복구에 사용이 됩니다.

읽기와 쓰기를 모두 수행 가능한 마스터 인스턴스 이며 동기식으로 다른 AZ에 복제합니다.

이는 마스터 인스턴스에 쓰이는 변경사항이 복제되는 인스턴스에도 그대로 복제되는 것을 말합니다.

즉 하나의 DNS를 가지고 마스터 인스턴스에서 문제가 발생을 한다면 복제본을 사용하는 것으로 이해하면 됩니다.

  • 이러한 행위를 통해서 가용성을 높일 수 있기 떄문에 다중 AZ라고 부릅니다.

이러한 역할을 따로 수동으로 조치를 취할 필요가 없이 자동으로 연결이 시도 되고 마스터 인스턴스로 승격이 이루어 집니다.

중요한 점은 재해 복구를 대비해서 읽기 전용 복제본을 다중 AZ로 설정이 가능하다는 점도 아고 있어야 합니다

🍊 RDS 실습

RDS 대시보드로 이동 후 생성하기를 클릭합니다.

표준 생성 - MySQL(8.0.23) - 프로덕션 을 선택 한 뒤에 패스워드 설정을 진행합니다.

이후 인스턴스 구성을 해야 하는데 프리티어 사용을 위해서 버스터블 클래스를 선택 후 이전 세대 클래스를 포함하여 db.t2.micro를 선택 합니다.

스토리지 또한 프리티어를 위해서 gp2를 선택 후 기본 설정으로 유지 합니다.

다음으로 가용성 및 내구성 입니다.

한글로 해석하면 대기 인스턴스라고 설명이 되어 있으며 이는 다중 AZ를 말합니다.

이러한 설정은 재해 복구시에만 사용이 되기 떄문에 Test용으로 진행하는 현재로써는 생성하지 않기로 합니다.

그후 연결 항목 입니다.

기본적으로 모든 사항을 default값으로 유지를 하지만 퍼블릭 액세스 = 승낙 , VPC보안 그룹 = 새로 생성 을 선택하여 새 VPC보안 그룹 이름을 설정 한 후 넘어갑니다.

그후 인증항목은 비밀번호 인증을 선택 합니다.

그후 생성하기를 선택 합니다.

이후 sqlectron을 현재 OS에 맞게 설치를 합니다.

설치후에 Add를 클릭하여 만들어 놓은 RDS의 정보들을 입력해 줍니다.

저의 설정은 이와 같으며 이후 Test를 누른 후 문제가 없다면 Connect를 눌러 줍니다.

만약 Connect에 문제가 있다면 이러한 사항을 체크 해 보아야 합니다.

1. public Access가 설정이 안되어 있다.
- RDS를 생성할떄 체크하는 부분으로 다시 살펴보아야 합니다.

2. 보안 그룹 에러
- RDS에 설정한 보안그룹에서 나의 IP가 허용되는지를 확인해 보아야 합니다.
- 저 같은 경우에는 0.0.0.0으로 설정을 하여 모두 허용을 하였습니다.

이후 접속이 확인되면 SQL문을 활용하여 DB를 다룰 수 있습니다.

🍊 RDS 암호화 및 보안

🔨 암호화

AES256비트를 사용하는 AWS의 KMS로 마스터 데이터베이스와 읽기 전용 복제본을 암호화 가능합니다.

그러기 떄문에 암호화 실행 시 실행 시간을 정의해야 하며 마스터 데이터베이스를 암호화 하지 않으면, 복제본 또한 암호화 불가능 합니다.

Oracle과 SQL서버에서 TDE라고 하는 데이터 암호화를 활성화 가능하고 이는 데이터베이스 암호화의 대안을 제공합니다.

또한 늘 SSL인증서가 필요한 암호화도 있고 이는 데이터 전송 중에 RDS로 암호화를 사용합니다.

몇가지 알아두어야 하는 것들이 있습니다.

1. 암호화 되지 않은 RDS에서 스냅샷을 생성하면 스냅샷 자체는 암호화 되지 않습니다.

마찬가지로 암호화된 RDS에서 스냅샷을 생성하면 기본적으로 암호화 되는데 이것이 항상 기본 값은 아닙니다.

그래서 암호화되지 않은 스냅샷을 암호화된 스냅샷으로 복제해야 합니다.

🔨 IAM 인증을 사용한 RDS 연결법

MySQL과 PostgreSQL에서만 샐힝이 되며 암호가 필요하지 않고, 인증 토큰을 활용하는 방법 입니다.

이는 RDS API 호출시에 사용해서 IAM에서 직접 얻을 수 있습니다.

  • 인증 토큰의 수명은 보통 15분 입니다.
A라는 EC2 보안그룹이 있고, B라는 RDS 보안 그룹이 있습니다.

A에는 IAM 역할이 생성되어 있고 이러한 이유로 EC2 인스턴스가 RDS서비스에 API호출을 실행해서 토큰을 받는 방식으로 동작을 합니다.

이 토큰을 사용하면 MySQL 데이터베이스에 연결이 가능합나디.

이 접근법의 장점은 SSL로 암호화 되어있다는 장점이 있습니다.

🔨 요약

개인적으로 시간이 날떄마다 공부를 진행한 거라.. 정리가 안되서 한번 차근차근 요약해 보았습니다.

미사용 데이터 암호화, 즉 사용을 한번도 안한 RDS는 처음 생성 될떄만 암호화가 이루어 지며 암호화 되지 않았으면 스냅샷을 생성해야 합니다.

그후 생성한 스냅샷을 복제해 암호화 한 다음에 암호화된 스냅샷에서 새 데이터베이스를 생성함으로써 데이터베이스를 암호화하는 과정이 이루어 집니다.

모든 포트와 IP 보안 그룹, 인바운드 규칙 등 보안 그룹들을 확인하고 내부 데이터베이스의 사용자 생성 및 권한을 관리 OR MySQL과 PostgreSQL용 IAM으로 관리

  • 둘중 하나를 선택하여 관리해야 합니다.

또한 데이터베이스는 서브넷 또는 프라이빗 IP에 설치가 되어야 합니다.

이러한 과정에서 AWS가 하는 일은 간단합니다.

  1. SSH 액세스가 발생하지 않도록 방지

  2. 데이터베이스 패치나 OS패치

🍊 Aurora 개요

Aurora는 AWS의 사유 기술 입니다.

하지만 Postgress와 MySQL과 호환이 가능하는데 이는 Aurora에 호환 드라이버가 있기 떄문입니다.

클라우드에 굉장히 최적화 되어있기 때문에 MySQL이나 RDS에서 5배 향상된 성능을 가지고 있습니다.

Aurora는 다음과 같은 특징이 있습니다.

1.오토 스케일링 가능
- 자동으로 스토리지가 늘어납니다.

2. 읽기 전용 복제본 갯수
- 15개까지 구성 가능합니다 ==> MySQL은 5개 입니다.

3. 장애 조치가 즉각적

4. 비융이 비쌈
- 일반적인 RDS보다 20%가량 비쌉니다.
- 하지만 설계 및 규모에 따라서 더 많은 비용 절감도 가능합니다.

🔨 Aurora Detail

Aurora가 특별한 이유는 3개의 AZ에 걸쳐서 기록하는 것은 무엇이든 6개의 데이터 복제본으로 저장하기 떄문입니다.

이떄 최소 4개는 쓰기, 최소 3개는 읽기에 사용이 되어야 하는데 이러한 이유로 인해서 한개의 AZ가 다운돼고 괜찮습니다.

  • 그러기 떄문에 장애 조치가 즉각적입니다.

또한 자가 복구 과정또한 뛰어납니다.

일부 장애가 발생을 하면 P2P복제로 자가 복구를 진행하기 떄문에 일부 볼륨이 하니라 수백 개의 볼륨에 의지가 가능합니다.

profile
Block_Chain 개발자 입니다. 해당 블로그는 네트워크에 관한 내용을 다루고 있습니다.

0개의 댓글