메뉴
Amazon Relational Database Service
사용 설명서 (API Version 2014-10-31)

PostgreSQL, MySQL 및 MariaDB 읽기 전용 복제본 작업

Amazon RDS는 MySQL, MariaDB 및 PostgreSQL(버전 9.3.5 이상) DB 엔진의 기본 복제 기능을 사용하여 원본 DB 인스턴스에서 읽기 전용 복제본이라고 하는 특수한 유형의 DB 인스턴스를 생성할 수 있습니다. 원본 DB 인스턴스에 적용된 변경 사항은 읽기 전용 복제본에도 동시에 적용됩니다. 애플리케이션에서 읽기 전용 복제본으로 읽기 쿼리를 라우팅하여 원본 DB 인스턴스의 로드에 대한 부하를 줄일 수 있습니다. 읽기 전용 복제본을 이용하면 읽기 중심의 데이터베이스 워크로드를 처리하기 위해 단일 DB 인스턴스의 용량 제한을 탄력적으로 늘릴 수 있습니다.

참고

다음 정보는 원본 DB 인스턴스와 동일한 리전이나 별도의 리전에 Amazon RDS 읽기 전용 복제본을 생성할 때도 똑같이 적용됩니다. 하지만 Amazon EC2 인스턴스에서 실행되거나 온프레미스인 인스턴스로 복제를 설정할 때는 적용되지 않습니다.

읽기 전용 복제본을 생성할 때는 먼저 기존 DB 인스턴스를 원본으로 지정합니다. 그러면 Amazon RDS가 원본 인스턴스의 스냅샷을 캡처한 후 이 스냅샷을 이용해 읽기 전용 인스턴스를 생성합니다. 이후부터는 원본 DB 인스턴스를 변경할 때마다 Amazon RDS가 DB 엔진에 비동기식 복제 방법을 사용하여 읽기 전용 복제본을 업데이트합니다. 읽기 전용 복제본은 읽기 전용 연결만을 허용하는 DB 인스턴스로 작동합니다. 애플리케이션은 DB 인스턴스에 연결되는 방식과 동일하게 읽기 전용 복제본에 연결됩니다. Amazon RDS는 원본 DB 인스턴스의 데이터베이스를 모두 복제합니다.

읽기 전용 복제본이 DB 인스턴스와 다른 AWS 리전에 있는 경우, Amazon RDS는 원본 DB 인스턴스와 읽기 전용 복제본 간에 보안 통신 채널을 설정합니다. Amazon RDS는 보안 그룹 항목 추가 등 보안 채널 활성화에 필요한 일체의 AWS 보안 구성을 설정합니다. 반면 PostgreSQL DB 인스턴스는 원본과 복제 인스턴스 모두 ssl 파라미터를 1로 설정하여 암호화가 가능하도록 함으로써 안전하게 연결합니다.

Amazon RDS 읽기 전용 복제본 개요

임의의 원본 DB 인스턴스에 하나 이상의 읽기 전용 복제본을 배포하는 경우는 다음을 비롯해 다양한 시나리오에서 적용될 수 있습니다.

  • 읽기 중심의 데이터베이스 워크로드를 위해 단일 DB 인스턴스의 컴퓨팅 파워 또는 I/O 용량을 확장합니다. 이 과도한 읽기 트래픽을 하나 이상의 읽기 복제본으로 이동할 수 있습니다.

  • 원본 DB 인스턴스를 사용할 수 없는 동안 읽기 트래픽을 처리합니다. 원본 DB 인스턴스가 I/O 요청을 처리하지 못할 경우(예: 백업 또는 예약된 유지 관리를 위한 I/O 중단), 읽기 트래픽을 읽기 전용 복제본으로 이동할 수 있습니다. 이 사용 사례의 경우 원본 DB 인스턴스를 사용할 수 없으므로 읽기 전용 복제본의 데이터가 “무효”일 수 있다는 점에 유의하십시오.

  • 비즈니스 보고 또는 데이터 웨어하우징에서는 기본 복제본, 프로덕션 DB 인스턴스가 아닌 읽기 전용 복제본에 대한 비즈니스 보고 쿼리를 실행할 수 있습니다.

기본적으로 읽기 전용 복제본은 원본 DB 인스턴스와 동일한 스토리지 유형과 함께 생성됩니다. 하지만 다음 표의 옵션에 따라 원본 DB 인스턴스와 다른 스토리지 유형을 할당하여 읽기 전용 복제본을 생성할 수도 있습니다.

원본 DB 인스턴스 스토리지 유형 원본 DB 인스턴스 스토리지 할당 읽기 전용 복제본 스토리지 유형 옵션
PIOPS 100GB~3TB PIOPS | GP2 | 표준
GP2 100GB~3TB PIOPS | GP2 | 표준
GP2 100GB 미만 GP2 | 표준
표준 100GB~3TB PIOPS | GP2 | 표준
표준 100GB 미만 GP2 | 표준

Amazon RDS는 순환 복제를 지원하지 않습니다. 따라서 DB 인스턴스를 기존 DB 인스턴스에 대한 복제 원본으로 구성할 수는 없으며, 기존 DB 인스턴스에서 새로운 읽기 전용 복제본만 생성할 수 있습니다. 예를 들어 MyDBInstance가 ReadReplica1로 복제된 경우 ReadReplica1을 다시 MyDBInstance로 복제하도록 구성하지 못합니다. ReadReplica1에서는 ReadReplica2 같이 새로운 읽기 전용 복제본만 생성할 수 있습니다.

MySQL, MariaDB, 및 PostgreSQL 읽기 전용 복제본의 경우 Amazon RDS ReplicaLag 측정치를 보면서 Amazon CloudWatch의 복제 지연을 모니터링할 수 있습니다. MySQL과 MariaDB에서는 ReplicaLag 측정치가 SHOW SLAVE STATUS 명령의 Seconds_Behind_Master 필드 값을 보고합니다. 그리고, PostgreSQL에서는 ReplicaLag 측정치가 SELECT extract(epoch from now() - pg_last_xact_replay_timestamp()) AS slave_lag의 값을 보고합니다.

이렇게 MySQL 및 MariaDB에서 복제 지연이 발생하는 공통 원인은 다음과 같습니다.

  • 네트워크 중단.

  • 읽기 전용 복제본 관련 인덱스를 할당하여 테이블에 쓰기 작업 중일 때. 읽기 전용 복제본에서 read_only 파라미터가 0으로 설정되어 있지 않으면 복제가 중단될 수 있습니다.

  • MyISAM 같은 비트랜잭션 스토리지 엔진을 사용할 때. 복제는 MySQL용 InnoDB 스토리지 엔진 및 MariaDB용 XtraDB 스토리지 엔진에 대해서만 지원됩니다.

ReplicaLag 측정치가 0에 도달하면 복제본이 원본 DB 인스턴스를 따라잡은 것입니다. ReplicaLag 측정치가 -1을 반환하는 경우 현재 복제가 활성화 상태가 아닙니다. ReplicaLag = -1은 Seconds_Behind_Master = NULL과 동일합니다.

PostgreSQL 읽기 전용 복제본과 MySQL 또는 MariaDB 읽기 전용 복제본의 차이점

PostgreSQL DB 엔진과 MySQL 및 MariaDB DB 엔진은 복제 방식이 다르기 때문에 다음 표에 나온 몇 가지 큰 차이점을 반드시 알고 있어야 합니다.

기능/특성 PostgreSQL MySQL 및 MariaDB

어떤 복제 방식을 사용합니까?

물리적 복제 

논리적 복제

트랜잭션 로그는 어떻게 삭제합니까?

PostgreSQL에는 데이터를 읽기 전용 복제본으로 보낼 때 유지할 Write Ahead Log(WAL) 파일 수를 결정할 수 있는 파라미터인 wal_keep_segments가 있습니다. 이 파라미터 값에 따라 유지할 로그 수가 결정됩니다.

Amazon RDS는 적용되지 않았다고 해도 바이너리 로그를 삭제하지 않습니다.

복제본에 쓰기가 가능합니까?

아니요. PostgreSQL 읽기 전용 복제본은 물리적 복제이기 때문에 쓰기가 허용되지 않습니다.

예. MySQL 또는 MariaDB 읽기 전용 복제본은 쓰기가 가능하도록 활성화할 수 있습니다.

복제본에 대해서도 백업이 가능합니까?

예. PostgreSQL 읽기 전용 복제본의 스냅샷을 생성할 수는 있지만 자동 백업은 활성화할 수 없습니다.

예. MySQL 또는 MariaDB 읽기 전용 복제본은 자동 백업을 활성화할 수 있습니다.

병렬 복제 기능을 사용할 수 있습니까?

아니요.  PostgreSQL은 복제를 처리하는 단일 프로세스가 있습니다.

예. MySQL 버전 5.6 이상 및 지원되는 모든 MariaDB 버전은 병렬 복제 스레드가 가능합니다.

PostgreSQL 읽기 전용 복제본(버전 9.3.5 이상)

