Amazon Web Services 한국 블로그

Amazon RDS for MySQL 및 PostgreSQL 다중 AZ 배포 옵션 – 향상된 쓰기 성능 및 더 빠른 장애 조치

오늘 AWS에서는 트랜잭션 커밋 대기 시간이 최대 2배 빨라지고 자동 장애 조치가 일반적으로 35초 미만이며 읽기 가능한 대기 인스턴스를 제공하는 새로운 Amazon Relational Database Service(RDS) 다중 AZ 배포 옵션을 발표합니다.

Amazon RDS는 가용성과 성능을 향상시키기 위해 두 가지 복제 옵션을 제공합니다.

  • 다중 AZ 배포는 고가용성과 자동 장애 조치를 제공합니다. Amazon RDS는 두 번째 가용 영역에 데이터베이스의 스토리지 수준 복제본을 생성합니다. 그런 다음 고가용성을 위해 프라이머리 인스턴스에서 대기 DB 인스턴스로 데이터를 동기식으로 복제합니다. 프라이머리 DB 인스턴스는 애플리케이션 요청을 처리하는 반면, 대기 DB 인스턴스는 장애 발생 시 인계할 준비가 된 상태로 유지됩니다. Amazon RDS는 장애 감지, 장애 조치 및 복구 작업의 모든 측면을 관리하므로 데이터베이스를 사용하는 애플리케이션의 가용성을 높일 수 있습니다.
  • 읽기 전용 복제본을 사용하면 애플리케이션이 여러 데이터베이스 인스턴스에 걸쳐 읽기 작업을 확장할 수 있습니다. 데이터베이스 엔진은 데이터를 읽기 전용 복제본에 비동기식으로 복제합니다. 애플리케이션은 쓰기 요청(INSERT, UPDATEDELETE)을 프라이머리 데이터베이스로 전송하며 읽기 요청(SELECT)은 읽기 전용 복제본 간에 로드 밸런스될 수 있습니다. 프라이머리 노드에 장애가 발생할 경우 읽기 전용 복제본을 수동으로 승격하여 새 프라이머리 데이터베이스로 만들 수 있습니다.

다중 AZ 배포와 읽기 전용 복제본은 다양한 용도로 사용됩니다. 다중 AZ 배포는 애플리케이션에 고가용성, 내구성 및 자동 장애 조치를 제공합니다. 읽기 전용 복제본은 애플리케이션에 읽기 확장성을 제공합니다.

하지만 자동 장애 조치를 통한 고가용성과 읽기 확장성을 모두 필요로 하는 애플리케이션은 어떻습니까?

읽기 가능한 대기 인스턴스 2개가 포함된 새로운 Amazon RDS 다중 AZ 배포 옵션을 소개합니다.
오늘부터 RDS 데이터베이스를 배포하는 새로운 옵션을 추가할 예정입니다. 이 옵션은 자동 장애 조치와 읽기 전용 복제본을 결합합니다. Amazon RDS 다중 AZ에는 읽기 가능한 대기 인스턴스가 2개 있습니다. 이 배포 옵션은 MySQL 및 PostgreSQL 데이터베이스에 사용할 수 있습니다. 프라이머리 인스턴스 1개와 읽기 가능한 대기 인스턴스 2개가 있는 데이터베이스 클러스터입니다. 최대 2배 더 빠른 트랜잭션 커밋 대기 시간과 자동화된 장애 조치(일반적으로 35초 미만)를 제공합니다.

다음 다이어그램은 이러한 배포를 보여 줍니다.

3개의 AZ RDS 데이터베이스

새로운 다중 AZ DB 클러스터 배포 옵션이 활성화되면 RDS는 3개의 개별 가용 영역에 1개의 프라이머리 데이터베이스와 2개의 읽기 전용 복제본을 구성합니다. 그런 다음 프라이머리 노드에 장애가 발생할 경우 장애 조치를 모니터링하고 활성화합니다.

기존 읽기 전용 복제본과 마찬가지로 데이터베이스 엔진은 프라이머리 노드와 읽기 전용 복제본 간에 데이터를 복제합니다. 또한 다중 AZ 단일 대기 배포 옵션과 마찬가지로 RDS는 고가용성을 위해 장애 조치를 자동으로 감지하고 관리합니다.

고가용성과 확장성 중에서 선택할 필요가 없습니다. 읽기 가능한 대기 복제본이 2개인 다중 AZ DB 클러스터는 둘 다 활성화합니다.

