RDS

LeeKyoungChang·2022년 4월 15일
1
post-thumbnail

생활 코딩을 참고하며 정리한 내용입니다.

 

📚 1. RDS란?

RDS : Amazon Relational Database Service

  • AWS는 RDS를 Managed라고 한다.
    • 데이터베이스를 관리를 대신해주겠다.
    • 데이터가 수입되거나 유출되는 것은 엄청 위험한 것이다.
    • AWS에서는 최고의 전문가가 RDS를 생성하였기에? 신뢰가 간다.
  • EC2 가격 비해 RDS는 2배 비싸다.

 

✔️ 수업에서는?

  • 필수기능인 db를 만들어보고, db 상태를 파악하고, 설정을 변경하고 삭제하는 방법을 알아볼 것이다.
  • RDS를 사용할시 db에 대한 부담은 내려놓고, 애플리케이션을 잘 구현하는데 집중할 수 있을 것이다.

 

📚 2. RDS 생성

여러가지 RDS을 지원한다. (현재는 MySQL을 선택한다.)

 

DB 인스턴스 클래스

  • 데이터베이스 서버를 이용하려면 컴퓨터가 필요하다. 그 컴퓨터의 사양이다.
  • free 티어는 AWS t2.micro만 사용할 수 있다.

 

스토리지 : 데이터를 저장하는 디스크

  • 범용 : 저렴한 저장장치
  • 용량이 커질 수록 가격이 올라간다.
  • IOPS : Input, Output 초당 얼마나 저장할 수 있는가? (범용보다 비싸다.)

 

인스턴스를 여러 개 만들었을 때 각각의 인스턴스 이름이 필요한데, 그 때 사용되는 이름을 지정할 수 있다.

 

VPC : AWS안에서 외부로부터 독립된 안전한 네트워크를 구성하는 서비스

  • RDS 네모 박스가 보안 그룹이다.
  • 안에 EC2, RDS
  • VPC를 통해 RDS, EC2 외부 접속을 막을 수 있어 안전해진다.
  • EC2 인스턴스를 만들어서 RDS 사용할 것이라면 외부에서 접속할 수 없도록 하는 것이 더욱 안전한 방법이다.
  • RDS를 사용해서 외부에서 RDS를 이용하게 하려면 (AWS 서비스가 아닌 것을 이용하게 하려면) 외부에서 인터넷을 접속할 수 있게 하는 것이 가장 단순한 방법이다.
  • 퍼블릭 액세스 아니요 할시 : VPC 내부의 EC2 인스턴스 및 디바이스만 데이터베이스에 연결할 수 있다.
  • 새로운 VPC 보안 그룹 생성 : 특정 머신들만 RDS에 접속할 수 있도록 지정할 수 있다.
  • 새 VPC 보안 그룹 이름을 지정해야한다.

 

  • 데이터베이스 이름 지정하기
  • 암호화를 지정하려면 키 값을 지정하기 (현재는 암호화 x 하였다.)
  • 백업 보존 기간 : RDS가 자동으로 생성한 백업은 현재는 7일이 최대 기간이다. (7일 이후 삭제되어 요금을 아낄 수 있다.)
  • 모니터링 : 상태에 대한 기록을 지정할 수 있다.
  • 로그 내보내기 : 설정을 지정할 시, 에러가 발생했을 때 별도로 관리한다. 문제가 발생했을 때 쉽게 파악할 수 있도록 하기 위해 설정한다.
  • 업그레이드, 유지 관리 기간, 삭제 방지

 

생성되었다!

 

📚 3. 접속

📖 A. 퍼블릭 방식으로 접속

  • 현재는 퍼블릭 액세스가 불가능한 상태인데 이를 변경하려고 한다. (가능한 상태로)
  • 즉시 적용한다.

 

✔️ 클라이언트가 db서버에 접속하려고 할 때

  • security group : aws에서는 서비스 차원에서 제공하는 방화벽 기능
    • 안에 데이터베이스가 포함되게 된다.
    • 데이터베이스 서버들은 동일한 보안설정을 가지게 된다.

 

✏️ 두 가지 상황이 발생할 수 있다.
(1) 클라이언트가 접속할 수 있는 소스를 제약한다.

  • 특정 ip를 가진 클라이언트만 접속할 수 있게 한다.
  • 누구나 접속할 수 있게 한다.

(2) 클라이언트가 서버에 접속할 때, 여러 서버가 설치되어 있을 수 있다.

  • port : 클라이언트가 어떤 서버에 접속할 것인지 지정하는 것
  • 클라이언트는 개방되어있는 port 서버에만 접속할 수 있게 할 수 있다.

 

✔️ 보안 그룹 적용(인바운드 적용) 한 후, 생성한 RDS mysql에 바로 접속 하기

