다른 AWS 계정에서 Amazon RDS MySQL 교차 리전 복제본을 생성하려면 어떻게 해야 합니까?

5분 분량
0

소스 DB 인스턴스와 다른 AWS 리전 및 계정에 Amazon Relational Database Service(Amazon RDS) for MySQL 복제본을 만들고 싶습니다. 어떻게 해야 하나요?

간략한 설명

다른 AWS 리전에 Amazon RDS for MySQL 복제본을 생성하고 다음과 같은 사용 사례에 대해 원본 DB 인스턴스에서 계정을 만들 수 있습니다.

  • 재해 복구 개선
  • 글로벌로 확장
  • AWS 리전 및 계정 간 마이그레이션

참고: Amazon RDS 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 다른 AWS 계정에 교차 리전 복제본을 직접 생성할 수 있는 방법은 없습니다. 이 문서에서 설명하는 단계는 서로 다른 AWS 계정 또는 리전에 있는 두 RDS for MySQL 인스턴스 간에 외부 binlog 기반 복제를 설정합니다.

해결 방법

다른 AWS 계정에서 Amazon RDS for MySQL 교차 리전 복제본을 생성하려면 다음 단계를 따릅니다.

참고: 계정 A에는 소스 리전의 기본 RDS for MySQL 인스턴스가 포함되어 있습니다. 계정 B에는 대상 리전의 복제본 RDS for MySQL이 포함되어 있습니다.

1.    계정 A(기본 Amazon RDS for MySQL 인스턴스)에서 바이너리 로깅이 활성화되어 있는지 확인합니다. 기본적으로 RDS for MySQL에서는 자동 백업 및 바이너리 로깅을 사용할 수 있습니다. 자동 백업이 활성화될 때마다 바이너리 로깅이 활성화됩니다.

참고: 백업 보존 기간을 ‘0’에서 0이 아닌 값으로 변경하거나 그 반대로 변경하면 작업이 중단됩니다.

2.    다음 명령을 사용하여 binlog 보존 기간을 업데이트합니다.

mysql>  CALL mysql.rds_set_configuration(name,value);

팁: 삭제하기 전에 변경 사항을 적용할 수 있을 만큼 복제 원본에 바이너리 로그 파일을 보관하는 기간을 선택합니다. Amazon RDS는 MySQL 인스턴스에 바이너리 로그 파일을 최대 168시간(7일) 동안 보관합니다. 자세한 내용은 mysql.rds_set_configuration을 참조하세요.

예를 들어 다음 구문은 binlog 보존 기간을 24시간으로 설정합니다.

mysql> call mysql.rds_set_configuration('binlog retention hours', 24);

3.    계정 A의 기본 인스턴스에 복제 사용자를 생성한 다음 필요한 권한을 부여합니다.

mysql> CREATE USER 'repl_user'@'<domain_name>' IDENTIFIED BY '<password>';

4.    3단계에서 생성한 사용자에 (필수) REPLICATION CLIENTREPLICATION SLAVE 권한을 부여합니다.

mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO  'repl_user'@'<domain_name>';

5.    선택한 대상리전을 사용하여 기본 계정(계정 A)에 교차 리전 읽기 전용 복제본을 생성합니다.

6.    계정 A에서 생성된 복제본 인스턴스에 로그인합니다. 그런 다음 복제본이 기본 DB 인스턴스와 연결되었는지 확인합니다.

mysql> SHOW SLAVE STATUS\G

참고: Seconds_Behind_Master 값이 ‘0’인지 확인합니다. 값이 ‘0’이면 복제본은 기본 DB 인스턴스에 포착됩니다. 자세한 내용은 읽기 전용 복제본 모니터링을 참조하세요.

7.    읽기 전용 복제본이 기본 DB 인스턴스에 연결되면 5단계에서 생성한 복제본 인스턴스에서 복제를 중지합니다. 복제를 중지하려면 다음 구문을 사용합니다.

mysql> call mysql.rds_stop_replication();

8.    복제본에서 SHOW SLAVE STATUS 명령을 실행한 다음 Relay_Master_Log_File 및 Exec_Master_Log_Pos에 대한 출력 값을 기록합니다. Relay_Master_Log_File 및 Exec_Master_Log_Pos 값은 바이너리 로그 좌표로, 이후 단계에서 외부 복제를 설정하는 데 사용됩니다.

9.    계정 A에서 복제본 인스턴스의 DB 스냅샷을 생성합니다.

