빠른 리전 간 재해 복구 및 짧은 지연 시간의 글로벌 읽기

Amazon Aurora Global Database 사용

이 자습서에서는 여러 AWS 리전에 걸쳐 성능에 영향을 주지 않고 데이터를 복제하는 Amazon Aurora Global Database 배포를 생성하는 방법에 대해 알아봅니다. Aurora Global Database에서는 전체 리전에서 발생하는 가동 중단으로부터 재해 복구를 제공하고 지연 시간이 짧은 글로벌 읽기를 지원합니다.

Amazon Aurora는 기존 엔터프라이즈 데이터베이스의 성능과 가용성에 오픈 소스 데이터베이스의 간편성과 비용 효율성을 결합한 MySQL 및 PostgreSQL 호환 관계형 데이터베이스입니다.

Aurora Global Database는 기본 AWS 리전(데이터가 마스터됨)과 데이터가 복제되는 여러 개의 읽기 전용 보조 AWS 리전으로 구성됩니다. 내용은 기본 데이터베이스에 기록되지만 어떤 리전에서도 읽을 수 있으면서도 낮은 지연의 혜택을 받을 수 있습니다.

이 자습서에서는 MySQL 호환성이 제공되는 Amazon Aurora를 사용합니다. 이 자습서는 프리 티어로 제공되지 않으며, 비용은 자습서의 단계를 따르고 자습서 종료 시 리소스를 종료하는 경우 1 USD 미만입니다.

사전 조건

Amazon Aurora DB 클러스터는 하나 이상의 DB 인스턴스와 해당 DB 인스턴스에 대한 데이터를 관리하는 클러스터 볼륨으로 구성됩니다. Aurora 클러스터 볼륨은 여러 가용 영역에 걸쳐 있는 가상의 데이터베이스 스토리지 볼륨이고 각 가용 영역에는 DB 클러스터 데이터의 사본이 있습니다. DB 인스턴스 두 가지 유형이 Aurora DB 클러스터를 구성합니다. 기본 DB 인스턴스는 읽기 및 쓰기 작업을 지원하고, Aurora Replica는 기본 DB 인스턴스와 동일한 스토리지 볼륨으로 연결되고 읽기 전용 작업만 지원합니다. 각 Aurora DB 클러스터는 별도의 가용 영역에 위치한 Aurora 복제본을 15개까지 가질 수 있습니다. Aurora는 기본 DB 인스턴스를 사용하지 못하게 될 경우 Aurora 복제본으로 자동 대체됩니다.

이 자습서에서는 한 리전에서 기본 클러스터를 생성하고 다른 리전에 두 번째 클러스터를 생성해서 Aurora Global Database를 생성합니다. 어느 리전을 사용할지는 개발자가 결정합니다. 사용할 각 리전에 애플리케이션을 두는 것이 좋습니다. 예를 들어 us-east-1에 기본 클러스터가 있고 eu-west-3에 두 번째 클러스터가 있는 Aurora Global Database인 경우, us-east-1에 인스턴스가 있고 eu-west-3에 다른 인스턴스가 있어야 합니다.

또한, 시간을 절약하고 싶다면 각각의 해당 리전에 대해 보안 그룹을 생성하여 인스턴스에서 수신되는 연결을 허용할 수 있습니다. 예를 들어 MYSQL/Aurora 유형의 인바운드 규칙을 포함하여 보안 그룹을 생성하여 인스턴스의 보안 그룹에서 포트 3306에 대한 TCP 연결을 허용할 수 있습니다.

마지막으로 Aurora Global Database를 테스트하려면(8단계 참조) MySQL 클라이언트가 필요합니다. 애플리케이션 인스턴스가 Amazon Linux를 실행할 경우, sudo yum install mysql을 실행하기만 하면 MySQL 클라이언트를 설치할 수 있지만 정확한 명령은 실행 중인 OS에 따라 달라집니다. Windows를 실행할 경우 대신 MySQL 워크벤치를 다운로드할 수 있습니다.

자습서 소개
시간 10분                                           
요금 1 USD 미만
사용 사례 데이터베이스
제품 Amazon Aurora, Amazon RDS
대상 데이터베이스 관리자, 개발자
레벨 중급자용
최종 업데이트 날짜 2019년 6월 3일

1단계: Amazon RDS 콘솔 액세스

1.1 — 브라우저를 열고 Amazon RDS 콘솔로 이동합니다. 이미 AWS 계정이 있으면 콘솔에 로그인합니다. 그렇지 않으면 새 AWS 계정을 만든 후 시작합니다.

1.2 - 오른쪽 상단 모서리에서 기본 Aurora DB 클러스터를 시작할 리전을 선택합니다. 이 자습서에서는 us-east-1을 기본 리전으로 사용하고 eu-west-1은 두 번째 리전으로 사용합니다.

