Amazon RDS를 통해 클라우드에서 관계형 데이터베이스를 쉽게 설정하고 운영할 수 있다. 작년 카프카의 데이터베이스를 Aurora postgreSQL로 선택하면서 사용해왔는데 기존과 어떤점이 다른지 알아보고자 한다.
Amazon Aurora
Amazon Aurora 는 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진이다. Aurora에는 고성능 스토리지 하위시스템이 포함되며, MySQL 및 PostgreSQL과 호환되는 데이터베이스 엔진은 빠른 분산형 스토리지를 활용하도록 사용자 지정된다. 기본 스토리지는 필요에 따라 자동으로 커지며, Aurora 클러스터 볼륨 크기는 최대 128 tebibytes (TiB)까지 증가할 수 있다. Aurora는 또한데이터베이스 클러스터링 및 복제를 자동화하고 표준화하여 제공한다. RDS의 일부로 데이터베이스를 만들때 aurora를 선택 해서 생성할 수 있다.
Aurora DB Cluster
Aurora DB Cluster는 하나 이상의 DB 인스턴스와 DB 인스턴스들이 공유하는 클러스터 볼륨으로 구성되어 있다. Aurora DB는 기본적으로 클러스터 형태로 구성되고 클러스터내 인스턴스는 아래와 같이 두 가지 유형의 DB 인스턴스로 구성된다.
- 기본 DB 인스턴스
- 읽기 와 쓰기 가능
- 클러스터 볼륨의 모든 데이터 수정을 실행
- 클러스터당 기본 DB 인스턴스가 하나씩 존재
- Aurora 복제본
- 기본 DB 인스턴스와 동일한 스토리지 볼륨에 연결되어 사용되고 읽기 작업만 지원
- 각 Aurora DB 클러스터는 기본 DB 인스턴스에 더해 최대 15개 까지 읽기 전용인 Aurora 복제본을 구성가능
- 하나의 엔드포인트만 애플리케이션에서 연결해도 여러 Secondary DB들로 로드밸런싱을 해줌
- 복제본 별로 가용 영역에 배포하여 고가용성을 유지
- Primary DB가 죽어도 자동으로 Secondary DB가 승격되는 failover 기능
클러스터 볼륨
- Aurora 클러스터 볼륨에는 모든 사용자 데이터, 스키마 객체, 내부 메타데이터(예: 시스템 테이블 및 binlog 등) 가 포함되어있다.
- Aurora 공유 스토리지를 통해 복제 및 동기화가 이루어짐으로, Aurora 읽기 복제본 인스턴스를 추가 시 별도의 복제 복사본을 만들지 않고 빠르게 인스턴스를 추가 할 수 있다.
→ 복제본으로 보내는 데이터는 frm파일(테이블의 메타데이터 저장하는 파일), Redo log(DB 변경사항 기록)여서 용량 자체가 적으므로 네트워크 대역폭을 적게 사용하고, write한 데이터들을 read로 빠르게 전송 및 반영이 될 수 있는 구조이다.
MySQL과 비교
MySQL | Aurora |
복제는 반드시 로그 재생이 필요 | 로그 재생이 없음 |
복제는 마스터에 추가적인 부하 발생 | 마스터에 부하 최소 |
로그 재생 때문에 복제 지연의 증가할 수 있음 | 복제 지연이 거의 없음 |
failover시 데이터 정합성 보장 또는 유실 가능성 | 동일 스토리지를 공유하여 failover되어도 바로 주 DB 역할 가능 |
읽기/쓰기 분리시 주의할점
- 읽기/쓰기 분리시 주의할 점은 reader node의 인스턴스 클래스 구성이 Writer보다 너무 작은 경우 변경 데이터의 볼륨이 너무 커서 reader가 writer를 따라잡을 수 없게된다는 점이다. 그래서 두 인스턴스의 사양을 동일하게 맞출 것을 권하고 있다.
* AuroraReplicaLag이란
- 단일 클러스터 내에서 writer-reader 간에 복제 지연을 나타내는 지표(밀리초)
- 아래는 현재 사용하고 있는 postgreSQL의 replicaLag 그래프로, 대부분 10ms 이하로 걸리고 가끔 0.2초 지연이 생긴다고 나온다.
참고 : https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html
'개발 환경 및 운영' 카테고리의 다른 글
환경변수 주입하는 두 가지 방법 (2) | 2024.12.08 |
---|---|
EC2 인스턴스 복제부터 로드밸런서 설정 및 Route53 DNS 설정까지 (1) | 2024.02.21 |
Github Action with docker, k8s (0) | 2023.07.08 |