RDS도 결국에는 EC2위에서 돌아간다.

 

📣 인바운드 vs 아웃바운드

  • 인바운드 : 데이터베이스 서버 입장에서 안으로 들어오는 것
  • 아웃바운드 : 데이터베이스 서버 입장에서 응답하는 것

➡️ 클라이언트를 허용하려면 인바운드를 설정해야한다. (아웃바운드 세팅하지 않아도 자동으로 된다.)

  • 내 ip 지정

 

RDS에서 생성한 mysql DB 접속

성공!

 

📖 B. 가장 안전한 AWS 아키텍처 테스트

  • 위 그림, 아키텍처를 테스트하기 위해 먼저, 이전에 퍼블릭 액세스를 가능하게 했었는데 불가능(꺼야한다)하게 해야 한다.
  • 퍼블릭 액세스 종료, 즉시 적용

 

  • 보안 그룹에 속해있는 인바운드에서 이전에 추가한 인바운드 규칙을 제거하여, 아무도 접속할 수 없는 상태로 만든다.

 

현재는 아무도 접속할 수 없는 상태이다.

✔️ 인스턴스 생성

  • 인스턴스 세부 정보 구성에서
  • 네트워크는 RDS와 같은 것으로 선택해야 한다. (vpc)

 

  • ssh 인바운드 보안 그룹 규칙
  • 22번 port : ssh, command line을 통해서 unix, macOS, linux와 같은 운영체제를 원격제어할 수 있는 방법을 사용하려고 할 때 22번을 지정한다.

 

  • 인스턴스 생성 완료!

 

✔️ 이제 EC2 가상서버에서

ssh -i key값 ubuntu@주소로 가상서버 접속
sudo apt-get update : 업데이트 한 번 한다.

sudo apt install mysql-client : mysql 설치

 

RDS 엔드포인트를 통해

 

mysql에 접속을 하려고 하는데, 접속이 되지 않는다.

 

🔊 접속이 안되는 이유

RDS, EC2는 같은 VPC안에 소속되어 있지만, EC2RDS에 접속하려면 security group을 통해 허용되어야 한다!

 

✔️ EC2 → RDS sercurity group 허용하기

EC2 주소를 보안그룹 인바운드에 등록해야한다.

  • 현재는 비어있는 상태

 

(1) EC2 퍼블릭 IP 주소를 (RDS Security group)인바운드에 등록해도 된다.
(2) EC2인스턴스가 소속되어있는 Security group을 RDS Security group 인바운드 소스에 등록한다. 👈🏽 이걸 사용!

  • EC2 보안 그룹에서 보안 그룹 ID를 복사한다.

 

RDS 보안 그룹에서

  • 헷갈리지 않게 이름을 지정한다. (이름을 준다. AWS2-RDS-Security)

 

EC2 인스턴스에 속해 있는 Security group에 속해 있는 머신들이 RDS(Security group)로 누구나 접속할 수 있게 하려면
EC2 인스턴스에 속해 있는 Security groupidRDS Security group id에 등록해야한다!

 

RDS 인바운드 규칙 편집

이제, RDS가 속해있는 Security group에는 EC2가 속해있는 Security group의 머신들은 누구나 접속할 수 있게 허용한 것이다!

 

(1) 이전, security group 설정하기 전까지는 mysql 실행했을 때는 실행이 되지 않았다!

  • 아무런 반응이 없다.

 

(2) 현재는 security group 설정한 후, mysql 실행했을 때 정상적으로 실행이 된다.

 

📌 정리

  • 안전하게 RDS에 접속할 수 있는 방법이다!
  • 이제 EC2만 접속할 수 있게 되기 때문에, 안전하다!
    • 항상 EC2를 경유해서 RDS를 접속해야되는 불편함이 있다.
    • 다만, 안전함이 최우선이다!

 

📚 4. 모니터링

CloudWatch

  • AWS 인프라 상황을 감지할 수 있는 독립된 서비스
  • 컴퓨터의 하드웨어를 감시한다.
  • DB 상태를 확인하는 방법

 

  • CPU 사용률 : RDS가 돌아가는 컴퓨터의 CPU 점유율 (실시간 서버가 아니다.)

  • DB 연결 : 클라이언트 DB서버에 접속할 때, 접속하나하나가 연결이다. 만약, 선이 그래프를 꽉차게 되면, 성능에 많은 영향을 미치기 때문에, 매우 중요하다!

  • 여유 스토리지 공간(MB) : DB가 가득찼다면, DB를 사용할 수 없어 조치를 취해야 한다.

    • 여유 스토리지 공간에 조건을 걸어놓을 시, 조건에 해당되면 이메일이나 알람을 받을 수 있다.
  • 사용 가능한 메모리(MB) : 메모리가 가득찼다면, 속도가 매우 느려진다.

    • CPU 사용률이 증가하고 있는데 내가 의도한 상태가 아니라면 RDS 인스턴스 타입 중에 CPU에 특히 강한 것을 고려해 봐야 한다.
    • 사용 가능한 메모리 공간이 얼마 남지 않았을 때, 메모리에 강한 인스턴스로 교체하는 것을 고려해 봐야 한다.
  • IOPS : 초당 입력, 출력의 성능이다. (저장장치 성능을 파악할 때 많이 사용한다.)

    • 어느정도가 적당한 것은 선택한 스토리지의 성능을 참고 및 IOPS의 현재 상태를 비교하여 높일지 낮출 지 선택할 수 있다.

 