계정이 있습니까? 계정에 로그인

1.3 - Amazon Aurora 창에서 “데이터베이스 생성”을 클릭합니다.

1.4 — 스크롤을 아래로 내리고 Aurora Global Database 창에서 [지금 사용해 보기]를 클릭합니다. [지금 사용해 보기] 옵션이 보이지 않으면 여기를 클릭하십시오.

2단계: 엔진 옵션

2.1 — [엔진 유형]에서 [Amazon Aurora]를 선택합니다.

2.2 — [에디션]에서 [MySQL 호환성이 추가된 Amazon Aurora]를 선택합니다.

2.3 – [버전]에서 가장 최신 MySQL 버전을 선택합니다.

2.4 — [데이터베이스 위치]에서 [전체]를 선택합니다.

2.5 — [프로덕션] 템플릿을 선택합니다.

3단계: Global Database 설정

3.1 — [Global Database 식별자]에 “global-database-1”을 입력합니다.

4단계: 기본 리전 설정

4.1 — [DB 인스턴스 크기]에서 라지 인스턴스(.large로 끝남)를 선택합니다.

4.2 — [가용성 및 내구성]에서 [Aurora 복제본을 생성하지 않음]을 선택합니다.

Aurora 복제본은 읽기를 확장할 수 있고 기본 데이터베이스와 동일한 리전에서 자동 페일오버를 실행할 수 있기 때문에 프로덕션 환경에 추천합니다. 이 자습서에서는 실습을 단순하게 유지하기 위해 Aurora 복제본을 추가하지 않습니다.

5단계: 연결

5.1 — 데이터베이스를 생성할 VPC를 선택합니다.

생성한 이후에는 다른 VPC로 마이그레이션할 수 없음에 유의하십시오.

5.2 — [추가 연결 구성]을 클릭합니다.

5.3 — 서브넷 그룹에 대한 기본값을 선택합니다.

5.4 — [공개적으로 액세스할 수 있음]에서 [아니요]를 선택합니다.

즉, 동일 VPC 내의 EC2 인스턴스에서 데이터베이스에 연결해야 합니다.

5.5 — VPC 보안 그룹에서 [새로 만들기]를 선택합니다. 3306 포트에서 수신 TCP 연결을 허용하는 보안 그룹이 있는 경우에는 이 그룹을 대신 사용해도 됩니다.

5.6 — [새 VPC 보안 그룹 이름]에 “elc-tutorial”을 입력합니다.

5.7 — 데이터베이스 포트에서 기본값을 그대로 유지합니다.

6단계: 추가 구성

6.1 — 데이터베이스 옵션, 백업, 모니터링, 로그 내보내기, 유지관리, 삭제 보호에서 기본값을 그대로 유지합니다.

6.2 — [데이터베이스 생성]을 클릭합니다.

인스턴스가 생성되는 동안 자격 증명을 얻을 방법을 설명하는 배너가 표시됩니다. 이때만 이 암호를 볼 수 있기 때문에 자격 증명을 저장할 좋은 기회입니다.

6.3 — [자격 증명 세부 정보 보기]를 클릭합니다.

6.4 — 사용자 이름과 암호를 저장합니다.

7단계: 보조 리전 추가

7.1 — “global-database-1”을 선택합니다.

7.2 — [작업 > 리전 추가]를 클릭합니다.

7.3 — 드롭다운에서 리전을 선택합니다.

7.4 — 4.1~5.7을 반복합니다.

7.5 — [리전 추가]를 클릭합니다.

데이터베이스를 사용할 수 있게 되면 8단계로 넘어갑니다.

8단계: Aurora Global Database 테스트

8.1 — 기본 데이터베이스를 클릭합니다.

8.2 — 라이터 엔드포인트를 복사합니다.

두 개의 터미널 창을 열고, 기본 및 보조 리전에서 인스턴스에 로그인하고, mysql 명령줄 클라이언트를 사용하여 데이터베이스에 연결합니다.

데이터베이스를 생성하고, 테이블을 생성하고, 일부 레코드를 작성할 수 있습니다. 기본 데이터베이스에 작성하는 모든 내용은 보조 클러스터에 복제됩니다.

8.3 — 기본 데이터베이스에 연결

$ mysql -h endpoint -P 3306 -u admin -p

암호를 입력하라는 메시지가 표시되면 6.6단계에서 저장한 암호를 입력합니다.

8.4 - 데이터베이스를 생성하고 일부 데이터를 작성합니다.

mysql> CREATE database tutorial;
Query OK, 1 row affected (0.01 sec)

지금은 자습서 데이터베이스를 사용하여 테이블을 생성하고 레코드를 추가할 수 있습니다.