Amazon RDS PostgreSQL은 버전 9.3.5 이상부터 PostgreSQL의 기본 스트리밍 복제 기능을 사용하여 원본(Postgres 용어로 "마스터") DB 인스턴스의 읽기 전용 복제본을 생성합니다. 이 읽기 전용 복제본(PostgreSQL 용어로 "스탠바이") DB 인스턴스는 마스터 DB 인스턴스에서 비동기식으로 생성된 물리적 복제본입니다. 생성 방법은 이렇습니다. 먼저 Write Ahead Log(WAL) 데이터를 전송할 수 있도록 원본 DB 인스턴스와 읽기 전용 복제본 사이에 특별한 연결 채널이 만들어집니다. 그런 다음 PostgreSQL이 그때그때 데이터베이스 변경 사항을 비동기식으로 스트리밍합니다.

PostgreSQL은 "복제" 역할을 사용하여 스트리밍 복제를 실행합니다. 이 역할은 권한이 부여되기는 하지만 그렇다고 데이터까지 수정하지는 못합니다. PostgreSQL은 단일 프로세스를 통해 복제를 처리합니다.

PostgreSQL 읽기 전용 복제본을 생성할 때는 마스터 DB 인스턴스를 중단할 필요가 없습니다. Amazon RDS가 원본 DB 인스턴스와 읽기 전용 복제본에 필요한 파라미터와 권한을 설정하기 때문에 서비스 중단은 발생하지 않습니다. 원본 DB 인스턴스를 캡처한 스냅샷이 읽기 전용 복제본이 됩니다. 읽기 전용 복제본을 삭제하더라도 중단은 발생하지 않습니다.

원본 DB 인스턴스 하나에서 최대 5개까지 읽기 전용 복제본을 생성할 수 있습니다. 효과적인 복제를 위해서는 읽기 전용 복제본도 각각 원본 DB 인스턴스와 동일한 용량의 컴퓨팅 파워와 스토리지 리소스를 가져야 합니다. 원본 DB 인스턴스를 확장하면 읽기 전용 복제본도 확장해야 합니다.

Amazon RDS는 읽기 전용 복제본에서 파라미터가 호환되지 않아 읽기 전용 복제본을 시작하지 못할 경우에는 호환되지 않는 파라미터를 모두 무시합니다. 예를 들어 max_connections 파라미터 값이 읽기 전용 복제본보다 원본 DB 인스턴스에서 더욱 높을 경우, Amazon RDS가 원본 DB 인스턴스의 파라미터 값이 동일하도록 읽기 전용 복제본의 파라미터를 업데이트합니다.

PostgreSQL 읽기 전용 복제본과 관련하여 몇 가지 중요한 사실을 소개합니다.

  • PostgreSQL 읽기 전용 복제본은 읽기 전용이라서 쓰기가 안 됩니다.

  • 다른 읽기 전용 복제본에서 읽기 전용 복제본을 생성할 수 없습니다(즉, Cascading 방식의 읽기 전용 복제본은 생성할 수 없습니다).

  • PostgreSQL 읽기 전용 복제본은 새로운 원본 DB 인스턴스로 승격할 수 없습니다. 하지만 읽기 전용 복제본은 자동으로 새로운 원본 DB 인스턴스가 되지 않습니다. 읽기 전용 복제본을 승격하면 WAL 통신을 수신하지 못하고 더 이상 읽기 전용 인스턴스의 역할을 하지 못합니다. 승격된 읽기 전용 복제본은 새로운 원본 DB 인스턴스와 다름없기 때문에 예정되어 있는 모든 복제를 그대로 진행하도록 준비해야 합니다.

  • PostgreSQL 읽기 전용 복제본은 원본 DB 인스턴스에서 사용자 트랜잭션이 없는 경우 최대 5분까지 복제 지연을 보고합니다.

  • 임의의 DB 인스턴스를 원본 DB 인스턴스로 사용하려면 백업 보존 기간을 0이 아닌 다른 값으로 설정하여 원본 DB 인스턴스의 자동 백업을 활성화해야 합니다.

PostgreSQL 복제가 중단되는 상황

몇몇 상황에서는 PostgreSQL 원본 DB 인스턴스가 읽기 전용 복제본을 이용한 복제를 우발적으로 중단할 수 있습니다. 이러한 상황은 다음과 같습니다.

  • max_wal_senders 파라미터가 너무 낮게 설정되어 읽기 전용 복제본의 수에 충분한 데이터를 제공하지 못하는 경우 복제가 중단됩니다.

  • PostgreSQL 파라미터인 wal_keep_segments는 데이터를 읽기 전용 복제본으로 보낼 때 유지할 WAL 파일 수를 결정합니다. 이 파라미터 값에 따라 유지할 로그 수가 결정됩니다. 이 파라미터 값이 너무 낮으면 읽기 전용 복제본이 너무 멀리 뒤처지면서 스트리밍 복제가 중단될 수 있습니다. 이 경우에는 Amazon RDS가 복제 오류를 보고한 후 원본 DB 인스턴스에 보관된 WAL 로그를 재실행하여 읽기 전용 복제본의 복구를 시작합니다. 이 복구 프로세스는 읽기 전용 복제본이 스트리밍 복제를 이어갈 만큼 충분히 따라잡을 때까지 계속됩니다. 복구 프로세스 및 적합한 파라미터 설정 방법에 대한 자세한 내용은 PostgreSQL 읽기 전용 복제본의 문제 해결을(를) 참조하십시오.

  • PostgreSQL 읽기 전용 복제본은 원본 DB 인스턴스 엔드포인트가 변경되면 재부팅해야 합니다.

읽기 전용 복제본에 데이터를 전송하는 WAL 스트림이 중단되면 PostgreSQL이 복구 모드로 전환되면서 보관 중인 WAL 파일을 사용해 읽기 전용 복제본을 복구합니다. 복구 프로세스가 완료되면 PostgreSQL이 스트리밍 복제를 다시 구성합니다.

MySQL 및 MariaDB 읽기 전용 복제본

임의의 MySQL 또는 MariaDB DB 인스턴스를 복제 원본으로 사용하려면 백업 보존 기간을 0이 아닌 다른 값으로 설정하여 원본 DB 인스턴스의 자동 백업을 활성화해야 합니다. 이러한 요건은 다른 읽기 전용 복제본의 원본 DB 인스턴스인 읽기 전용 복제본에도 똑같이 적용됩니다. 자동 백업은 모든 버전의 MariaDB 또는 MySQL 5.6 이상의 읽기 전용 복제본에 한해 지원됩니다.

MySQL 및 MariaDB 인스턴스 모두에 대해 이진 로그 좌표를 기반으로 복제를 구성할 수 있습니다. MariaDB 인스턴스의 경우에는 전역 트랜잭션 ID(GTID)를 기반으로 복제를 구성할 수도 있습니다. 그러면 충돌 안정성이 개선됩니다. MariaDB DB 인스턴스에서 GTID를 사용하여 복제를 구성하는 방법에 대한 자세한 내용은 Amazon RDS MariaDB DB 인스턴스로의 GTID 기반 복제 구성을(를) 참조하십시오.

DB 인스턴스 하나에서 최대 5개까지 읽기 전용 복제본을 생성할 수 있습니다. 효과적인 복제를 위해서는 읽기 전용 복제본도 각각 원본 DB 인스턴스와 동일한 용량의 컴퓨팅 파워와 스토리지 리소스를 가져야 합니다. 원본 DB 인스턴스를 확장하면 읽기 전용 복제본도 확장해야 합니다.

읽기 전용 복제본이 모든 버전의 MariaDB 또는 MySQL 5.6 이상 기반인 경우에는 읽기 전용 복제본을 다른 읽기 전용 복제본의 원본 DB 인스턴스로 지정할 수 있습니다. 예를 들어 MyDBInstance에서 ReadReplica1을 생성한 후 다시 ReadReplica1에서 ReadReplica2를 생성할 수 있습니다. MyDBInstance의 업데이트는 ReadReplica1에도 복제되며, 다시 한 번 ReadReplica1에서 ReadReplica2로 복제됩니다. 하지만 복제 체인에 포함될 수 있는 인스턴스는 최대 4개로 제한됩니다. 예를 들어 MyDBInstance에서 ReadReplica1을 생성한 후 다시 ReadReplica1에서 ReadReplica2를 생성하고, ReadReplica2에서 ReadReplica3을 생성할 수 있지만 ReadReplica3에서 ReadReplica4를 생성할 수는 없습니다.

Amazon RDS MariaDB 또는 MySQL 5.6 이상 읽기 전용 복제본에서 자동 백업을 활성화하려면 먼저 읽기 전용 복제본을 생성한 다음 자동 백업이 활성화되도록 읽기 전용 복제본을 변경해야 합니다.

읽기 전용 복제본은 읽기 쿼리를 지원하도록 설계되었지만 때때로 업데이트가 필요할 수 있습니다. 예를 들어 특정 유형의 쿼리가 복제본에 액세스하는 속도를 높이기 위해 인덱스를 추가해야 할 경우가 있습니다. 업데이트를 활성화하려면 읽기 전용 복제본의 DB 파라미터 그룹에서 read_only 파라미터를 0으로 설정합니다.

읽기 전용 복제본이 원본 인스턴스의 한계치인 5개를 벗어나지 않는 경우에 한해 다수의 읽기 전용 복제본을 동시에 실행하거나, 동일한 원본 DB 인스턴스를 참조하는 작업은 생성 또는 삭제할 수도 있습니다.