💡 참고
(1) 확장 모니터링
확장 모니터링 : DB 서버가 설치되어있는 운영체제 안에 프로그램을 설치하여 프로그램이 실시간으로 현재 상태를 전송해준다.

  • 1초 간격
  • 기능을 켜야 사용가능하다.
  • 유료이다.
  • 성능 차이 : 확장 모니터링 > cloudwatch

(2) OS프로세스 목록
OS프로세스 목록 : 현재 OS상에서 설치, 실행되고 있는 프로세스 목록들이다.

 

무엇보다 수 감각을 익히는 것이 중요하다!
수 감각을 익혔다면, 정확한 의사 결정을 할 수 있다!

 

📚 5. 백업과 복원

수업은 백업과 복원 감각 위주

  • 7일동안 백업을 한다.
  • 값을 지정하지 않을 시, 백업을 하지 않을 수 있다.
  • 길게 지정할 시 돈이 더 든다.
  • 백업 기간 : 백업을 몇 시에 할 것인지 지정하는 것이다.
  • 최근 복원 시간
    • 모든 변경사항들을 기록한 백업 타입이 있다.
    • 초단위로 특정한 시기로 되돌아갈 수 있다.
  • 현 시점에는 13:56-14:26 UTC (GMT) 까지 복원이 가능하다!
  • 복원 시간은 5분 단위로 갱신된다.
  • 백업 설정을 언제든지 변경할 수 있다.

 

📖 A. 스냅샷

✔️ 스냅샷 백업

스냅샷 : 현재 백업된 인스턴스가 저장되어 있다.

스냅샷 생성

  • 위험한 작업을 하기 전에, DB전체를 백업할 수 있다.

 

스냅 샷 생성되면서, 사용하는 db 형식에 따라서 db가 잠시 꺼지는 down time이 발생할 수 있다.
서비스를 켜놓고 백업을 진행하면서 서비스가 잘돌아가는지 체크하는 것도 필요할 것이다.

 

✔️ 스냅샷 복원

백업을 복원할 때 스냅샷을 선택하여, 세부 정보에서 스냅샷 복원을 선택한다.

 

인스턴스 생성하는 화면이 나온다.

  • 새로운 인스턴스를 만들고 원래 있던 인스턴스에 복원하는 시점을 적용하는 방식이다. (복원하는 방식이다.)

 

📖 B. Automated backups (자동 백업)

특정한 시기로 정확하게 돌아가고 싶다면, 자동 백업을 사용한다!

  • 가장 빠른 복원 가능 시간보다 이전 시간으로 돌아갈 수 없다.
  • 최근 복원 가능 시간보다 더 최근에 변화를 복원할 수는 없다.

 

  • 특정 시점으로 복구할시, 그 시간으로 정교하게 복원할 수 있다.

 

💡 참고

  • RDS의 인스턴스를 자동으로 백업을 설정할 시, 해당 인스턴스을 삭제하면 자동 백업된 데이터도 삭제된다.
  • RDS의 인스턴스를 수동으로 백업을 설정할 시, 해당 인스턴스를 삭제해도 자동 백업된 데이터가 삭제되지 않는다.
    • 나중에라도 백업 데이터를 이용하여 복원할 수 있다.

 

RDS 인스턴스를 삭제할 때, 스냅 샷을 삭제할 것인지 묻는 경우가 있는데, 스냅 샷은 왠만하면 지우지 말자! (실수를 방지하기 위해!)
백업과 복원이 있는데 복원은 그 무엇보다 중요하다!

 

📚 6. 요금

RDS에 있는 DB에 따라 각각 다르다.
현재는 mysql을 기준

MySQL 서버는

  • 온디맨드 DB 인스턴스 (다중 AZ), 예약 DB 인스턴스 타입 둘 중 하나를 선택해야 한다.
    • DB 서버가 동작하는 컴퓨터의 사양과 관련이 있다.
  • 데이터베이스 스토리지 : 데이터를 저장하는 저장 장치의 크기
  • 백업 스토리지 : 데이터를 백업할 때도, 스토리지가 필요하다. 스토리지 관련 비용
  • 데이터 전송 : 인터넷 사용 요금

 