(선택 사항) 또는 논리적 백업(예: mysqldump)을 생성하는 기본 도구를 사용하여 계정 A의 복제본 인스턴스에서 데이터를 내보낼 수 있습니다. 그런 다음 기본 도구를 사용하여 동일한 버전의 새로 생성된 RDS for MySQL 인스턴스로 데이터를 가져올 수 있습니다. 계정 B에서 이 방법을 사용하면 두 계정 간에 스냅샷 또는 AWS KMS 키를 복사하고 공유할 필요가 없습니다. 이 방법을 사용하기로 결정한 경우 12단계로 건너뛰고 두 인스턴스 간에 네트워크 액세스 및 복제를 설정합니다. 이 접근 방식을 취하기 전에 계정 B의 Amazon RDS for MySQL 인스턴스로 데이터를 가져와야 합니다.

10.    DB 스냅샷을 계정 B와 공유합니다.

참고: DB 스냅샷이 암호화된 경우 스냅샷을 암호화하는 데 사용된 AWS KMS 키를 대상 계정과 공유해야 합니다. 자세한 내용은 암호화된 스냅샷 공유를 참조하세요.

11.    계정 B에서 DB 스냅샷을 복원합니다.

참고: 암호화된 공유 스냅샷에서는 DB 인스턴스를 복원할 수 없습니다. 그 대신, DB 스냅샷을 복사하고 복사된 버전에서 DB 인스턴스를 복원합니다.

12.    계정 A(소스 계정)와 계정 B(대상 계정) 간의 네트워크 액세스를 설정합니다. 네트워크 액세스를 통해 원본 계정과 대상 계정 간에 트래픽이 이동할 수 있습니다.

13.    계정 A의 기본 DB 인스턴스에 대한 인바운드 보안 그룹 규칙을 구성합니다. 이 구성을 사용하면 계정 B(대상 계정)에 새로 생성된 RDS for MySQL 인스턴스에서 퍼블릭 인터넷을 통해 트래픽이 이동할 수 있습니다. 보안 그룹은 Amazon RDS for MySQL 인스턴스를 보호합니다.

프라이빗 복제 트래픽의 경우 두 AWS 계정 간에 VPC 피어링 연결을 생성하고 수락해야 합니다.

14.    계정 B의 대상 인스턴스에 외부 복제를 설정합니다. 명령 내의 repl_user를 파라미터로 사용합니다. 참고: mysql.rds_set_external_master 호출 명령은 명령 실행 권한이 있는 DB 사용자가 실행해야 합니다.

mysql> CALL mysql.rds_set_external_master (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  );

예를 들면 다음과 같습니다.

mysql> CALL mysql.rds_set_external_master (mytestinnstance.us-east-1.rds.amazonaws.com', 3306, 'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);

mytestinnstance.us-east-1.rds.amazonaws.com: 기본 인스턴스 엔드포인트 3306: 기본 인스턴스 포트 repl_user: 3단계에서 생성된 복제 사용자 이름 비밀번호: 3단계에서 생성된 사용자 비밀번호 mysql-bin-changelog.000031: 8단계 출력에서 가져온 바이너리 로그 파일 이름 107: 8단계의 출력에서 바이너리 로그 위치

15.    계정 B의 복원된 인스턴스에서 복제를 시작합니다.

CALL mysql.rds_start_replication;

다음은 예시 출력입니다.

+-------------------------+
| Message                 |
+-------------------------+
| Slave running normally. |
+-------------------------+

16.    계정 B 인스턴스에서 다음 명령을 실행하여 복제 상태를 확인합니다.

mysql> show replica status \G

참고: MySQL 버전 8.0.22 이상에서는 슬레이브 상태 표시가 더 이상 사용되지 않으며 복제본 상태 표시를 대신 사용할 수 있습니다. 자세한 내용은 MySQL 웹 사이트에서 복제 상태 확인을 참조하세요.

17.    5단계에서 생성한 복제본(중간 인스턴스 역할을 함)을 삭제합니다. 이 복제본은 계정 A의 기본 인스턴스에 대한 쓰기를 일시 중단하지 않고 바이너리 로그 좌표를 추출하는 데 사용되었습니다.

교차 리전 복제 고려 사항

교차 리전 복제에 대해 다음과 같은 접근 방식을 고려합니다.

  • 원본 DB 인스턴스는 여러 AWS 리전에 교차 리전 읽기 전용 복제본을 보유할 수 있습니다. 자세한 내용은 다른 AWS 리전에서 읽기 전용 복제본 생성을 참조하세요.
  • 원본 인스턴스와 다른 AWS 리전에 있는 읽기 전용 복제본의 지연 시간이 더 길 것으로 예상할 수 있습니다. 이러한 지연 시간은 리전 데이터 센터 간의 네트워크 채널이 길어질 때 발생합니다. 복제 지연 시간에 대한 자세한 내용은 읽기 전용 복제본 모니터링을 참조하세요.
  • 교차 리전 복제를 위해 데이터를 전송하면 Amazon RDS 데이터 전송 요금이 발생합니다. 이러한 데이터 전송 요금에 대한 자세한 내용은 교차 리전 복제 비용을 참조하세요.

관련 정보

Amazon RDS for MySQL용 교차 리전 읽기 전용 복제본