읽기 전용 복제본은 단일 AZ 또는 다중 AZ DB 인스턴스 배포를 통해서도 생성할 수 있습니다. 다중 AZ 배포는 주요 시스템의 내구성과 가용성을 개선하는 데 효과적이지만 읽기 전용 쿼리를 실행하는 데 보조로 사용할 수는 없습니다. 따라서 원본 DB 인스턴스의 읽기 쿼리 부하를 줄일 목적으로 트래픽이 많은 다중 AZ DB 인스턴스에서 읽기 전용 복제본을 생성해야 합니다. 다중 AZ 배포의 원본 인스턴스가 보조 인스턴스로 장애 조치된 경우에는 연동되어 있는 모든 읽기 전용 복제본도 전환되어 보조 인스턴스를 복제 원본으로 사용합니다.

MySQL 및 MariaDB DB 인스턴스에서는 경우에 따라 읽기 전용 복제본을 보조 인스턴스로 전환하지 못할 수도 있습니다. 이는 일부 binlog 이벤트가 오류로 인해 플러시되지 않기 때문입니다. 이때는 수동으로 읽기 전용 복제본을 삭제한 후 다시 생성해야 합니다. MySQL 5.5에서는 sync_binlog=1innodb_support_xa=1 동적 변수를 설정하여 이러한 가능성을 줄일 수 있습니다. 단, 이 설정은 성능 감소의 원인이 될 수도 있으므로 변경 사항을 프로덕션 환경에 적용하기 전에 그 효과를 테스트하는 것이 좋습니다. MySQL 5.6 이상 또는 MariaDB를 사용하는 경우 이러한 문제가 발생할 가능성이 적습니다. MySQL 5.6 이상 또는 MariaDB를 실행하는 인스턴스에서는 파라미터가 기본적으로 sync_binlog=1innodb_support_xa=1로 설정되어 있기 때문입니다.

일반적으로 복제 구성은 Amazon RDS DB 인스턴스 사이에서 이루어지지만 Amazon RDS 외부에서 실행되는 MySQL 또는 MariaDB 인스턴스에서 데이터베이스를 가져오거나, 데이터베이스를 다른 인스턴스로 내보내도록 복제를 구성할 수도 있습니다. 자세한 내용은 가동 중지 시간을 단축하여 Amazon RDS MySQL MariaDB DB 인스턴스로 데이터 가져오기복제를 사용하여 MySQL 데이터 내보내기을(를) 참조하십시오.

Amazon RDS DB 인스턴스에서는 시스템에 저장된 프로시저인 mysql.rds_stop_replication과(와) mysql.rds_start_replication을 호출하여 복제 프로세스를 종료하거나 재시작할 수 있습니다. 대용량 인덱스를 생성하는 등 오랜 시간이 걸리는 작업에서 두 Amazon RDS 인스턴스를 서로 복제할 때도 이런 방법이 가능합니다. 또한 데이터베이스를 가져오거나 내보낼 때도 복제를 종료하거나 시작할 필요가 있습니다. 자세한 내용은 가동 중지 시간을 단축하여 Amazon RDS MySQL MariaDB DB 인스턴스로 데이터 가져오기복제를 사용하여 MySQL 데이터 내보내기을(를) 참조하십시오.

읽기 전용 복제본을 삭제할 때는 DB 인스턴스를 삭제할 때와 똑같은 메커니즘으로 명시적이어야 합니다. 원본 DB 인스턴스만 삭제하고 복제본을 삭제하지 않으면 각 복제본은 독립 실행형 단일 AZ DB 인스턴스로 승격됩니다.

MySQL 또는 MariaDB 읽기 전용 복제본을 다른 읽기 전용 복제본으로 복제할 수 있도록 승격한 경우 이 읽기 전용 복제본은 활성화 상태를 유지합니다. MyDBInstance1이 MyDBInstance2로, 그리고 MyDBInstance2가 다시 MyDBInstance3으로 복제된다고 예를 들어보겠습니다. 이때 MyDBInstance2를 승격하는 경우 MyDBInstance1에서 MyDBInstance2로는 더 이상 복제가 이루어지지 않습니다. 하지만 MyDBInstance2는 여전히 MyDBInstance3으로 복제됩니다.

수동으로, 혹은 복제 오류로 인해 연속하여 30일 이상 복제가 중단된 경우에는 Amazon RDS가 마스터 DB 인스턴스에 대한 스토리지 요건 증가와 장애 조치의 장기화를 방지할 목적으로 마스터 DB 인스턴스와 모든 읽기 전용 복제본 사이의 복제를 종료합니다. 이후에도 읽기 전용 복제본 DB 인스턴스를 사용할 수는 있지만 읽기 전용 복제본에서 필요한 이진 로그가 복제 종료와 함께 마스터 DB 인스턴스에서 삭제되어 복제를 재개할 수 없습니다. 마스터 DB 인스턴스에서 복제를 재개하려면 새로운 읽기 전용 복제본을 생성해야 합니다.

읽기 전용 복제본 생성

읽기 전용 복제본은 기존 MySQL, MariaDB 또는 PostgreSQL DB 인스턴스에서 AWS Management Console, AWS CLI 또는 AWS API를 사용해 생성할 수 있습니다. 또한 SourceDBInstanceIdentifier를 지정하여 읽기 전용 복제본을 생성할 수도 있습니다. 이 코드는 복제하고자 하는 원본 DB 인스턴스의 식별자 역할을 합니다.

읽기 전용 복제본 생성은 Amazon RDS가 원본 DB 인스턴스의 DB 스냅샷을 캡처하면서 시작됩니다. 그 결과, DB 스냅샷을 캡처하는 동안 원본 DB 인스턴스에 가벼운 I/O 중단이 발생합니다. I/O 지연 시간은 일반적으로 1분 정도이지만 원본 DB 인스턴스가 다중 AZ 배포(다중 AZ 배포의 경우 DB 스냅샷이 예비 인스턴스에 생성됨)인 경우에는 발생하지 않습니다. 활성화 상태로 오랜 시간 실행되는 트랜잭션이 있을 경우 읽기 전용 복제본의 생성 프로세스가 느려질 수 있습니다. 따라서 이러한 트랜잭션은 완료될 때까지 기다렸다가 읽기 전용 복제본을 생성하는 것이 좋습니다. 동일한 원본 DB 인스턴스에서 다수의 읽기 전용 복제본을 병렬 방식으로 생성하는 경우에는 Amazon RDS가 첫 번째 생성 작업을 시작하면서 한 번만 스냅샷을 캡처합니다.

읽기 전용 복제본을 생성할 때는 몇 가지 고려할 사항이 있습니다. 첫째, 백업 보존 기간을 0이 아닌 다른 값으로 설정하여 원본 DB 인스턴스의 자동 백업을 활성화해야 합니다. 이러한 요건은 다른 읽기 전용 복제본의 원본 DB 인스턴스인 읽기 전용 복제본에도 똑같이 적용됩니다. MySQL DB 인스턴스를 사용할 때는 MySQL 5.5를 제외한 MySQL 5.6 이상 기반 읽기 전용 복제본에서만 자동 백업이 지원됩니다. 따라서 Amazon RDS MySQL 5.6 이상 읽기 전용 복제본에서 자동 백업을 활성화하려면 먼저 읽기 전용 복제본을 생성한 다음 자동 백업이 활성화되도록 읽기 전용 복제본을 변경해야 합니다.

MyISAM을 사용하는 MySQL DB 인스턴스 준비

MySQL DB 인스턴스가 MyISAM 같은 비트랜잭션 엔진을 사용할 경우 다음과 같이 읽기 전용 복제본을 설정해야 합니다. 이 단계는 읽기 전용 복제본이 고객의 데이터와 동일한 사본이 되도록 하기 위해 필요합니다. 그러나 모든 테이블이 InnoDB와 같은 트랜잭션 엔진을 사용하는 경우에는 이 단계가 필요 없습니다.

  1. 원본 DB 인스턴스에서 비트랜잭션 테이블의 모든 데이터 조작 언어(DML) 및 데이터 정의 언어(DDL) 작업을 중지하고 완료될 때까지 기다립니다. SELECT 문은 계속해서 실행할 수 있습니다.

  2. 원본 DB 인스턴스의 테이블을 플러시한 후 잠급니다.

  3. 아래 방법 중 한 가지를 사용하여 읽기 전용 복제본을 생성합니다.

  4. 예를 들어 DescribeDBInstances API 작업 등을 사용하여 읽기 전용 복제본의 생성 프로세스를 확인합니다. 읽기 전용 복제본이 생성되면 원본 DB 인스턴스의 테이블 잠금을 해제하고 정상적인 데이터베이스 작업을 재개합니다.

AWS Management Console

원본 MySQL, MariaDB 또는 PostgreSQL DB 인스턴스에서 읽기 전용 복제본을 생성하는 방법

  1. AWS Management Console에 로그인한 다음 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 [DB Instances]를 선택합니다.

  3. [Instances] 창에서 읽기 전용 복제본의 원본으로 사용할 MySQL, MariaDB 또는 PostgreSQL DB 인스턴스를 선택하고 [Instance Actions]에서 [Create Read Replica]를 선택합니다.

  4. 사용할 인스턴스 사양을 선택합니다. 읽기 전용 복제본에 동일한 DB 인스턴스 클래스와 스토리지 유형을 사용하는 것이 모범 사례입니다.

  5. 사용할 설정을 선택합니다. [DB Instance Identifier]에 읽기 전용 복제본의 이름을 입력합니다. 필요에 따라 다른 설정을 조정합니다.

  6. 사용할 네트워크, 보안, 데이터베이스 및 유지 관리 설정을 선택합니다.

  7. [Create Read Replica]를 선택합니다.