✔️ 온디맨드 DB 인스턴스

컴퓨터 사양에 따라 가격 체계 다중 AZ, 단일 AZ로 구분된다.

  • AZ : 가용성 지역
  • 단일 AZ : 하나의 건물에 DB서버와 데이터를 저장한다.
  • 다중 AZ : 두개 독립된 건물에 동시 분산한다. (훨씬 안전하다.)

 

✔️ 예약 DB 인스턴스

  • 1년, 3년기간 동안 DB 인스턴스를 사용하겠다.
  • 온디맨드 DB 인스턴스와 가격을 비교했을 때 더 싸다.
  • 가격 : 선 결제 없음 > 부분 선결제 > 전체 선결제

 

✔️ 데이터베이스 스토리지

범용SSD 스토리지

  • 저장장치의 크기를 키우면 속도가 자동으로 늘어난다.
  • 더 비싸다.
  • 대체로 저렴하지만, 느리다.

 

프로비저닝 IOPS(SSD) 스토리지

  • 저장공간 크기 지정가능하다.
  • 저장장치 속도도 지정가능하다.

 

💡 참고

  • 속도가 중요한 DB라면 프로피버징을 사용
  • 속도보다는 분산되어 있는 데이터베이스라면 범용 SSD 스토리지를 사용한다.

 

✔️ 백업 스토리지

데이터를 백업할 때 사용하는 것이다!

10GB DB를 구매했을 경우, 10GB까지는 백업된 데이터를 보관했을 때 공짜이다.

  • 저장 크기보다 더 늘어날 경우, 돈이 발생한다.
  • 10GB 꽉찼다면 데이터를 저장하지 못하는 사고가 발생한다.

 

✔️ 요금

aws 외부에 전송

aws 내부에 전송

 

AWS 프리 티어는 모든 AWS 서비스 및 리전을 합산해 매달 100GB의 무료 인터넷 데이터 송신 혜택을 받게 된다.

 

📚 7. RDS 삭제

'데이터베이스를 삭제하려면 데이터베이스를 수정하여 삭제 방지 기능을 비활성화 합니다.'
라고 나왔을 경우

  • 삭제 방지 비활성화한다.
  • 수정 사향 요약 : 즉시 적용

한 후, 삭제를 한다.

 

✔️ 삭제 과정

  • 인스턴스를 삭제하면, 자동으로 백업된 데이터도 다 삭제된다.
  • 왠만하면 최종 스냅샷 생성 여부 클릭한다.
    (스냅샷으로 만든 것만 남아 있게 된다.)

 

✔️ Multi Availability Zones

  • 데이터를 안전하게 보관하는 것은 중요하다.
  • 다른 건물에 데이터가 저장되어 있다면, 훨씬 안전하다.
  • 다중 에이전트 옵션을 사용하는 것이 매우 좋다.

 

데이터베이스 사향을 높이는 것이 쉽지 않은 일이다.
RDS을 이용하면 사향 높이는 것이 그렇게 어려운 일이 아니다.

 

✔️ Scale Up vs Scale Out
Scale Up

  • 컴퓨터의 사향을 높이는 것을 통해 성능을 향상 시키는 것
  • 한 개의 컴퓨터로 사향을 높이는 것은 한계가 존재한다.

Scale Out

  • 읽기를 전문적으로 하는 컴퓨터를 구분한다.
  • 읽기를 하는 컴퓨터를 여러 대를 붙여, 여러 가지 부하를 견딜 수 있게 된다.

 

✔️ Amazon Aurora

  • MySQL과 PostgreSQL가 호환된다.
  • MySQL보다는 5배 빠르고, PostgreSQL보다는 3배 빠르다.
  • 상용 서비스 보안 안전성 제공한다. (10배정도 싸다. 10gb를 최대 사용 가능 하다. 10gb 가득차면 64gb까지 확장된다.)
  • Aurora 사용시, 데이터베이스 쓰고 있지 않는 동안은 컴퓨터가 꺼져있다. 데이터베이스 쓰고 있을 때, 순간적으로 컴퓨터가 켜진다.
  • 사용한 만큼 요금을 내면 된다. 독특한 기능을 갖고 있는 서비스

 

✔️ RDS는

  • RDS에서 하는 것은 매우 혁신적인 기술이다.
  • 사용량이 많아지면 너무 높은 사향 컴퓨터로 자동으로 교체되는 auto scaling이 적용된 제품이기도 하다.
  • 데이터베이스 사용량을 예측하기 어려운 사람들에게는 아주 좋은 솔루션이다!
  • 데이터 자체와 애플리케이션 구현하는 것에 집중할 수 있는 중요한 도구 RDS를 갖게 되었다.

 

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글