Amazon RDS for MySQL용 다중 소스 복제 구성 - Amazon Relational Database Service

Amazon RDS for MySQL용 다중 소스 복제 구성

다중 소스 복제를 사용하면 Amazon RDS for MySQL DB 인스턴스를 둘 이상의 RDS for MySQL 소스 DB 인스턴스로부터 바이너리 로그 이벤트를 수신하는 복제본으로 설정할 수 있습니다. 다중 소스 복제는 다음 엔진 버전을 실행하는 RDS for MySQL DB 인스턴스에 지원됩니다.

  • 8.0.35 이상 마이너 버전

  • 5.7.44 이상 마이너 버전

MySQL 다중 소스 복제에 대한 자세한 내용은 MySQL 설명서의 MySQL 다중 소스 복제를 참조하세요. MySQL 설명서에는 이 기능에 대한 자세한 정보가 포함되어 있으며, 이 항목에서는 RDS for MySQL DB 인스턴스에서 다중 소스 복제 채널을 구성하고 관리하는 방법을 설명합니다.

다중 소스 복제 사용 사례

RDS for MySQL에서 다중 소스 복제를 사용하기에 적합한 경우는 다음과 같습니다.

  • 개별 DB 인스턴스에 있는 여러 샤드를 단일 샤드로 병합하거나 결합해야 하는 애플리케이션

  • 여러 소스에서 통합된 데이터로 보고서를 생성해야 하는 애플리케이션

  • 여러 RDS for MySQL용 DB 인스턴스에 분산된 데이터의 통합 장기 백업을 생성하기 위한 요구 사항

다중 소스 복제를 위한 사전 요구 사항

다중 소스 복제를 구성하려면 먼저 다음 사전 조건을 완료하세요.

  • 각 소스 RDS for MySQL DB 인스턴스에 자동 백업이 활성화되어 있는지 확인하세요. 자동 백업을 활성화하면 바이너리 로깅이 활성화됩니다. 자동 백업을 활성화하는 방법에 대한 자세한 내용은 자동 백업 활성화 섹션을 참조하세요.

  • 복제 오류를 방지하려면 소스 DB 인스턴스에 대한 쓰기 작업을 차단하는 것이 좋습니다. RDS for MySQL용 소스 DB 인스턴스에 연결된 사용자 지정 파라미터 그룹에서 read-only 파라미터를 ON으로 설정하면 됩니다. AWS Management Console 또는 AWS CLI로 사용자 지정 파라미터 그룹을 새로 생성하거나 기존 그룹을 수정할 수 있습니다. 자세한 내용은 Amazon RDS에서 DB 파라미터 그룹 생성Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정 단원을 참조하세요.

  • 다중 소스 DB 인스턴스에 대한 Virtual Private Cloud(VPC) 보안 그룹에 각 소스 DB 인스턴스에 인스턴스의 IP 주소를 추가합니다. dig RDS Endpoint 명령을 실행하여 소스 DB 인스턴스의 IP 주소를 식별할 수 있습니다. 대상 다중 소스 DB 인스턴스의 VPC와 동일한 VPC의 Amazon EC2에서 명령을 실행합니다.

  • 다음 예제와 같이 각 소스 DB 인스턴스에 대해 클라이언트를 사용하여 DB 인스턴스에 연결하고 복제에 필요한 권한을 가진 데이터베이스 사용자를 생성합니다.

    CREATE USER 'repl_user' IDENTIFIED BY 'password'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user';

MySQL용 RDS의 다중 소스 복제 채널 구성

다중 소스 복제 채널을 구성하는 것은 단일 소스 복제 구성과 비슷합니다. 다중 소스 복제의 경우 먼저 소스 인스턴스에 대한 이진 로깅을 설정합니다. 그런 다음 소스에서 다중 소스 복제본으로 데이터를 가져옵니다. 그런 다음 이진 로그 좌표를 사용하거나 GTID 자동 위치 지정을 사용하여 각 소스에서 복제를 시작합니다.

RDS for MySQL DB 인스턴스의 다중 소스 복제본인 RDS for MySQL DB 인스턴스의 다중 소스 복제본으로 구성하려면 다음 단계를 수행합니다.