CLI

원본 MySQL, MariaDB 또는 PostgreSQL DB 인스턴스에서 읽기 전용 복제본을 생성하려면 AWS CLI 명령 create-db-instance-read-replica를 사용합니다.

Linux, OS X, Unix의 경우:

Copy
aws rds create-db-instance-read-replica \ --db-instance-identifier myreadreplica \ --source-db-instance-identifier mydbinstance

Windows의 경우:

Copy
aws rds create-db-instance-read-replica ^ --db-instance-identifier myreadreplica ^ --source-db-instance-identifier mydbinstance

API

원본 MySQL, MariaDB 또는 PostgreSQL DB 인스턴스에서 읽기 전용 복제본을 생성하려면 Amazon RDS API 함수 CreateDBInstanceReadReplica를 호출합니다.

Copy
https://rds.amazonaws.com/ ?Action=CreateDBInstanceReadReplica &DBInstanceIdentifier=myreadreplica &SourceDBInstanceIdentifier=mydbinstance &Version=2012-01-15 &SignatureVersion=2 &SignatureMethod=HmacSHA256 &Timestamp=2012-01-20T22%3A06%3A23.624Z &AWSAccessKeyId=<AWS Access Key ID> &Signature=<Signature>

읽기 전용 복제본의 DB 인스턴스 승격

MySQL, MariaDB 또는 PostgreSQL 읽기 전용 복제본을 독립 실행형 단일 AZ DB 인스턴스로 승격할 수 있습니다. 읽기 전용 복제본을 승격하면 DB 인스턴스가 먼저 재부팅된 후에 사용할 수 있습니다.

읽기 전용 복제본을 단일 AZ DB 인스턴스로 승격하는 이유는 몇 가지가 있습니다.

  • DDL 작업 실행(MySQL 및 MariaDB에 한함) – 인덱스를 생성하거나 리빌드하는 등의 DDL 작업은 시간이 걸릴 뿐만 아니라 DB 인스턴스에 상당한 성능 저하를 초래할 수 있습니다. MySQL 또는 MariaDB 읽기 전용 복제본에서 이러한 작업을 하려면 먼저 읽기 전용 복제본이 원본 DB 인스턴스와 동기화되어 있어야 합니다. 그런 다음 읽기 전용 복제본을 승격해야 애플리케이션이 승격된 인스턴스를 사용하도록 유도할 수 있습니다.

  • 샤딩 – 샤딩이란 "무공유(share-nothing)" 아키텍처를 구현함으로써 기본적으로 대규모 데이터베이스를 다수의 소규모 데이터베이스로 분할하는 기술입니다. 일반적인 데이터베이스 분할은 동일한 쿼리에 조인되지 않은 테이블을 다른 호스트로 분할하거나, 테이블을 여러 호스트로 복사한 후 해싱 알고리즘을 사용해 어떤 호스트를 업데이트할지 결정하는 두 가지 방법이 있습니다. 분할된 각 "샤드"(소규모 데이터베이스)마다 읽기 전용 복제본을 생성한 후 "독립된" 샤드로 전환하면서 승격할 수 있습니다. 그런 다음 각 샤드마다 요건에 따라 키 범위(행을 분할한 경우)나 배포된 테이블을 얻을 수 있습니다.

  • 장애 복구 실행 – 원본 DB 인스턴스에 장애가 발생할 경우 읽기 전용 복제본 승격을 데이터 복구 방법으로 사용할 수 있습니다. 하지만 사용 사례에 동기식 복제, 자동 장애 감지 및 장애 조치가 필요한 경우에는 DB 인스턴스를 다중 AZ 배포로 운영하는 것이 바람직합니다. 비동기식 복제의 영향이나 한계에 대해 알고 있으면서도 데이터 복구를 위해 읽기 전용 복제본을 사용하려면 먼저 읽기 전용 복제본을 생성한 다음 원본 DB 인스턴스의 장애 여부를 모니터링해야 합니다. 그 결과 장애가 발견된 경우에는 다음과 같이 실행합니다.

    1. 읽기 전용 복제본을 승격합니다.

    2. 데이터베이스 트래픽을 승격된 DB 인스턴스로 유도합니다.

    3. 승격된 DB 인스턴스를 원본으로 하는 교체용 읽기 전용 복제본을 생성합니다.

    이 모든 작업은 Amazon Relational Database Service API Reference를 사용해 실행할 수 있으며, Amazon Simple Workflow Service 개발자 안내서를 통해 프로세스 자동화도 가능합니다.

읽기 전용 복제본을 승격하여 DB 인스턴스가 새롭게 생성되었다고 해도 백업 보존 기간, 백업 기간, 그리고 이전 읽기 전용 복제본 원본의 파라미터 그룹은 그대로 보존됩니다. 승격 프로세스는 읽기 전용 복제본의 크기에 따라 완료하는 데 몇 분에서 더 오래도 걸릴 수 있습니다. 일단 읽기 전용 복제본이 단일 AZ DB 인스턴스로 승격되면 다른 단일 AZ DB 인스턴스와 다를 것이 없습니다. 예를 들어 새롭게 승격된 DB 인스턴스를 다중 AZ DB 인스턴스로 전환하거나, 여기서 읽기 전용 복제본을 생성할 수 있습니다. 또한 DB 스냅샷을 캡처하여 특정 시점으로 복원 작업을 실행할 수도 있습니다. 승격된 DB 인스턴스는 더 이상 읽기 전용 복제본이 아니기 때문에 복제 대상으로는 사용할 수 없습니다. 원본 DB 인스턴스에 읽기 전용 복제본이 다수 있을 경우 읽기 전용 복제본 하나를 DB 인스턴스로 승격하더라도 나머지 복제본에는 아무런 영향도 끼치지 않습니다.

읽기 전용 복제본을 승격하기 전에 먼저 읽기 전용 복제본에서 자동 백업을 비활성화하는 것이 바람직합니다. 이는 승격 프로세스 도중 백업을 방지하기 위해서입니다. 일단 인스턴스가 기본 인스턴스로 승격된 후에 백업 설정에 따라 백업이 실행됩니다.

다음은 읽기 전용 복제본을 단일 AZ DB 인스턴스로 승격하기 위한 일반적인 프로세스입니다:

  1. 읽기 전용 복제본의 원본 DB 인스턴스에 쓰기를 하지 못하도록 모든 트랜잭션을 중단한 후 읽기 전용 복제본의 업데이트가 모두 끝날 때까지 기다립니다. 읽기 전용 복제본의 데이터베이스 업데이트는 원본 DB 인스턴스의 업데이트가 끝난 후에 이어집니다. 이러한 복제 지연은 경우에 따라 큰 차이가 날 수도 있습니다. Replica Lag 측정치를 사용하여 읽기 전용 복제본의 업데이트가 모두 완료되는 시간을 측정합니다.

  2. MySQL 및 MariaDB에 한함: MySQL 또는 MariaDB 읽기 전용 복제본을 변경해야 하는 경우에는 읽기 전용 복제본의 DB 파라미터 그룹에서 read_only 파라미터를 0으로 설정해야 합니다. 그래야만 인덱스 생성 등 필요한 DDL 작업을 모두 읽기 전용 복제본에 실행할 수 있기 때문입니다. 읽기 전용 복제본에 실행하는 작업은 원본 DB 인스턴스의 성능에 아무런 영향도 끼치지 않습니다.

  3. Amazon RDS 콘솔의 Promote Read Replica 옵션, AWS CLI 명령 promote-read-replica 또는 PromoteReadReplica Amazon RDS API 작업 등을 사용해 읽기 전용 복제본을 승격합니다.

    참고

    승격 프로세스는 완료할 때까지 몇 분 걸립니다. 읽기 전용 복제본을 승격하면 복제가 중지되고 읽기 전용 복제본이 재부팅됩니다. 재부팅이 끝나면 읽기 전용 복제본을 단일 AZ DB 인스턴스로 사용할 수 있습니다.

AWS Management Console

읽기 전용 복제본을 DB 인스턴스로 승격하는 방법

  1. AWS Management Console에 로그인한 다음 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. Amazon RDS 콘솔에서 [Read Replicas]를 선택합니다.

  3. [Read Replicas] 창에서 승격할 읽기 전용 복제본 옆의 확인란을 선택합니다.

  4. [Promote Read Replica]를 선택합니다.

  5. [Promote Read Replica] 대화 상자에 새롭게 승격된 DB 인스턴스의 백업 보존 기간과 백업 기간을 입력합니다.

  6. 원하는 대로 설정되었으면 [Continue]를 선택합니다.

  7. 승인 페이지에서 [Yes, Promote]를 선택합니다.

CLI

읽기 전용 복제본을 DB 인스턴스로 승격하려면 AWS CLI promote-read-replica 명령을 사용합니다.