8.5 — 보조 리전으로 이동합니다.

8.6 — 보조 데이터베이스를 클릭합니다.

8.7 — 리더 엔드포인트를 복사합니다.

8.8 — 보조 데이터베이스에 연결합니다.

$ mysql -h endpoint -P 3306 -u admin -p

암호를 입력하라는 메시지가 표시되면 6.6단계에서 저장한 암호를 입력합니다.

8.9 — 일부 데이터를 읽습니다.

mysql> USE tutorial;
Database changed

이제 데이터베이스가 보조 데이터베이스에 복제된 것을 확인할 수 있습니다. 테이블을 생성했을 경우, 기본 클러스터에 작성하고 보조 클러스터에서 데이터를 읽을 수 있습니다.

9단계: 보조 리전으로 페일오버

기본 Aurora 클러스터가 리전 내에서 페일오버 기능을 제공하지만, Aurora Global Database를 사용하면 다른 리전에 보조 클러스터로 페일오버를 실행할 수 있습니다. 즉, 전체 리전을 사용할 수 없게 되더라도 데이터베이스가 그대로 보존됩니다.

Aurora Global Database에 대해 페일오버를 실행하면 원래 글로벌 데이터베이스에서 보조 클러스터를 제거하여 전체 읽기-쓰기 기능이 있는 리전 클러스터로 바꾼 다음, 새 Aurora Global Database에서 기본 클러스터로 사용할 수 있습니다.

아래의 지침에 따라 수동으로 페일오버를 실행할 수 있습니다.

9.1 — 기본 데이터베이스에 대한 기록을 중지합니다.

9.2 — 보조 클러스터를 선택합니다.

9.3 — [작업] > [전체에서 제거]를 클릭합니다.

9.4 — [제거 및 승격]을 클릭하여 확인합니다.

9.5 — 새로 승격된 클러스터에 쓰기 위해 애플리케이션을 구성합니다.

9.6 — 보조 리전에서는 리전 클러스터를 선택합니다.

9.7 — [작업] > [글로벌 데이터베이스 생성]을 클릭합니다.

9.8 — 드롭다운에서 리전을 선택합니다.

9.9 — 4.1~5.7단계를 반복합니다.

10단계: 정리

이 자습서를 마치면서 Aurora Global Database를 삭제합니다. 그대로 두어도 되지만 요금이 발생할 수 있다는 점을 명심해야 합니다.

Aurora Global Database를 삭제하려면 RDS 대시보드로 이동하고 다음의 지침을 따르십시오.

10.1 — 왼쪽 창에서 [데이터베이스]를 선택합니다.

그러면 Aurora DB 클러스터의 전체 목록이 표시됩니다.

10.2 — 글로벌 데이터베이스 인스턴스를 선택합니다.

10.3 — [작업] > [삭제]를 클릭합니다.

10.4 — 최종 백업 생성 여부를 묻는 메시지가 표시됩니다. 최종 스냅샷을 생성하는 것이 권장되지만, 이 자습서에서는 필요하지 않습니다. [아니요]를 선택하고 [삭제]를 클릭합니다.

10.5 — 글로벌 데이터베이스 클러스터를 선택합니다.

10.6 — [작업] > [전체에서 제거]를 클릭합니다.

10.7 — [전체에서 제거]를 클릭하여 확인합니다.

10.8 — 리전 데이터베이스 클러스터를 선택합니다.

10.9 — [작업] > [삭제]를 클릭합니다.

10.10 — 최종 스냅샷 생성 여부를 묻는 메시지가 표시됩니다. 최종 스냅샷을 생성하는 것이 권장되지만, 이 자습서에서는 필요하지 않습니다. [아니요]를 선택하고 [DB 클러스터 삭제]를 클릭합니다.

10.11 — 보조 리전으로 전환하고 10.1~10.9단계를 실행합니다.

10.12 — 글로벌 데이터베이스를 선택합니다.

10.13 — [작업] > [삭제]를 클릭합니다.

10.14 — “delete me”를 입력하고 [삭제]를 클릭하여 확인합니다.

클러스터 상태가 [삭제 중]으로 변경됩니다.

축하합니다!

리전에 복제본이 있는 Aurora Global Database를 생성했습니다. 지연을 낮추기 위해 다른 지역으로 읽기를 확장하는 방법을 배웠고 보조 리전으로 페일오버를 실행하였습니다.

이 자습서가 유용했습니까?

감사합니다.
좋아하는 사항을 알려주세요.
실망을 드려 죄송합니다.
오래되었거나 혼란스럽거나 부정확한 사항이 있습니까? 피드백을 제공하여 이 자습서를 개선할 수 있도록 도와주십시오.