AWS 기술 블로그
Amazon RDS MySQL 블루/그린 배포 환경에서 Amazon Route 53을 활용한 운영환경 읽기 쿼리 분산
데이터베이스를 업데이트할 때 블루/그린(Blue/Green) 배포 기법을 사용하는 것은 사용자가 위험과 다운타임을 최소화할 수 있는 매력적인 옵션입니다. 이 데이터베이스 업데이트 방법에는 현재 프로덕션 환경, 즉 블루 환경과 스테이징 환경, 즉 그린 환경이라는 두 가지 데이터베이스 환경이 필요합니다. Amazon Aurora와 Amazon Relational Database Service(Amazon RDS) 에서 이런 블루 그린 배포 환경 구성을 위하여 완전 관리형 Amazon RDS Blue/Green Deployments를 정식으로 출시 하였습니다. Amazon RDS를 블루/그린 배포를 활용하여 데이터베이스 엔진 업그레이드 작업을 하는 경우 테스트를 위하여 운영 중인 서비스를 점검하기 위해 사용자의 모든 쿼리를 점검하고 최적화하는 것이 최선입니다. 하지만 데이터베이스에서 수행되는 모든 사용자 쿼리를 테스트한다는 것은 사실상 불가능합니다. 그리고 실제 운영환경에서 동작할 때 다른 문제가 발생할 수 있습니다. 이에 대한 대안으로 블루/그린 배포 환경을 구성하고 Amazon Route 53을 이용해 사용자 읽기 쿼리의 일부를 새로운 데이터베이스 엔진 버전에서 실행되도록 가중치 기반의 읽기 쿼리 테스트를 수행하여 최소한의 오류로 운영 환경에서의 문제점을 파악할 수 있습니다.
이 블로그에서는 Amazon Route 53을 활용하여 Amazon RDS에 접속하는 방법과 일부 커넥션을 신규 클러스터에서 수행하는 방법을 설명합니다. 또한, 블루/그린 전환 작업 후 발생할 수 있는 읽기 쿼리 수행 문제에 대해 전환 작업 전 최소한의 읽기 쿼리로 오류를 확인할 방법을 기술하였습니다.
Amazon Route 53에 Amazon RDS MySQL 연결하기
Route 53을 사용하여 RDS 서비스에 연결하게 되는 경우 몇 가지 환경에서 효율적으로 사용 가능 합니다.
- 읽기 전용 복제본 추가/제거 시
- 매뉴얼 블루/그린 환경 활용
- 특정 인스턴스 그룹에만 동작하는 환경 구성
- 접속 주소 가독성 향상
- 클러스터 혹은 RDS 그룹 외에 인스턴스와 엔드포인트 그룹 생성
이외에도 여러 가지 환경에서 효율적으로 RDS 서비스를 접속하는 데 활용될 수 있습니다. 이번 블로그에서는 Route 53을 활용하여 RDS 그룹 외에 다른 RDS 그룹과 가중치 기반 라우팅 기능을 활용하여 접속 커넥션을 분산하는 방법에 대하여 작성하였습니다.
단계 1 : Route 53 호스팅 영역으로 이동
콘솔 페이지에서 Route 53 서비스를 선택하여 호스팅 영역 탭으로 갑니다. 여기서 호스팅 영역을 생성할 수 있습니다.
단계 2 : Amazon Route 53 호스팅 영역 생성
호스팅 영역 생성 버튼을 클릭하면 호스팅 영역에 대해 설정할 수 있습니다. 사용할 도메인 이름을 기입하고 어디서 사용할지 설명을 작성합니다. 호스팅 영역 유형은 VPC 내에서 블루/그린 배포 환경에서 사용할 도메인이기 때문에 프라이빗 호스팅 영역을 사용합니다. 그리고 호스팅 영역과 연결할 VPC 정보로는 사용할 Amazon RDS가 있는 VPC 정보를 추가합니다.
단계 3 : 레코드 생성
프라이빗 호스팅 영역을 생성한 후 연결할 Amazon RDS 엔드포인트에 접속할 레코드를 생성해 주어야 합니다. 생성한 호스트 영역에서 레코드 생성 버튼으로 레코드를 생성할 수 있습니다.
단계 4 : 레코드 정보 기입
사용할 레코드 이름을 기입하고, 레코드 타입은 CNAME 으로 변경해 줍니다. 값에는 Amazon RDS의 접속할 엔드포인트를 입력합니다. 이번 단계에서는 한 개의 엔드포인트를 대상으로 생성하기 때문에 라우팅 정책을 단순 라우팅으로 설정합니다.
생성이 완료되면 호스팅 영역 정보에서 생성한 레코드를 확인할 수 있습니다.
단계 5 : 생성한 주소로 데이터베이스 접속하기
레코드가 완성되었다면 기존에 접속할 수 있었했던 클라이언트에서 생성한 레코드를 통해 접속이 가능합니다. 이 블로그에서는 EC2에서 생성한 레코드를 통하여 접속합니다.
[root@ip-172-31-123-45 ec2-user]# mysql -udb_admin -p -h dbendpoint.route53-aurora-test.com
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 121293
Server version: 5.7.12-log MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
블루/그린 배포 환경에서 가중치 기반으로 업그레이드 환경 구현
앞에 설명한 Route 53의 레코딩의 라우팅 정책 중 가중치 기반의 라우팅 정책을 통해 블루/그린 배포 환경에서 읽기 쿼리에 대한 가중치를 설정한 접속이 가능합니다.
단계 1 : 가중치 기반 레코드 생성
레코드 생성 시 라우팅 정책을 가중치 기반으로 설정합니다. 그리고 동일한 레코드 이름을 가진 복수의 레코드를 생성하고 레코드별로 트래픽에 대한 가중치를 각 분산 가중치에 맞게 설정합니다. 정보를 기입 완료한 후 레코드를 생성하면 같은 레코드 이름을 가진 레코드가 생성됩니다.
생성된 레코드는 호스트 영역 정보에서 확인할 수 있습니다.
단계 2 : 레코드로 블루/그린 환경의 모든 읽기 전용 엔드포인트에 접속 확인
Route 53에 생성된 레코드를 통해 블루/그린 배포 환경의 읽기 전용 엔드포인트에 접속이 되는지 확인해 봅니다. 생성한 레코드를 통하여 여러 차례 접속하면서 서버 ID를 확인해 보면 다른 장비에 정상적으로 접속했는지 확인할 수 있습니다.
[root@ip-172-12-34-56 ec2-user]# mysql -udb_admin -p -hread-distribute.route53-aurora-test.com
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 121495
Server version: 5.7.12-log MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select @@server_uuid;
+--------------------------------------+
| @@server_uuid |
+--------------------------------------+
| 795ef7cc-dca9-355a-8bfd-bd6286f08b88 |
+--------------------------------------+
1 row in set (0.00 sec)
[root@ip-172-12-34-56 ec2-user]# mysql -udb_admin -p -hread-distribute.route53-aurora-test.com
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 5.7.12-log MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select @@server_uuid;
+--------------------------------------+
| @@server_uuid |
+--------------------------------------+
| aff7564a-92b6-300f-a60a-a545c4697954 |
+--------------------------------------+
1 row in set (0.00 sec)
mysql>
단계 3 : 접속 분산 확인
지속적으로 커넥션을 만들어 보면서 가중치 기반으로 두 개의 엔드포인트를 통해 접속하는지 확인해 봅니다. 각종 스크립트를 통해 커넥션을 만든 후 CloudWatch를 통하여 커넥션 개수를 확인해 볼 수 있습니다.
단계 4 : 에러 확인
커넥션 분산으로 추가된 인스턴스로의 연결에서는 버전 및 기타 작업의 영향으로 인한 쿼리 오류가 발생할 수 있습니다. 이 오류는 백오프 혹은 지터의 활용을 통해 다른 커넥션에서 다시 수행할 수 있도록 할 수 있습니다. 오류가 많이 발생하는 경우 반드시 분산 환경을 조절하여 오류를 최소화할 수 있도록 하는 것이 중요합니다. 또한 오류가 발생한 쿼리는 이 구성을 통하여 운영 중인 Amazon RDS에서 블루/그린 배포 환경을 통한 전환 작업 후 발생할 수 있는 문제를 미리 확인할 수 있게 됩니다. 따라서 오류가 발생한 쿼리는 반드시 수정 후 전환 작업 시에 문제 상황을 줄일 수 있습니다. 또한 가중치 변경을 통해 서비스 트래픽을 직접 신규 서비스로 전부 전환하고 다시 원상 복구할 수 있는 환경도 구성할 수 있습니다.
단계 5 : 엔드 포인트 롤백
오류 확인 작업이 완료되면 분산하여 작업 중이던 엔드포인트는 다시 원래 클러스터 엔드포인트로 변경해야 합니다. 블루/그린 전환 작업에는 그린 환경 인스턴스들의 엔드포인트와 인스턴스 이름들을 블루 환경의 인스턴스와 엔드포인트로 변경하는 작업이 동반됩니다. 이때 Route 53에서 분산했던 환경은 사라지기 때문에 이로 인한 오류가 발생할 수 있습니다. 엔드포인트를 다시 롤백하는 방법은 그린 환경으로 만들어 둔 레코드를 삭제하면 됩니다.
결론
이번 방법으로 Amazon RDS에서 Amazon Route 53을 활용하여 블루/그린 환경에서 프로덕션의 트래픽을 활용하여 최소한의 장애로 테스트할 수 있는 방법을 확인하였습니다. 이를 통하여 최소한의 쿼리 오류를 통하여 전환 작업 후 발생할 수 있는 대규모 문제 상황을 미리 확인할 수 있습니다. 우리는 서비스를 안정적으로 운영을 하는 것이 매우 중요합니다. 이번 블로그를 통해 소규모 쿼리 에러를 통한 신규 환경에서의 문제 상황을 확인할 수 있었습니다.