Linux, OS X, Unix의 경우:

Copy
aws rds promote-read-replica \ --db-instance-identifier myreadreplica

Windows의 경우:

Copy
aws rds promote-read-replica ^ --db-instance-identifier myreadreplica

API

읽기 전용 복제본을 DB 인스턴스로 승격하려면 PromoteReadReplica를 호출합니다.

Copy
https://rds.amazonaws.com/ ?Action=PromoteReadReplica &DBInstanceIdentifier=myreadreplica &Version=2012-01-15 &SignatureVersion=2 &SignatureMethod=HmacSHA256 &Timestamp=2012-01-20T22%3A06%3A23.624Z &AWSAccessKeyId=<AWS Access Key ID> &Signature=<Signature>

리전 간 읽기 전용 복제본 복제

Amazon Relational Database Service(Amazon RDS)을 사용해 원본 DB 인스턴스와 다른 AWS 리전에 MySQL, PostgreSQL 또는 MariaDB 읽기 전용 복제본을 생성할 수 있습니다. 읽기 전용 복제본을 생성하면 다음 작업을 수행할 수 있습니다.

  • 재해 복구 기능을 향상시킵니다.

  • 읽기 작업을 사용자에 더 가까운 리전으로 조정합니다.

  • 한 리전의 데이터 센터에서 다른 리전의 데이터 센터로 마이그레이션하는 작업을 더 용이하게 합니다.

원본 인스턴스와 다른 리전에 MySQL, PostgreSQL 또는 MariaDB 읽기 전용 복제본을 생성하더라도 방법은 동일한 리전에 복제본을 생성하는 것과 비슷합니다. 여러 리전에 걸쳐 두루 읽기 전용 복제본을 생성하려면 AWS Management Console create-db-instance-read-replica 명령을 실행하거나 CreateDBInstanceReadReplica API 작업을 호출합니다.

원본 DB 인스턴스와 다른 AWS 리전에서 암호화된 읽기 전용 복제본을 생성하려면 원본 DB 인스턴스를 암호화해야 합니다.

참고

다른 리전에 속하는 Amazon Aurora DB 클러스터의 복제본도 만들 수 있습니다. 자세한 내용은 여러 AWS 리전에 걸쳐 Amazon Aurora DB 클러스터 복제을(를) 참조하십시오.

그 다음 다른 AWS 리전의 원본 MySQL, MariaDB 또는 PostgreSQL DB 인스턴스에서 읽기 전용 복제본을 생성하는 방법에 대한 정보를 찾을 수 있습니다.

AWS Management Console

AWS Management Console을 사용하여 여러 리전에 걸쳐 읽기 전용 복제본을 생성할 수 있습니다.

콘솔을 사용해 여러 리전에서 읽기 전용 복제본 만들기

  1. AWS Management Console에 로그인한 다음 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 [DB Instances]를 선택합니다.

  3. [Instances] 창에서 읽기 전용 복제본의 원본으로 사용할 MySQL, MariaDB 또는 PostgreSQL DB 인스턴스를 선택한 다음, [Instance Actions]에서 [Create Read Replica]를 선택합니다. 암호화된 읽기 전용 복제본을 생성하려면 원본 DB 인스턴스를 암호화해야 합니다. 원본 DB 인스턴스를 암호화하는 방법에 대해 자세히 알아보려면 Amazon RDS 리소스 암호화을(를) 참조하십시오.

  4. 사용할 인스턴스 사양을 선택합니다. 읽기 전용 복제본에는 동일한 DB 인스턴스 클래스와 스토리지 유형을 사용하는 것이 좋습니다.

  5. 다음과 같이 사용하고자 하는 기타 설정을 선택합니다.

    • [DB Instance Identifier]에 읽기 전용 복제본의 이름을 입력합니다.

    • [Network & Security] 섹션에서 [Designation Region] 및 [Designation DB Subnet Group]에 대한 값을 선택합니다.

    • 다른 리전에서 암호화된 읽기 전용 복제본을 생성하려면 [Enable Encryption]을 선택하고 [Master Key]를 선택합니다. [Master Key]에서 대상 리전의 KMS 키 식별자를 선택합니다.

    • 그밖에 사용할 네트워크, 보안, 데이터베이스 및 유지 관리 설정을 선택합니다.

  6. [Create Read Replica]를 선택합니다.

AWS CLI

다른 AWS 리전의 원본 MySQL, MariaDB 또는 PostgreSQL DB 인스턴스에서 읽기 전용 복제본을 생성하려면 create-db-instance-read-replica 명령을 사용할 수 있습니다. 이 경우 읽기 전용 복제본이 필요한 AWS 리전에서 create-db-instance-read-replica 명령을 실행한 후 원본 DB 인스턴스에 Amazon 리소스 이름(ARN)을 지정해줍니다. ARN은 Amazon Web Services에서 생성된 리소스를 고유하게 식별합니다.

예를 들어, 원본 DB 인스턴스가 미국 동부(오하이오) 리전에 있는 경우, ARN은 다음과 유사한 모양을 띱니다.

arn:aws:rds:us-east-2:123456789012:db:my-mysql-instance

ARN에 대한 자세한 내용은 Amazon RDS의 Amazon 리소스 이름(ARN)을 사용한 작업을(를) 참조하십시오.

원본 DB 인스턴스와 다른 AWS 리전에서 암호화된 읽기 전용 복제본을 생성하려면 대상 리전에서 AWS CLI create-db-instance-read-replica 명령을 사용할 수 있습니다. 다음 파라미터는 다른 AWS 리전에서 암호화된 읽기 전용 복제본을 생성하는 데 사용됩니다.

  • --source-region — 암호화된 읽기 전용 복제본이 생성되는 AWS 리전. source-region이 지정되지 않은 경우에는 pre-signed-url을 지정해야 합니다. pre-signed-url은 읽기 전용 복제본이 생성되는 원본 리전에서 호출되는 CreateDBInstanceReadReplica 작업에 대한 서명 버전 4의 서명된 요청이 포함된 URL입니다. pre-signed-url에 대한 자세한 내용은 CreateDBInstanceReadReplica을(를) 참조하십시오.

  • --source-db-instance-identifier — 생성되는 암호화된 읽기 전용 복제본의 DB 인스턴스 식별자. 이 식별자는 원본 리전용 ARN 형식으로 되어 있어야 합니다. source-db-instance-identifier에 지정된 리전은 source-region로 지정된 리전과 일치해야 합니다.

  • --db-instance-identifier — 대상 리전에 있는 암호화된 읽기 전용 복제본의 식별자.

  • --kms-key-id — 대상 리전에서 읽기 전용 복제본을 암호화하는 데 사용할 키의 AWS KMS 키 식별자.

다음 코드는 us-west-2 리전에서 읽기 전용 복제본을 생성합니다.

Linux, OS X, Unix의 경우:

Copy
aws rds create-db-instance-read-replica \ --db-instance-identifier DBInstanceIdentifier \ --region us-west-2 \ --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:my-mysql-instance

Windows의 경우:

Copy
aws rds create-db-instance-read-replica ^ --db-instance-identifier DBInstanceIdentifier ^ --region us-west-2 ^ --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:my-mysql-instance

다음 코드는 원본 DB 인스턴스와 다른 AWS 리전에서 읽기 전용 복제본을 생성합니다. create-db-instance-read-replica 명령을 호출하는 리전이 암호화된 읽기 전용 복제본의 대상 리전입니다.

Linux, OS X, Unix의 경우:

Copy
aws rds create-db-instance-read-replica \ --db-instance-identifier DBInstanceIdentifier \ --region us-east-1 \ --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:my-mysql-instance \ --source-region us-west-2 \ --kms-key-id my-us-east-1-key

Windows의 경우:

Copy
aws rds create-db-instance-read-replica ^ --db-instance-identifier DBInstanceIdentifier ^ --region us-east-1 ^ --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:my-mysql-instance ^ --source-region us-west-2 ^ --kms-key-id my-us-east-1-key

API

다른 AWS 리전의 원본 MySQL, MariaDB 또는 PostgreSQL DB 인스턴스에서 읽기 전용 복제본을 생성하려면 Amazon RDS API 함수 CreateDBInstanceReadReplica를 호출할 수 있습니다. 이 경우 읽기 전용 복제본이 필요한 AWS 리전에서 CreateDBInstanceReadReplica 명령을 호출한 후 원본 DB 인스턴스에 Amazon 리소스 이름(ARN)을 지정해줍니다. ARN은 Amazon Web Services에서 생성된 리소스를 고유하게 식별합니다.

원본 DB 인스턴스와 다른 AWS 리전에서 암호화된 읽기 전용 복제본을 생성하려면 대상 리전에서 Amazon RDS API CreateDBInstanceReadReplica 작업을 사용할 수 있습니다. 다른 리전에서 암호화된 읽기 전용 복제본을 생성하려면 PreSignedURL의 값을 지정해야 합니다. PreSignedURL에는 읽기 전용 복제본이 생성되는 원본 리전에서 호출할 CreateDBInstanceReadReplica 작업에 대한 요청이 포함되어 있어야 합니다. PreSignedUrl에 대한 자세한 내용은 CreateDBInstanceReadReplica을(를) 참조하십시오.