1단계: 소스 DB 인스턴스에서 다중 소스 복제본으로 데이터 가져오기

각 소스 DB 인스턴스에서 다음 단계를 수행합니다.

소스에서 다중 소스 복제본으로 데이터를 가져오기 전에 SHOW MASTER STATUS 명령을 실행하여 현재 바이너리 로그 파일과 위치를 확인하세요. 다음 단계에서 사용할 수 있도록 이러한 세부 정보를 적어 둡니다. 이 예제 출력에서 파일은 mysql-bin-changelog.000031이고 위치는 107입니다.

File Position ----------------------------------- mysql-bin-changelog.000031 107 -----------------------------------

이제 다음 예제와 같이 mysqldump를 사용하여 소스 DB 인스턴스에서 다중 소스 복제본으로 데이터베이스를 복사합니다.

mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u RDS_user_name \ -p RDS_password \ --host=RDS Endpoint | mysql \ --host=RDS Endpoint \ --port=3306 \ -u RDS_user_name \ -p RDS_password

데이터베이스를 복사한 후 소스 DB 인스턴스에서 읽기 전용 파라미터를 OFF로 설정할 수 있습니다.

2단계: 소스 DB 인스턴스에서 다중 소스 복제본으로의 복제 시작하기

각 소스 DB 인스턴스에 대해 마스터 사용자 보안 인증을 사용하여 인스턴스에 연결하고 다음 두 개의 저장 프로시저를 실행합니다. 이러한 저장 프로시저는 채널에서 복제를 구성하고 복제를 시작합니다. 이 예에서는 이전 단계의 예제 출력에 있는 binlog 파일 이름과 위치를 사용합니다.