어떤 이점이 있습니까?
이 새로운 배포 옵션은 기존 다중 AZ 배포에 비해 향상된 커밋 대기 시간, 더 빠른 장애 조치, 읽기 가능한 대기 인스턴스 및 최적화된 복제라는 4가지 이점을 제공합니다.

첫째, 다중 AZ DB 클러스터를 사용하면 쓰기 작업이 빨라집니다. 새로운 다중 AZ DB 클러스터 인스턴스는 M6gd 및 R6gd 인스턴스 유형을 활용합니다. 이러한 인스턴스는 AWS Graviton2 프로세서로 구동됩니다. 로컬 스토리지용 고속 NVMe SSD가 장착되어 대기 시간이 짧은 고속 스토리지에 이상적입니다. 동급 x86 기반 인스턴스에 비해 최대 40% 향상된 가격 대비 성능과 vCPU당 50% 더 많은 로컬 스토리지 GB를 제공합니다.

다중 AZ DB 인스턴스는 Amazon Elastic Block Store(EBS)를 사용하여 데이터와 트랜잭션 로그를 저장합니다. 새로운 다중 AZ DB 클러스터 인스턴스는 인스턴스에서 제공하는 로컬 스토리지를 사용하여 트랜잭션 로그를 저장합니다. 로컬 스토리지는 애플리케이션에 짧은 대기 시간과 높은 초당 I/O 작업(IOPS)을 제공하도록 최적화되었습니다. 쓰기 작업은 먼저 로컬 스토리지 트랜잭션 로그에 작성된 다음 데이터베이스 스토리지 볼륨의 영구 스토리지로 플러시됩니다.

둘째, 장애 조치 작업은 일반적으로 다중 AZ DB 인스턴스 시나리오보다 빠릅니다. 새로운 다중 AZ DB 클러스터에서 생성된 읽기 전용 복제본은 완전한 데이터베이스 인스턴스입니다. 이 시스템은 35초 이내에 장애 조치할 수 있도록 설계되었으며 보류 중인 트랜잭션 로그를 적용하는 시간도 늘어납니다. 장애 조치(failover)의 경우, 시스템은 완전히 자동화되어 새로운 프라이머리 인스턴스를 승격시키고 이전 프라이머리 인스턴스를 새 리더 인스턴스로 재구성합니다.

셋째, 2개의 대기 인스턴스는 상시 대기 상태로 있습니다. 애플리케이션은 클러스터 리더 엔드포인트를 사용하여 읽기 요청(SELECT)을 이러한 대기 인스턴스로 보낼 수 있습니다. 이를 통해 애플리케이션은 데이터베이스 클러스터의 인스턴스 간에 데이터베이스 읽기 로드를 균등하게 분산할 수 있습니다.

마지막으로 트랜잭션 로그에 로컬 스토리지를 활용하면 복제가 최적화됩니다. 기존 다중 AZ DB 인스턴스는 모든 변경 사항을 스토리지 수준에서 복제합니다. 새로운 다중 AZ DB 클러스터는 트랜잭션 로그만 복제하고 쿼럼 메커니즘을 사용하여 하나 이상의 대기 복제본이 변경을 승인했는지 확인합니다. 보조 인스턴스 중 하나에서 해당 로컬 디스크에 트랜잭션 로그가 기록되었음을 확인하면 데이터베이스 트랜잭션들이 동기적으로 커밋됩니다.

기존 데이터베이스 마이그레이션
기존 RDS 데이터베이스를 보유하고 있고 이 새로운 다중 AZ DB 클러스터 배포 옵션을 활용하려는 사용자의 경우 데이터베이스의 스냅샷을 만들어 기존 데이터베이스 인스턴스의 스토리지 수준 백업을 생성할 수 있습니다. 스냅샷이 준비되면 이 스냅샷을 기반으로 다중 AZ DB 클러스터 배포 옵션을 사용하여 새 데이터베이스 클러스터를 생성할 수 있습니다. 새 다중 AZ DB 클러스터는 기존 데이터베이스의 완벽한 복사본이 됩니다.

이것이 작동하는 모습을 살펴보겠습니다.
시작하려면 브라우저에서 AWS 관리 콘솔을 열고 RDS로 이동합니다. 다중 AZ DB 클러스터 배포 옵션은 MySQL 버전 8.0.28 이상 및 PostgreSQL 버전 13.4 R1 및 13.5 R1에서 사용할 수 있습니다. 두 데이터베이스 엔진 중 하나를 선택하고 버전이 최소 요구 사항과 일치하는지 확인합니다. 나머지 절차는 표준 Amazon RDS 데이터베이스 시작과 동일합니다.