예를 들어, 원본 DB 인스턴스가 미국 동부(오하이오) 리전에 있는 경우, ARN은 다음과 유사한 모양을 띱니다.

arn:aws:rds:us-east-2:123456789012:db:my-mysql-instance

ARN에 대한 자세한 내용은 Amazon RDS의 Amazon 리소스 이름(ARN)을 사용한 작업을(를) 참조하십시오.

Copy
https://us-west-2.rds.amazonaws.com/ ?Action=CreateDBInstanceReadReplica &KmsKeyId=my-us-east-1-key &PreSignedUrl=https%253A%252F%252Frds.us-west-2.amazonaws.com%252F %253FAction%253D CreateDBInstanceReadReplica %2526DestinationRegion%253Dus-east-1 %2526KmsKeyId%253Dmy-us-east-1-key %2526SourceDBInstanceIdentifier%253Darn%25253Aaws%25253Ards%25253Aus-west-2%1234567890 12%25253Adb%25253Amy-mysql-instance %2526SignatureMethod%253DHmacSHA256 %2526SignatureVersion%253D4%2526SourceDBInstanceIdentifier%253Darn%25253Aaws%25253Ards%25253Aus-west-2%25253A123456789012%25253Ainstance%25253Amysql-instance1-instance-20161115 %2526Version%253D2014-10-31 %2526X-Amz-Algorithm%253DAWS4-HMAC-SHA256 %2526X-Amz-Credential%253DAKIADQKE4SARGYLE%252F20161117%252Fus-west-2%252Frds%252Faws4_request %2526X-Amz-Date%253D20161117T215409Z %2526X-Amz-Expires%253D3600 %2526X-Amz-SignedHeaders%253Dcontent-type%253Bhost%253Buser-agent%253Bx-amz-content-sha256%253Bx-amz-date %2526X-Amz-Signature%253D255a0f17b4e717d3b67fad163c3ec26573b882c03a65523522cf890a67fca613 &DBInstanceIdentifier=myreadreplica &SourceDBInstanceIdentifier=arn:aws:rds:us-west-2:123456789012:db:my-mysql-instance &Version=2012-01-15 &SignatureVersion=2 &SignatureMethod=HmacSHA256 &Timestamp=2012-01-20T22%3A06%3A23.624Z &AWSAccessKeyId=<AWS Access Key ID> &Signature=<Signature>

리전 간 복제 시 고려 사항

한 리전 내에서 복제할 때 고려해야 할 모든 사항이 리전 간 복제 시에도 그대로 적용됩니다. 그 밖에 리전 간 복제 시 다음과 같은 고려 사항이 추가로 적용됩니다.

  • 리전 간 복제는 MariaDB, PostgreSQL(버전 9.4.7 및 9.5.2 이상) 또는 MySQL 5.6 이상의 Amazon RDS DB 인스턴스를 사용할 때만 가능합니다.

  • 원본 DB 인스턴스는 다수의 리전에서 리전 간 읽기 전용 복제본을 가질 수 있습니다.

  • 리전 간 Amazon RDS 읽기 전용 복제본은 다른 Amazon RDS DB 인스턴스의 읽기 전용 복제본이 아닌 원본 Amazon RDS DB 인스턴스에서만 생성할 수 있습니다.

  • 복제 채널을 AWS GovCloud (US) 리전으로 또는 리전을 벗어나서 설정할 수는 없습니다.

  • 원본 인스턴스와 다른 리전에 읽기 전용 복제본을 생성할 때는 리전의 데이터 센터 간 네트워크 채널이 길어지기 때문에 지연 시간이 증가할 수 있다는 점을 감안해야 합니다.

  • 한 리전 내에서 똑같은 원본 DB 인스턴스를 통해 생성되는 리전 간 읽기 전용 복제본은 모두 동일한 Amazon VPC에 속하거나 VPC에서 벗어나야 합니다. 리전 간 읽기 전용 복제본의 경우 --db-subnet-group-name 파라미터를 지정하는 읽기 전용 복제본 생성 명령은 모두 DB 서브넷 그룹을 동일한 VPC에서 지정해야 합니다.

  • 리전 간 읽기 전용 복제본이 VPC에 속하더라도 VPC에 속하지 않는 원본 DB 인스턴스에서 생성할 수 있습니다. 또한 리전 간 읽기 전용 복제본이 VPC에 속하지 않더라도 VPC에 속하는 원본 DB 인스턴스에서 생성할 수 있습니다.

  • VPC에 대한 ACL(액세스 제어 목록) 항목 수 제한으로 인해 5개를 초과하는 교차 리전 읽기 전용 복제본 인스턴스를 보장할 수 없습니다.

리전 간 복제 비용

리전 간 복제를 위해 데이터를 전송할 때는 Amazon RDS 데이터 전송 요금이 발생합니다. 이러한 리전 간 복제 작업에서 요금이 발생하는 이유는 다음과 같이 원본 리전을 벗어나 데이터를 전송하기 때문입니다.

  • 읽기 전용 복제본을 생성할 때는 Amazon RDS가 원본 인스턴스의 스냅샷을 캡처하여 읽기 전용 복제본 리전으로 전송합니다.

  • 원본 데이터베이스에서 데이터를 변경할 때마다 Amazon RDS가 원본 리전에서 읽기 전용 복제본 리전으로 데이터를 전송합니다.

Amazon RDS 데이터 전송 요금에 대한 자세한 내용은 Amazon Relational Database Service Pricing을(를) 참조하십시오.

MySQL 및 MariaDB 인스턴스의 경우 리전 간 읽기 전용 복제본의 생성 수를 줄이면 데이터 전송 요금도 절감할 수 있습니다. 예를 들어 리전 한 곳에 원본 DB 인스턴스가 있고, 다른 리전에 읽기 전용 복제본을 3개 생성한다고 가정할 때 원본 DB 인스턴스에서는 읽기 전용 복제본 1개만 생성한 후 나머지 2개는 원본 DB 인스턴스가 아닌 첫 번째 읽기 전용 복제본에서 생성하면 됩니다. 예를 들어 한 리전에 source-instance-1이 있는 경우 다음 작업을 수행할 수 있습니다.

  • 새로운 리전에 read-replica-1을 생성한 후 source-instance-1을 원본으로 지정합니다.

  • read-replica-2read-replica-1에서 생성합니다.

  • read-replica-3read-replica-1에서 생성합니다.

위 예에서 요금은 source-instance-1에서 read-replica-1로 데이터를 전송할 때만 발생합니다. read-replica-1에서 나머지 두 복제본으로 데이터를 전송할 때는 동일 리전이기 때문에 요금이 발생하지 않습니다. 만약 복제본 3개를 전부 source-instance-1에서 생성한다면 복제본 3개에 대한 데이터 전송 요금이 모두 발생합니다.

Amazon RDS의 리전 간 복제 방법