CALL mysql.rds_set_external_source_for_channel('mysourcehost.example.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0, 'channel_1'); CALL mysql.rds_start_replication_for_channel('channel_1');

이러한 저장 프로시저 및 기타를 사용하여 복제 채널을 설정하고 관리하는 방법에 대한 자세한 내용은 다중 소스 복제 관리 섹션을 참조하세요.

다중 소스 복제와 함께 필터 사용

복제 필터를 사용하여 다중 소스 복제본과 함께 복제할 데이터베이스와 테이블을 지정할 수 있습니다. 복제 필터는 데이터베이스와 테이블을 복제에 포함하거나 복제에서 제외할 수 있습니다. 복제 필터에 대한 자세한 정보는 MySQL을 사용한 복제 필터 구성 섹션을 참조하세요.

다중 소스 복제를 사용하면 전체적으로 또는 채널 수준에서 복제 필터를 구성할 수 있습니다. 채널 수준 필터링은 버전 8.0을 실행하는 지원되는 DB 인스턴스에서만 사용할 수 있습니다. 다음 예제에서는 필터를 전역 또는 채널 수준에서 구성하는 방법을 보여줍니다.

다중 소스 복제의 필터링과 관련된 다음 요구 사항 및 동작을 참고하세요.

  • 채널 이름 주위에는 역따옴표(``)가 필요합니다.

  • 파라미터 그룹에서 복제 필터를 변경하면 업데이트가 적용된 모든 채널에 다중 소스 복제본의 sql_thread가 다시 시작되어 변경 내용이 동적으로 적용됩니다. 업데이트에 글로벌 필터가 포함된 경우 실행 상태의 모든 복제 채널이 다시 시작됩니다.

  • 모든 글로벌 필터는 채널별 필터보다 먼저 적용됩니다.

  • 필터가 전체적으로 채널 수준에서 적용되는 경우 채널 수준 필터만 적용됩니다. 예를 들어, 필터가 replicate_ignore_db="db1,`channel_22`:db2"이면 db1에 설정된 replicate_ignore_dbchannel_22를 제외한 모든 채널에 적용되고, channel_22db2의 변경 내용을 무시합니다.

예 1: 글로벌 필터 설정

다음 예시에서 temp_data 데이터베이스는 모든 채널의 복제에서 제외됩니다.

대상 LinuxmacOS, 또는Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-ignore-db,ParameterValue='temp_data',ApplyMethod=immediate"

예 2: 채널 수준 필터 설정

다음 예제에서는 sample22 데이터베이스의 변경 내용이 channel_22 채널에만 포함됩니다. 마찬가지로 sample99 데이터베이스의 변경 사항은 channel_99 채널에만 포함됩니다.

대상 LinuxmacOS, 또는Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-do-db,ParameterValue='\`channel_22\`:sample22,\`channel_99\`:sample99',ApplyMethod=immediate"

다중 소스 복제 채널 모니터링

다음 방법을 사용하여 다중 소스 복제본의 개별 채널을 모니터링할 수 있습니다.

  • 모든 채널 또는 특정 채널의 상태를 모니터링하려면 다중 소스 복제본에 연결하고 SHOW REPLICA STATUS 또는 SHOW REPLICA STATUS FOR CHANNEL 'channel_name' 명령을 실행합니다. 이러한 필드에 대한 자세한 내용은 MySQL 설명서의 복제 상태 확인을 참조하세요.

  • 복제 채널이 시작, 중지 또는 제거될 때 알림을 받으려면 RDS 이벤트 알림을 사용합니다. 자세한 내용은 Amazon RDS 이벤트 알림 작업 단원을 참조하십시오.

  • 특정 채널의 지연을 모니터링하려면 해당 채널의 ReplicationChannelLag 지표를 확인하세요. 이 지표에 대해 기간이 60초(1분)로 설정된 데이터 요소들은 15일 동안 사용할 수 있습니다. 채널의 복제 채널 지연을 찾으려면 인스턴스 식별자와 복제 채널 이름을 사용하세요. 이 지연이 특정 임곗값을 초과할 때 알림을 받으려면 CloudWatch 경보를 설정할 수 있습니다. 자세한 내용은 Amazon CloudWatch로 Amazon RDS 지표 모니터링 단원을 참조하십시오.

다중 소스 복제의 고려 사항

RDS for MySQL에서 다중 소스 복제를 사용하기 전에 다음 고려 사항과 모범 사례를 검토하세요.

  • 다중 소스 복제본으로 구성된 DB 인스턴스에 처리량, 메모리, CPU, IOPS와 같은 리소스가 충분한지 확인하여 여러 원본 인스턴스의 워크로드를 처리할 수 있는지 확인하세요.

  • 다중 소스 복제본의 리소스 사용률을 정기적으로 모니터링하고 리소스에 부담을 주지 않고 워크로드를 처리할 수 있도록 스토리지 또는 인스턴스 구성을 조정하세요.

  • 시스템 변수 replica_parallel_workers0보다 큰 값으로 설정하여 다중 소스 복제본에서 다중 스레드 복제를 구성할 수 있습니다. 이 경우 각 채널에 할당된 스레드 수는 이 변수의 값에 해당 스레드를 관리하는 코디네이터 스레드 1개를 더한 값입니다.

  • 복제 필터를 적절하게 구성하여 충돌을 방지하세요. 전체 데이터베이스를 복제본의 다른 데이터베이스에 복제하기 위해 --replicate-rewrite-db 옵션을 사용할 수 있습니다. 예를 들어 데이터베이스 A의 모든 테이블을 복제 인스턴스의 데이터베이스 B에 복제할 수 있습니다. 이 접근 방식은 모든 원본 인스턴스가 동일한 스키마 명명 규칙을 사용할 때 유용할 수 있습니다. --replicate-rewrite-db 옵션에 대한 자세한 내용은 MySQL 설명서의 복제본 서버 옵션 및 변수를 참조하세요.

  • 복제 오류를 방지하려면 복제본에 쓰지 마세요. 쓰기 작업을 차단하려면 다중 소스 복제본에서 read_only 파라미터를 활성화하는 것이 좋습니다. 이렇게 하면 쓰기 작업 충돌로 인한 복제 문제를 해결하는 데 도움이 됩니다.

  • 다중 소스 복제본에서 실행되는 정렬 및 고부하 조인과 같은 읽기 작업의 성능을 높이려면 RDS 최적화된 읽기를 사용하는 것이 좋습니다. 이 기능은 대규모 임시 테이블이나 정렬 파일에 의존하는 쿼리에 유용할 수 있습니다. 자세한 내용은 Amazon RDS Optimized Reads로 RDS for MySQL 쿼리 성능 개선 단원을 참조하십시오.

  • 복제 지연을 최소화하고 다중 소스 복제본의 성능을 개선하려면 쓰기 최적화를 활성화하는 것이 좋습니다. 자세한 내용은 RDS Optimized Writes for MySQL을 통한 쓰기 성능 개선 단원을 참조하십시오.

  • 한 번에 한 채널에서 관리 작업(예: 구성 변경)을 수행하고 여러 연결에서 여러 채널을 변경하지 마세요. 이러한 경우 복제 작업에서 충돌이 발생할 수 있습니다. 예를 들어 여러 연결에서 rds_skip_repl_error_for_channelrds_start_replication_for_channel 프로시저를 동시에 실행하면 의도한 것과 다른 채널의 이벤트를 건너뛸 수 있습니다.

  • 다중 소스 복제 인스턴스에서 백업을 활성화하고 해당 인스턴스의 데이터를 Amazon S3 버킷으로 내보내 장기간 사용할 수 있도록 저장할 수 있습니다. 하지만 개별 소스 인스턴스에 적절한 보존 기간을 두고 백업을 구성하는 것도 중요합니다. Amazon S3로 DB 스냅샷 데이터 내보내기에 대한 자세한 내용은 Amazon S3 for Amazon RDS로 DB 스냅샷 데이터 내보내기 섹션을 참조하세요.

  • 다중 소스 복제본에 읽기 워크로드를 분산하려면 다중 소스 복제본에서 읽기 전용 복제본을 생성할 수 있습니다. 애플리케이션의 요구 사항에 따라 다른 AWS 리전에서 이러한 읽기 전용 복제본을 찾을 수 있습니다. 읽기 전용 복제본에 대한 자세한 내용은 MySQL 읽기 전용 복제본 작업을 참조하세요.

RDS for MySQL용 다중 소스 복제 제한

RDS for MySQL용 다중 소스에 다음과 같은 제한 사항이 적용됩니다.

  • 현재 RDS for MySQL은 다중 소스 복제본에 대해 최대 15개의 채널 구성을 지원합니다.

  • 읽기 복제본 인스턴스는 다중 소스 복제본으로 구성할 수 없습니다.

  • 엔진 버전 5.7을 실행하는 RDS for MySQL에서 다중 소스 복제를 구성하려면 복제본 인스턴스에서 성능 스키마를 활성화해야 합니다. RDS for MySQL 엔진 버전 8.0에서 성능 스키마를 활성화 하는 것은 선택 사항입니다.

  • 엔진 버전 5.7을 실행하는 RDS for MySQL의 경우 복제 필터가 모든 복제 채널에 적용됩니다. 엔진 버전 8.0을 실행하는 RDS for MySQL의 경우 모든 복제 채널 또는 개별 채널에 적용되는 필터를 구성할 수 있습니다.

  • RDS 스냅샷을 복원하거나 시점 복구(PITR)를 수행해도 다중 소스 복제본 채널 구성은 복원되지 않습니다.

  • 다중 소스 복제본의 읽기 전용 복제본을 생성하면 다중 소스 인스턴스의 데이터만 복제됩니다. 채널 구성은 복원되지 않습니다.

  • MySQL은 각 채널에 대해 다른 수의 병렬 워커를 설정하는 것을 지원하지 않습니다. 모든 채널은 replica_parallel_workers 값에 따라 동일한 수의 병렬 워커를 받습니다.

다중 소스 복제 대상이 다중 AZ DB 클러스터인 경우 다음과 같은 추가 제한 사항이 적용됩니다.

  • 소스 RDS for MySQL 인스턴스용 채널을 구성해야 해당 인스턴스에 쓰기 작업을 수행할 수 있습니다.

  • RDS for MySQL 인스턴스의 경우 GTID 기반 복제가 활성화되어야 합니다.

  • DB 클러스터의 장애 조치 이벤트가 발생하면 다중 소스 복제 구성이 제거됩니다. 해당 구성을 복원하려면 구성 단계를 반복해야 합니다.