배포 옵션(Deployment options)에서 PostgreSQL, 버전 13.4 R1을 선택하고 가용성 및 내구성(Availability and Durability)에서 다중 AZ DB 클러스터(Multi-AZ DB cluster)를 선택합니다.

3개의 AZ RDS 시작 콘솔

필요한 경우 RDS가 클러스터에 사용하는 가용 영역 집합을 선택할 수 있습니다. 이렇게 하려면 DB 서브넷 그룹을 생성하고 이 서브넷 그룹에 클러스터를 할당합니다.

시작한 후 3개의 DB 인스턴스가 생성되었는지 확인합니다. 또한 Amazon RDS에서 제공하는 2개의 엔드포인트, 즉 읽기 가능한 대기 인스턴스 2개를 위한 프라이머리 엔드포인트와 로드 밸런스된 엔드포인트 1개도 기록해 둡니다.

RDS 3개 AZ 인스턴스 목록

새 클러스터를 테스트하기 위해 데이터베이스와 동일한 보안 그룹 내의 동일한 VPC에 Amazon Linux 2 EC2 인스턴스를 생성하고 AmazonSSMManagedInstanceCore 관리형 정책이 포함된 IAM 역할을 연결했는지 확인합니다. 이렇게 하면 SSH 대신 SSM을 사용하여 인스턴스에 연결할 수 있습니다.

인스턴스가 시작되면 SSM을 사용하여 인스턴스에 연결합니다. PostgreSQL 클라이언트 도구를 설치합니다.

sudo amazon-linux-extras enable postgresql13
sudo yum clean metadata
sudo yum install postgresql

프라이머리 DB에 연결합니다. 테이블을 생성하고 레코드를 삽입(INSERT)합니다.

psql -h awsnewsblog.cluster-c1234567890r.us-east-1.rds.amazonaws.com -U postgres

postgres=> create table awsnewsblogdemo (id int primary key, name varchar);
CREATE TABLE

postgres=> insert into awsnewsblogdemo (id,name) values (1, 'seb');
INSERT 0 1

postgres=> exit

복제가 예상대로 작동하는지 확인하기 위해 읽기 전용 복제본에 연결합니다. 엔드포인트 이름에 -ro-가 표시됩니다. 테이블 구조를 확인하고 SELECT 문을 입력하여 데이터가 복제되었는지 확인합니다.

psql -h awsnewsblog.cluster-ro-c1234567890r.us-east-1.rds.amazonaws.com -U postgres

postgres=> \dt

              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | awsnewsblogdemo | table | postgres
(1 row)

postgres=> select * from awsnewsblogdemo;
 id | name
----+------
  1 | seb
(1 row)

postgres=> exit

장애 조치 시나리오에서는 애플리케이션에서 프라이머리 데이터베이스 인스턴스의 연결이 끊어집니다. 이 경우 애플리케이션 수준 코드에서 네트워크 연결을 다시 설정하는 것이 중요합니다. 잠시 후 엔드포인트의 DNS 이름이 대기 인스턴스를 가리키며 애플리케이션이 다시 연결할 수 있게 됩니다.

다중 AZ DB 클러스터에 대한 자세한 내용은 설명서를 참조하세요.

요금 및 가용성
읽기 가능한 대기 인스턴스가 2개인 Amazon RDS 다중 AZ 배포는 미국 동부(버지니아 북부), 미국 서부(오레곤) 및 유럽(아일랜드) 리전에서 정식 출시되었습니다. 이 목록에 더 많은 리전을 추가할 예정입니다.

MySQL 버전 8.0.28 이상이나 PostgreSQL 버전 13.4 R1 또는 13.5 R1에서 사용할 수 있습니다.

요금은 인스턴스 유형에 따라 다릅니다. 미국 지역의 온디맨드 요금은 M6gd 인스턴스의 경우 시간당 0.522 USD, R6gd 인스턴스의 경우 시간당 0.722 USD부터 시작합니다. 평소와 같이 Amazon RDS 요금 페이지에는 MySQLPostgreSQL에 대한 세부 정보가 나와 있습니다.

지금 바로 사용할 수 있습니다.

– Seb