Amazon RDS는 다음 프로세스에 따라 리전 간 읽기 전용 복제본을 생성합니다. 이 프로세스를 완료하려면 관련된 리전과 데이터베이스의 데이터 양에 따라 몇 시간까지 걸리기도 합니다. 이 정보는 리전 간 읽기 전용 복제본을 생성하면서 프로세스의 진행 과정을 파악할 때 사용할 수 있습니다.

  1. Amazon RDS가 원본 DB 인스턴스를 복제 원본으로 구성하기 시작하면서 상태를 modifying으로 설정합니다.

  2. Amazon RDS가 대상 리전에 지정한 읽기 전용 복제본을 설정하기 시작하면서 상태를 creating으로 설정합니다.

  3. Amazon RDS가 원본 DB 인스턴스의 자동 DB 스냅샷을 원본 리전에 생성합니다. DB 스냅샷 이름은 rds:<InstanceID>-<timestamp>와 같은 형식을 갖습니다. 여기에서 <InstanceID>는 원본 인스턴스의 식별자이고, <timestamp>는 복제 시작일과 시간을 나타냅니다. 예를 들어 rds:mysourceinstance-2013-11-14-09-24는 인스턴스 mysourceinstance에서 2013-11-14-09-24에 생성되었다는 것을 의미합니다. 자동 DB 스냅샷의 생성 단계에서 원본 DB 인스턴스 상태는 modifying, 읽기 전용 복제본 상태는 creating, 그리고 DB 스냅샷 상태는 creating입니다. 콘솔의 [DB Snapshots] 페이지에서 [Progress] 열을 보면 DB 스냅샷 생성이 얼마나 진행되었는지 알 수 있습니다. DB 스냅샷이 완료되면 DB 스냅샷과 원본 DB 인스턴스의 상태가 모두 available로 설정됩니다.

  4. Amazon RDS가 리전 간 스냅샷 복사를 시작하면서 첫 번째 데이터 전송이 이루어집니다. 스냅샷 사본은 대상 리전에 creating 상태와 함께 자동 스냅샷으로 등록됩니다. 이름은 원본 DB 스냅샷과 동일합니다. [DB Snapshots] 페이지에서 [Progress] 열을 보면 복사가 얼마나 진행되었는지 알 수 있습니다. 복사가 완료되면 DB 스냅샷 사본 상태가 available로 설정됩니다.

  5. Amazon RDS가 이제 복사된 DB 스냅샷을 사용하여 읽기 전용 복제본에 처음으로 데이터를 로드하기 시작합니다. 이 단계에서 읽기 전용 복제본이 대상 DB 인스턴스 목록에 포함되며, 이때 상태는 creating입니다. 로드가 완료되면 읽기 전용 복제본 상태가 available로 설정되고, DB 스냅샷 사본이 삭제됩니다.

  6. 읽기 전용 복제본이 available 상태에 이르면 Amazon RDS가 읽기 전용 복제본 생성 작업을 시작한 이후 원본 인스턴스에 발생한 변경 사항을 복제하기 시작합니다. 이 단계에서 읽기 전용 복제본의 복제 지연 시간은 0보다 큽니다.

    MySQL, MariaDB, 및 PostgreSQL 읽기 전용 복제본의 경우 Amazon RDS ReplicaLag 측정치를 보면서 Amazon CloudWatch의 복제 지연을 모니터링할 수 있습니다. MySQL과 MariaDB에서는 ReplicaLag 측정치가 SHOW SLAVE STATUS 명령의 Seconds_Behind_Master 필드 값을 보고합니다. 그리고, PostgreSQL에서는 ReplicaLag 측정치가 SELECT extract(epoch from now() - pg_last_xact_replay_timestamp()) AS slave_lag의 값을 보고합니다.

    이렇게 MySQL 및 MariaDB에서 복제 지연이 발생하는 공통 원인은 다음과 같습니다.

    • 네트워크 중단.

    • 읽기 전용 복제본 관련 인덱스를 할당하여 테이블에 쓰기 작업 중일 때. 읽기 전용 복제본에서 read_only 파라미터가 0으로 설정되어 있지 않으면 복제가 중단될 수 있습니다.

    • MyISAM 같은 비트랜잭션 스토리지 엔진을 사용할 때. 복제는 MySQL용 InnoDB 스토리지 엔진 및 MariaDB용 XtraDB 스토리지 엔진에 대해서만 지원됩니다.

    ReplicaLag 측정치가 0에 도달하면 복제본이 원본 DB 인스턴스를 따라잡은 것입니다. ReplicaLag 측정치가 -1을 반환하는 경우 현재 복제가 활성화 상태가 아닙니다. ReplicaLag = -1은 Seconds_Behind_Master = NULL과 동일합니다.

    PostgreSQL(버전 9.4.7 및 9.5.2에 한함)은 물리적인 복제 슬롯을 사용하여 원본 인스턴스의 Write Ahead Log(WAL) 보존을 관리합니다. Amazon RDS가 리전 간 읽기 전용 복제본 인스턴스마다 물리적 복제 슬롯을 생성하여 인스턴스와 연동시킵니다. 2개의 Amazon CloudWatch 측정치인 Oldest Replication Slot LagTransaction Logs Disk Usage는 수신되는 WAL 데이터와 관련하여 가장 지체된 복제본이 얼마나 오래되었는지, 그리고 현재 WAL 데이터에 얼마나 많은 스토리지가 사용되고 있는지 나타냅니다. Transaction Logs Disk Usage 값은 리전 간 읽기 전용 복제본이 많이 지체될 수록 크게 증가합니다.

리전 간 복제 예

예 VPC 외부의 리전 간 읽기 전용 복제본 생성

다음은 us-east-1에 위치한 원본 DB 인스턴스에서 us-west-2에 읽기 전용 복제본을 생성하는 예입니다. 읽기 전용 복제본은 VPC 외부에 생성됩니다.

Linux, OS X, Unix의 경우:

Copy
aws rds create-db-instance-read-replica \ --db-instance-identifier SimCoProd01Replica01 \ --region us-west-2 --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:SimcoProd01

Windows의 경우:

Copy
aws rds create-db-instance-read-replica ^ --db-instance-identifier SimCoProd01Replica01 ^ --region us-west-2 --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:SimcoProd01

예 VPC 내부의 리전 간 읽기 전용 복제본 생성

us-east-1에 위치한 원본 DB 인스턴스에서 us-west-2에 읽기 전용 복제본을 생성하는 예입니다. 읽기 전용 복제본은 지정한 DB 서브넷 그룹과 연동된 VPC 내부에 생성됩니다.

Linux, OS X, Unix의 경우:

Copy
aws rds create-db-instance-read-replica \ --db-instance-identifier SimCoProd01Replica01 \ --region us-west-2 --db-subnet-group-name my-us-west-2-subnet --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:SimcoProd01

Windows의 경우:

Copy
aws rds create-db-instance-read-replica ^ --db-instance-identifier SimCoProd01Replica01 ^ --region us-west-2 --db-subnet-group-name my-us-west-2-subnet --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:SimcoProd01

읽기 전용 복제본 모니터링

읽기 전용 복제본의 상태를 모니터링할 수 있는 방법 은 몇 가지가 있습니다. 읽기 전용 복제본의 상태는 Amazon RDS 콘솔에서 확인할 수 있지만 AWS CLI describe-db-instances 명령 또는 Amazon RDS API DescribeDBInstances 작업을 통해서도 읽기 전용 복제본의 상태를 볼 수 있습니다.

 읽기 전용 복제본 상태

읽기 전용 복제본의 상태는 다음 중 한 가지가 될 수 있습니다.

  • Replicating - 읽기 전용 복제본이 성공적으로 복제되고 있습니다.

  • Error - 복제 도중 오류가 발생하였습니다. Amazon RDS 콘솔의 [Replication Error] 필드나 이벤트 로그를 검사하여 정확한 오류 원인을 찾아내야 합니다. 복제 오류의 문제 해결에 대한 자세한 내용은 MySQL 또는 MariaDB 읽기 전용 복제본의 문제 해결을(를) 참조하십시오.

  • Stopped - (MySQL 또는 MariaDB에 한함) 고객 요청으로 복제가 중단되었습니다.

  • Terminated - 복제가 종료되었습니다. 수동으로 또는 복제 오류로 인해 연속하여 30일 이상 복제가 중지된 경우 이 오류가 발생합니다. 이 경우 마스터 DB 인스턴스에 대한 스토리지 요건 증가와 장에 조치 시간 장기화를 방지하기 위해 Amazon RDS가 마스터 DB 인스턴스와 모든 읽기 전용 복제본 사이의 복제를 종료합니다.

    복제가 중단되면 대용량의 오류 메시지를 로그에 써야 하기 때문에 로그 크기와 수가 증가하면서 스토리지에 영향을 끼칠 수 있습니다. 또한 Amazon RDS가 복구 단계에서 다수의 로그를 유지 및 처리하는 데 필요한 시간 때문에 장애 복구에 영향을 끼칠 수도 있습니다.

MySQL 또는 MariaDB 읽기 전용 복제본의 원본 DB 인스턴스 지연 시간은 MySQL 또는 MariaDB Show Slave Status 명령을 통해 반환되는 Seconds_Behind_Master 데이터나, 혹은 CloudWatch Replica Lag 통계를 보면서 모니터링할 수 있습니다. 복제본이 환경에 뒤처질 정도로 너무 오래 지연될 경우에는 읽기 전용 복제본을 삭제 후 재생성하는 것이 좋습니다. 또한 읽기 전용 복제본을 확장하여 복제 속도를 높이는 것도 한 방법입니다.

MySQL 또는 MariaDB 읽기 전용 복제본의 문제 해결

MySQL 및 MariaDB의 복제 기술은 비동기식입니다. 간혹 원본 DB 인스턴스에서 BinLogDiskUsage가 증가하면 읽기 전용 복제본의 ReplicaLag가 예상되는 이유도 비동기식이기 때문입니다. 예를 들어 원본 DB 인스턴스에 대해 대량의 쓰기 작업이 동시에 발생할 수 있는 반면, 읽기 전용 복제본에 대한 쓰기 작업은 단일 I/O 스레드를 사용하여 직렬화됩니다. 이로 인해 원본 인스턴스와 읽기 전용 복제본 사이에 지연이 발생할 수 있습니다. 읽기 전용 복제본에 대한 자세한 내용은 MySQL 문서에서 Replication Implementation Details을(를) 참조하십시오. 읽기 전용 복제본에 대한 자세한 정보는 MariaDB 설명서에서 Replication Overview을(를) 참조하십시오.

원본 DB 인스턴스와 뒤이어 일어나는 읽기 전용 복제본의 업데이트 간 지연 시간을 줄일 수 있는 방법이 몇 가지 있으며, 다음과 같습니다.

  • 읽기 전용 복제본의 크기를 조정하여 원본 DB 인스턴스에 버금가는 스토리지 크기와 DB 인스턴스 클래스를 할당합니다.

  • 원본 DB 인스턴스와 읽기 전용 복제본에 사용되는 DB 파라미터 그룹의 파라미터 설정이 서로 호환되는지 확인합니다. 자세한 정보와 예는 이번 섹션 후반의 max_allowed_packet 파라미터 관련 설명을(를) 참조하십시오.

Amazon RDS는 읽기 전용 복제본의 복제 상태를 모니터링하다가 읽기 전용 복제본의 DML 쿼리 실행으로 원본 DB 인스턴스의 업데이트와 충돌이 일어나는 등 어떤 이유로든지 복제가 중단될 경우 읽기 전용 복제본 인스턴스의 Replication State 필드를 Error로 업데이트합니다. [Replication Error] 필드를 확인하여 MySQL 또는 MariaDB 엔진에서 발생한 관련 오류의 세부 정보를 검토할 수 있습니다. RDS-EVENT-0045, RDS-EVENT-0046RDS-EVENT-0047을 포함하여 읽기 전용 복제본의 상태를 표시하는 이벤트도 생성됩니다. 이벤트와 이벤트 구독에 대한 자세한 정보는 Amazon RDS 이벤트 알림 서비스 사용을(를) 참조하십시오. MySQL 오류 메시지가 반환되는 경우에는 MySQL 오류 메시지 문서에서 오류 번호를 확인하십시오. MariaDB 오류 메시지가 반환되는 경우 MariaDB 오류 메시지 문서에 설명되어 있는 오류를 검토하십시오.

복제 오류의 원인이 되는 공통적인 문제를 하나 꼽으라고 하면 읽기 전용 복제본의 max_allowed_packet 파라미터 값이 원본 DB 인스턴스의 max_allowed_packet 파라미터 값보다 작을 때입니다. max_allowed_packet 파라미터는 DB 파라미터 그룹에서 사용자가 직접 설정할 수 있는 파라미터로서 데이터베이스에서 실행할 수 있는 DML의 최대 크기를 지정하는 데 사용됩니다. 원본 DB 인스턴스와 연동되어 있는 DB 파라미터 그룹의 max_allowed_packet 파라미터 값이 원본의 읽기 전용 복제본과 연동되어 있는 DB 파라미터 그룹의 max_allowed_packet 파라미터 값보다 작을 경우 복제 프로세스에서 오류(패킷이 'max_allowed_packet' 바이트보다 큰 오류)가 발생하면서 복제가 중단됩니다. 원본 및 읽기 전용 복제본이 같은 max_allowed_packet 파라미터 값을 가진 DB 파라미터 그룹을 사용하도록 하여 이 오류를 수정할 수 있습니다.

이밖에 복제 오류의 원인이 되는 공통적인 상황은 다음과 같습니다.

  • 읽기 전용 복제본의 테이블에 쓰기 작업을 실행하는 경우. 읽기 전용 복제본에서 인덱스를 만들 때는 read_only 파라미터를 0으로 설정해야 합니다. 읽기 전용 복제본의 테이블에 데이터를 쓰면 복제가 중단될 수 있습니다.

  • MyISAM 같은 비트랜잭션 스토리지 엔진을 사용할 때. 읽기 전용 복제본에는 트랜잭션 스토리지 엔진이 필요합니다. 복제는 MySQL용 InnoDB 스토리지 엔진 및 MariaDB용 XtraDB 스토리지 엔진에 대해서만 지원됩니다.

  • SYSDATE()와 같이 안전하지 않은 비결정적 쿼리를 사용하는 경우. 자세한 내용은 Determination of Safe and Unsafe Statements in Binary Logging을(를) 참조하십시오.

오류를 건너뛰어도 안전하다고 판단될 경우에는 현재 복제 오류 넘어가기 섹션에 설명한 단계를 따르십시오. 그 밖에 읽기 전용 복제본을 삭제하고 엔드포인트가 이전 읽기 전용 복제본의 엔드포인트와 동일하게 유지되도록 같은 DB 인스턴스 식별자를 사용하여 인스턴스를 생성할 수도 있습니다. 복제 오류가 해결되면 Replication Statereplicating으로 변경됩니다.

PostgreSQL 읽기 전용 복제본의 문제 해결

PostgreSQL은 리전 간 복제에 복제 슬롯을 사용하기 때문에 동일한 리전 및 리전 간 복제 문제를 해결하는 방법도 다릅니다.

리전 내 PostgreSQL 읽기 전용 복제본의 문제 해결

PostgreSQL 파라미터인 wal_keep_segments는 데이터를 읽기 전용 복제본으로 보낼 때 유지할 Write Ahead Log(WAL) 파일 수를 결정합니다. 이 파라미터 값에 따라 유지할 로그 수가 결정됩니다. 이 파라미터 값이 너무 낮으면 읽기 전용 복제본이 너무 멀리 뒤처지면서 스트리밍 복제가 중단될 수 있습니다. 이 경우에는 Amazon RDS가 복제 오류를 보고한 후 원본 DB 인스턴스에 보관된 WAL 로그를 재실행하여 읽기 전용 복제본의 복구를 시작합니다. 이 복구 프로세스는 읽기 전용 복제본이 스트리밍 복제를 이어갈 만큼 충분히 따라잡을 때까지 계속됩니다.

Amazon RDS가 보관 중인 WAL 파일을 재실행하여 이러한 상태의 읽기 전용 복제본을 복구할 때는 읽기 전용 복제본의 PostgreSQL 로그가 표시됩니다.

Copy
2014-11-07 19:01:10 UTC::@:[23180]:DEBUG:  switched WAL source from archive to stream after failure 2014-11-07 19:01:10 UTC::@:[11575]:LOG:  started streaming WAL from primary at 1A/D3000000 on timeline 1 2014-11-07 19:01:10 UTC::@:[11575]:FATAL:  could not receive data from WAL stream: ERROR:  requested WAL segment 000000010000001A000000D3 has already been removed 2014-11-07 19:01:10 UTC::@:[23180]:DEBUG:  could not restore file "00000002.history" from archive: return code 0 2014-11-07 19:01:15 UTC::@:[23180]:DEBUG:  switched WAL source from stream to archive after failure recovering 000000010000001A000000D3 2014-11-07 19:01:16 UTC::@:[23180]:LOG:  restored log file "000000010000001A000000D3" from archive

Amazon RDS가 복제본에 보관된 WAL 파일을 재실행하여 충분히 따라잡은 후 읽기 전용 복제본이 스트리밍을 재개할 수 있는 상태가 되면 PostgreSQL이 스트리밍을 재개하고 다음과 비슷한 라인을 로그 파일에 기록합니다.

Copy
2014-11-07 19:41:36 UTC::@:[24714]:LOG:  started streaming WAL from primary at 1B/B6000000 on timeline 1

로그의 체크포인트 정보를 보면 유지해야 할 WAL 파일 수를 결정할 수 있습니다. PostgreSQL 로그는 각 체크포인트마다 다음과 같은 정보를 표시합니다. 아래 로그 문에서 "# recycled" 트랜잭션 로그 파일을 보면 일정 시간에 재사용되는 트랜잭션 파일 수를 확인 후 이 정보를 사용해 wal_keep_segments 파라미터를 설정할 수 있습니다.

Copy
2014-11-07 19:59:35 UTC::@:[26820]:LOG:  checkpoint complete: wrote 376 buffers (0.2%); 0 transaction log file(s) added, 0 removed, 1 recycled; write=35.681 s, sync=0.013 s, total=35.703 s; sync files=10, longest=0.013 s, average=0.001 s

예를 들어 PostgreSQL 로그의 "checkpoint completed" 로그 문에서 5분 안에 재사용되는 파일 수가 35개라고 표시되어 있는 경우 이러한 사용 패턴에서는 읽기 전용 복제본이 5분간 이용하는 트랜잭션 파일 수는 35개이며, 원본 DB 인스턴스의 wal_keep_segments 파라미터 값이 32로 기본 설정되어 있는 경우에는 비스트리밍 상태로 5분을 넘길 수 없습니다.

리전 간 PostgreSQL 읽기 전용 복제본의 문제 해결

PostgreSQL(버전 9.4.7 및 9.5.2에 한함)은 물리적인 복제 슬롯을 사용하여 원본 DB 인스턴스의 Write Ahead Log(WAL) 보존을 관리합니다. Amazon RDS가 리전 간 읽기 전용 복제본 인스턴스마다 물리적 복제 슬롯을 생성하여 연동시킵니다. 2개의 Amazon CloudWatch 측정치인 Oldest Replication Slot LagTransaction Logs Disk Usage를 통해 수신되는 WAL 데이터와 관련하여 가장 지체된 복제본이 얼마나 오래되었는지, 그리고 현재 WAL 데이터에 얼마나 많은 스토리지가 사용되고 있는지 알 수 있습니다. Transaction Logs Disk Usage 값은 리전 간 읽기 전용 복제본이 많이 지체될 수록 크게 증가합니다.

DB 인스턴스의 워크로드에서 대용량의 WAL 데이터가 생성되는 경우에는 복제본이 뒤처지지 않도록 원본 DB 인스턴스와 읽기 전용 복제본의 클래스를 High/10Gb 네트워크 성능의 클래스로 변경해야 할 수 있습니다. Amazon CloudWatch 측정치인 Transaction Logs Generation을 보면 워크로드에서 발생하는 WAL 데이터 비율을 쉽게 이해할 수 있습니다.

리전 간 읽기 전용 복제본의 상태를 알고 싶으면 아래 예제와 같이 원본 인스턴스에 대한 pg_replication_slots를 쿼리를 실행하면 됩니다.

Copy
postgres=# select * from pg_replication_slots; slot_name | plugin | slot_type | datoid | database | active | active_pid | xmin | catalog_xmin | restart_lsn _______________________________________________________________________________________________________________________________________________ rds_us_east_1_db_uzwlholddgpblksce6hgw4nkte | | physical | | | t | 12598 | | | 4E/95000060 (1 row)