Amazon Relational Database Service
ユーザーガイド (API バージョン 2014-10-31)

MariaDB、MySQL、および PostgreSQL DB インスタンスのリードレプリカの使用

Amazon RDS は、MariaDB、MySQL、PostgreSQL DB エンジンに組み込まれたレプリケーション機能を使用して、リードレプリカと呼ばれる特殊なタイプの DB インスタンスをソース DB インスタンスから作成することもできます。ソース DB インスタンスに加えられた更新は、リードレプリカに非同期的にコピーされます。読み込みクエリをアプリケーションからリードレプリカにルーティングすることにより、ソース DB インスタンスへの負荷を減らすことができます。リードレプリカを使うと、読み込み負荷の高いデータベースワークロードに単一 DB インスタンスの能力が対応しきれない場合に、弾力的にスケールアウトできます。

注記

以下の情報は、Amazon RDS リードレプリカをソース DB インスタンスと同じ AWS リージョンで作成する場合でも、別の AWS リージョンで作成する場合でも該当します。以下の情報は、Amazon EC2 インスタンスまたはオンプレミスで実行されているインスタンスでレプリケーションをセットアップする場合には適用されません。

リードレプリカを作成したら、最初に既存の DB インスタンスをソースとして指定します。Amazon RDS がソースインスタンスのスナップショットを取得し、スナップショットから読み取り専用インスタンスを作成します。次に、Amazon RDS は、ソース DB インスタンスの変更がある場合は必ず、DB エンジンの非同期レプリケーションを使用してリードレプリカを更新します。リードレプリカは、読み取り専用接続のみ許可される DB インスタンスとして動作します。アプリケーションは、DB インスタンスの場合と同じ方法でリードレプリカに接続します。Amazon RDS は、ソース DB インスタンスのすべてのデータベースをレプリケートします。

Amazon RDS は、リードレプリカがソース DB インスタンスとは別の AWS リージョンにある場合、その DB インスタンスとリードレプリカとの間にセキュアな通信チャンネルを設定します。Amazon RDS は、セキュリティグループエントリの追加など、安全なチャネルを有効にするために必要な AWS セキュリティ設定を確立します。

リードレプリカは、MariaDB、MySQL、PostgreSQL エンジンによりサポートされています。このセクションでは、これらの 3 つのエンジンでのリードレプリカの使用に関する一般的な情報について説明しています。特定のエンジンでのリードレプリカの使用については、以下のセクションを参照してください。

Amazon RDS リードレプリカの概要

以下のような状況では、ソースの DB インスタンスに対する 1 つまたは複数のリードレプリカのデプロイが適している可能性があります。

  • 読み込みが多いデータベースに対して 1 つの DB インスタンスの処理または入出力機能を拡張します。このような過度の読み込みトラフィックを 1 つまたは複数のリードレプリカに割り振ることができます。

  • ソース DB インスタンスが利用可能でない場合に読み込みトラフィックを誘導します。ソース DB インスタンスが入出力リクエストを取得できない場合 (バックアップまたは定期メンテナンスによる入出力一時停止などのため)、読み込みトラフィックをリードレプリカに誘導することができます。このようなユースケースの場合、ソース DB インスタンスを利用できないため、リードレプリカのデータは「古い」場合があるため注意が必要です。

  • ビジネスレポーティングまたはデータウェアハウジングでは、プライマリ本稼働 DB インスタンスではなく、ビジネスレポーティングクエリをリードレプリカに対して実行します。

  • 災害復旧の実装。ソース DB インスタンスで障害が発生した場合、リードレプリカを災害対策ソリューションとしてスタンドアロンインスタンスに昇格できます。

デフォルトでは、ソース DB インスタンスと同じストレージタイプのリードレプリカが作成されます。ただし、次の表に示すオプションに基づいて、ソース DB インスタンスの別のストレージタイプを持つリードレプリカを作成することもできます。

ソース DB インスタンスのストレージタイプ ソース DB インスタンスのストレージ割り当て リードレプリカのストレージタイプオプション
PIOPS 100 GiB – 3 TiB PIOPS、GP2、Standard
GP2 100 GiB – 3 TiB PIOPS、GP2、Standard
GP2 100 GiB 未満 GP2、Standard
Standard 100 GiB – 3 TiB PIOPS、GP2、Standard
Standard 100 GiB 未満 GP2、Standard

Amazon RDS では、循環レプリケーションはサポートされません。既存の DB インスタンスへのレプリケーションソースとして機能するように DB インスタンスを構成することはできません。既存の DB インスタンスから新しいリードレプリカを作成することのみ可能です。たとえば、MyDBInstance が ReadReplica1 にレプリケートされる場合、MyDBInstance に再度レプリケートされるように ReadReplica1 を設定することはできません。ReadReplica1 からは、ReadReplica2 などの新しいリードレプリカを作成できます。

PostgreSQL リードレプリカと MySQL または MariaDB リードレプリカの違い

PostgreSQL DB エンジンと MySQL および MariaDB DB エンジンのレプリケーションの実装方法は異なるため、大きな違いがいくつかあります。次の表を参照してください。

機能または動作 PostgreSQL MySQL と MariaDB

レプリケーション方法

物理レプリケーション。

論理レプリケーション。

トランザクションログの消去方法

PostgreSQL にはパラメータ wal_keep_segments があり、これによって、データをリードレプリカに提供するために保持する先書きログ (WAL) ファイルの数が決まります。パラメータ値は、保持するログの数を指定します。

Amazon RDS では、適用されていないバイナリログは維持されます。

レプリカを書き込み可能にできるか

いいえ。PostgreSQL リードレプリカは物理的なコピーであり、PostgreSQL ではリードレプリカを書き込み可能にすることはできません。

はい。 MySQL または MariaDB リードレプリカは書き込み可能にすることができます。

レプリカでバックアップを実行できるか

はい、PostgreSQL リードレプリカの手動スナップショットを作成できますが、自動バックアップは実行できません。

はい。MySQL または MariaDB リードレプリカでは、自動バックアップを実行できます。

並列レプリケーションを使用できるか

いいえ。PostgreSQL は単一プロセスでレプリケーションを処理します。

はい。MySQL バージョン 5.6 以降および MariaDB のサポートされているすべてのバージョンで、並行レプリケーションのスレッドが可能です。

リードレプリカの作成

AWS マネジメントコンソール、AWS CLI、または AWS API を使用して、既存の MySQL、MariaDB、または PostgreSQL DB インスタンスからリードレプリカを作成できます。リードレプリカは、レプリケーション元のソース DB インスタンスの DB インスタンス識別子である SourceDBInstanceIdentifier を指定することで作成できます。

リードレプリカを作成すると、Amazon RDS はソース DB インスタンスの DB スナップショットを取得し、レプリケーションを開始します。その結果、DB スナップショットを作成する間、ソース DB インスタンスに短期間の I/O 停止が発生します。I/O 停止は通常、約 1 分間続きます。ソース DB インスタンスがマルチ AZ 配置の場合は、I/O 停止を回避できます。スナップショットがセカンダリ DB インスタンスから取得されるためです。アクティブな長時間実行トランザクションの場合、リードレプリカの作成プロセスに時間がかかることがあります。長時間実行トランザクションが完了してから、リードレプリカを作成することをお勧めします。同じソース DB インスタンスから複数のリードレプリカを同時に作成する場合、Amazon RDS は初回の作成アクションの開始時にスナップショットを 1 つだけ取得します。

リードレプリカを作成するときは、いくつかの考慮事項があります。最初に、バックアップ保持期間を 0 以外の値に設定することで、ソース DB インスタンスで自動バックアップを有効にする必要があります。この要件は、別のリードレプリカのソース DB インスタンスであるリードレプリカにも適用されます。MySQL DB インスタンスの場合、自動バックアップは、MySQL 5.6 (MySQL バージョン 5.5 は対象外) を実行するリードレプリカでのみサポートされます。Amazon RDS MySQL バージョン 5.6 以降のリードレプリカで自動バックアップを有効にするには、まずリードレプリカを作成し、次にこのリードレプリカを変更して自動バックアップを有効にします。

AWS マネジメントコンソール

異なる AWS リージョンでソースの MySQL、MariaDB、または PostgreSQL DB インスタンスからリードレプリカを作成するには、

  1. AWS マネジメントコンソールにサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[インスタンス] を選択します。

  3. [Instances] ペインで、リードレプリカのソースとして使用する MySQL、MariaDB、または PostgreSQL DB インスタンスを選択します。

  4. [インスタンスの操作] で [リードレプリカの作成] を選択します。

  5. 使用するインスタンス仕様を選択します。リードレプリカでもソース DB インスタンスと同じ DB インスタンスクラスとストレージタイプを使用することをお勧めします。[Multi-AZ deployment] で [Yes] を選択して、レプリカのフェイルオーバーをサポートするために別のアベイラビリティーゾーンにレプリカのスタンバイを作成します。リードレプリカをマルチ AZ DB インスタンスとして作成することは、ソースデータベースがマルチ AZ DB インスタンスであるかどうかに関係なく行われます。

  6. 使用する設定を選択します。[DB インスタンス識別子] にリードレプリカの名前を入力します。必要に応じて他の設定を変更します。

  7. 使用する他の設定を選択します。

  8. [Create read replica] を選択します。

CLI

ソース MySQL、MariaDB、または PostgreSQL DB インスタンスからリードレプリカを作成するには、AWS CLI の create-db-instance-read-replica コマンドを使用します。

Linux、OS X、Unix の場合:

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

Windows の場合:

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 を呼び出します。

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 リードレプリカをスタンドアロンの DB インスタンスに昇格させることができます。リードレプリカを昇格させると、使用可能になる前に DB インスタンスが再起動されます。

リードレプリカをスタンドアロン DB インスタンスに昇格させるのには、いくつかの理由があります。

  • DDL 操作の実行(MySQL および MariaDB のみ) – インデックスの作成や再構築などの DDL 操作には時間がかかることがあり、DB インスタンスのパフォーマンスが大幅に低下する可能性があります。リードレプリカがソース DB インスタンスと同期されたら、MySQL、または MariaDB リードレプリカでこれらの操作を実行できます。次に、リードレプリカを昇格させ、昇格されたインスタンスを使用するようにアプリケーションに指示できます。

  • シャーディング – シャーディングでは、「share-nothing」アーキテクチャを採用しており、基本的に大きいデータベースが複数の小さいデータベースに分割されます。データベースを分割する一般的な方法としては、同じクエリに結合されていないテーブルを切り離して別のホスト上に配置します。別の方法としては、複数のホスト間でテーブルを複製し、ハッシュアルゴリズムを使用してどのホストで特定の更新を受け取るかを指定します。各シャード (小さいデータベース) に対応するリードレプリカを作成し、スタンドアロンシャードに変換することを決定したら昇格させることができます。次に、要件に応じて、各シャードのテーブルのキースペース (行を分割する場合) または分布を分割できます。

  • 障害復旧の実装 – ソース DB インスタンスに障害が発生した場合は、リードレプリカの昇格をデータ復旧スキーマとして使用できます。このアプローチは、同期的なレプリケーション、自動障害検出、フェイルオーバーを補完します。

    非同期レプリケーションの影響と制限を承知の上で、データ復旧にリードレプリカの昇格が必要と判断した場合に限り、昇格を行ってください。これを行うには、最初にリードレプリカを作成し、次にソース DB インスタンスで障害をモニタリングします。障害が発生した場合、以下の作業を行います。

    1. リードレプリカを昇格させます。

    2. 昇格された DB インスタンスにデータベーストラフィックを向けます。

    3. 昇格された DB インスタンスとの置き換えリードレプリカをソースとして作成します。

リードレプリカを昇格させると、作成された新しい DB インスタンスでは、前のリードレプリカソースのバックアップ保持期間、バックアップウィンドウ、パラメータグループが引き継がれます。リードレプリカのサイズによっては、昇格プロセスが完了するまで数分以上かかる場合があります。リードレプリカを新しい DB インスタンスに昇格させると、他の DB インスタンスと同等になります。たとえば、新しい DB インスタンスを マルチ AZ DB インスタンスに変換し、そこからリードレプリカを作成して、特定時点への復元オペレーションを実行できます。昇格された DB インスタンスはリードレプリカではなくなったため、レプリケーションターゲットとしては使用できません。ソース DB インスタンスに複数のリードレプリカがある場合、いずれかのリードレプリカを DB インスタンスに昇格させても、他のレプリカには影響が及びません。

バックアップ期間は、以前のバックアップ以降のデータベースに対する変更量の関数です。リードレプリカをスタンドアロンインスタンスに昇格させる場合は、昇格する前にバックアップを有効にし、少なくとも 1 つのバックアップを完了することをお勧めします。また、backing-up の状態にある場合、リードレプリカをスタンドアロンインスタンスに昇格させることはできません。リードレプリカでバックアップを有効にしている場合は、自動バックアップウィンドウを構成して、毎日のバックアップがリードレプリカの昇格を妨げないようにします。

以下のステップは、DB インスタンスにリードレプリカを昇格させる一般的なプロセスを示しています。

  1. リードレプリカソース DB インスタンスへのトランザクションの書き込みを停止し、すべての更新がリードレプリカに加えられるまで待ちます。データベース更新は、ソース DB インスタンスで行われた後にリードレプリカで行われるため、このレプリケーションは大幅に遅延する場合があります。「レプリカラグ」メトリックを使用して、リードレプリカにすべての更新がいつ加えられたかを確認できます。

  2. MySQL および MariaDB のみ) MySQL または MariaDB リードレプリカに変更を加えるには、リードレプリカの DB パラメータグループで read_only パラメータを 0 に設定する必要があります。次に、インデックスの作成など、必要なすべての DDL 操作をリードレプリカで実行します。リードレプリカで実行されたアクションは、ソース DB インスタンスのパフォーマンスには影響しません。

  3. Amazon RDS コンソールの [リードレプリカの昇格] オプション、AWS CLI コマンドの promote-read-replica、または Amazon RDS API オペレーションの PromoteReadReplica を使用して、リードレプリカを昇格させます。

    注記

    昇格プロセスの完了までには数分かかります。リードレプリカを昇格させると、レプリケーションが停止され、リードレプリカが再起動されます。再起動が完了すると、リードレプリカは新しい DB インスタンスとして使用可能になります。

  4. (オプション) 新しい DB インスタンスをマルチ AZ 配置に変更します。詳細については、「Amazon RDS DB インスタンスを変更し、Apply Immediately パラメータを使用する」および「Amazon RDS での高可用性 (マルチ AZ)」を参照してください。

AWS マネジメントコンソール

リードレプリカを DB インスタンスに昇格させるには

  1. AWS マネジメントコンソールにサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. Amazon RDS コンソールで、[Instances] を選択します。

    [Instance] ペインが表示されます。各リードレプリカには、[レプリケーションロール] 列に [レプリカ] があります。

  3. [インスタンス] ペインで、昇格させるリードレプリカを選択します。

  4. [Instance actions]、[Promote read replica] の順に選択します。

  5. [Promote Read Replica] ページで、昇格された新しい DB インスタンスのバックアップ保持期間とバックアップウィンドウを入力します。

  6. すべての設定が正しいことを確認したら、[Continue] を選択します。

  7. 確認ページで、[Promote Read Replica] を選択します。

CLI

リードレプリカを DB インスタンスに昇格させるには、AWS CLI promote-read-replica コマンドを使用します。

Linux、OS X、Unix の場合:

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

Windows の場合:

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

API

リードレプリカを DB インスタンスに昇格させるには、PromoteReadReplica を呼び出します。

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>

別の AWS リージョンでのリードレプリカの作成

Amazon RDS を使用すると、MySQL、PostgreSQL、または MariaDB リードレプリカをソース DB インスタンスとは異なる AWS リージョンに作成できます。リードレプリカを作成して、次を行います。

  • 災害対策機能が向上します。

  • 読み取りオペレーションをユーザーに近い AWS リージョン内にスケールします。

  • 特定の AWS リージョンのデータセンターから別の AWS リージョンのデータセンターへの移行を容易にします。

MySQL、PostgreSQL、または MariaDB リードレプリカをソースインスタンスとは異なる AWS リージョンで作成する作業は、同一 AWS リージョン内でレプリカを作成する作業に似ています。複数のリージョンにわたるリードレプリカを作成するには、AWS マネジメントコンソール を使用するか、[create-db-instance-read-replica] コマンドを実行するか、または [CreateDBInstanceReadReplica] API アクションを呼び出すことができます。

ソース DB インスタンスとは異なる AWS リージョンに暗号化されたリードレプリカを作成するには、ソース DB インスタンスを暗号化する必要があります。

異なる AWS リージョンでソース MySQL、MariaDB、または PostgreSQL DB インスタンスからリードレプリカを作成する方法を以下に示します。

AWS マネジメントコンソール

AWS マネジメントコンソール を使用して、複数のリージョンにわたるリードレプリカを作成できます。

複数のリージョンにわたるリードレプリカをコンソールで作成するには

  1. AWS マネジメントコンソール にサインインして、Amazon RDS で https://console.aws.amazon.com/rds/ コンソールを開きます。

  2. ナビゲーションペインで、[インスタンス] を選択します。

  3. [Instances] ペインで、リードレプリカのソースとして使用する MySQL、MariaDB、または PostgreSQL DB インスタンスを選択し、[インスタンスの操作] から [リードレプリカの作成] を選択します。暗号化されたリードレプリカを作成するには、ソース DB インスタンスを暗号化する必要があります。DB インスタンスの暗号化については、「Amazon RDS リソースの暗号化」を参照してください。

  4. 使用するインスタンス仕様を選択します。リードレプリカでも同じ DB インスタンスクラスとストレージタイプを使用することをお勧めします。

  5. 使用する他の設定を選択します。

    • [DB インスタンス識別子] にリードレプリカの名前を入力します。

    • [Network & Security(ネットワーク & セキュリティ)] セクションでは、[Designation Region(リージョンの指定)] および [Designation DB Subnet Group(DB サブネットグループの指定)] の値を選択します。

    • 暗号化されたリードレプリカを別の AWS リージョンに作成するには、[暗号を有効化]、[マスターキー] の順に選択します。[マスターキー] で、作成先の AWS リージョンの KMS キー識別子を選択します。

    • 使用する他の設定を選択します。

  6. [Create read replica] を選択します。

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-1:123456789012:db:my-mysql-instance

ARN の詳細については、「Amazon RDS の Amazon リソースネーム (ARN) の使用」を参照してください。

ソース DB インスタンスとは異なる AWS リージョンに暗号化されたリードレプリカを作成するには、目的の AWS リージョンで AWS CLI コマンド create-db-instance-read-replica を使用します。別の AWS リージョンに暗号化されたリードレプリカを作成するには、次のパラメータを使用します。

  • --source-region — 暗号化されたリードレプリカを作成する AWS リージョン。source-region を指定しない場合、pre-signed-url の値を指定する必要があります。pre-signed-url は、リードレプリカの作成元の AWS リージョンで呼び出す CreateDBInstanceReadReplica アクションに対する、署名バージョン 4 で署名されたリクエストを含む URL です。pre-signed-url の詳細については、「CreateDBInstanceReadReplica」を参照してください。

  • --source-db-instance-identifier — 作成済みの暗号化されたリードレプリカの DB インスタンス識別子。この識別子は、作成先の AWS リージョンの ARN 形式である必要があります。source-db-instance-identifier で指定した AWS リージョンは、source-region として指定した AWS リージョンと一致している必要があります。

  • --db-instance-identifier — 作成先の AWS リージョンの暗号化されたリードレプリカの識別子。

  • --kms-key-id — 作成先の AWS リージョンでリードレプリカの暗号化に使用するキーの AWS KMS キー識別子。

次のコードでは、us-west-2 リージョンにリードレプリカが作成されます。

Linux、OS X、Unix の場合:

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 の場合:

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 コマンドを呼び出す AWS リージョンは、暗号化されたリードレプリカの作成先の AWS リージョンです。

Linux、OS X、Unix の場合:

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 \ --source-region us-east-1 \ --kms-key-id my-us-east-1-key

Windows の場合:

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 ^ --source-region us-east-1 ^ --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 リージョンに暗号化されたリードレプリカを作成するには、目的の AWS リージョンで Amazon RDS API の CreateDBInstanceReadReplica アクションを使用できます。暗号化されたリードレプリカを別の AWS リージョンに作成するには、PreSignedURL の値を指定する必要があります。PreSignedURL には、リードレプリカの作成先 AWS リージョンで呼び出す CreateDBInstanceReadReplica アクションのリクエストが含まれている必要があります。PreSignedUrl の詳細については、「CreateDBInstanceReadReplica」を参照してください。

たとえば、ソース DB インスタンスが 米国東部(バージニア北部) リージョンにある場合、ARN は以下のような内容です。

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

ARN の詳細については、「Amazon RDS の Amazon リソースネーム (ARN) の使用」を参照してください。

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-east-1: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>

クロスリージョンレプリケーションの考慮事項

AWS リージョン内でレプリケーションを実行する際のすべての考慮事項は、クロスリージョンレプリケーションに適用されます。リージョン間のレプリケーションには、他にも次の考慮事項が適用されます。

  • MariaDB、PostgreSQL (バージョン 9.4.7 および 9.5.2 以降)、または MySQL 5.6 以降の Amazon RDS DB インスタンスを使用している場合は、リージョン間でのレプリケーションのみが可能です。

  • ソース DB インスタンスでは、複数のリージョンにクロスリージョンリードレプリカを作成できます。

  • 別の Amazon RDS DB インスタンスのリードレプリカでないソース Amazon RDS DB インスタンスからのみ、クロスリージョン Amazon RDS リードレプリカを作成できます。

  • AWS GovCloud (US-West) リージョンとの間にレプリケーションチャネルをセットアップすることはできません。

  • ソースインスタンスとは異なる AWS リージョンにあるリードレプリカは、リージョンのデータセンター間のネットワークチャネルが長くなるため、遅延時間が長くなりがちです。

  • AWS リージョン内では、同じソース DB インスタンスから作成されたすべてのクロスリージョンリードレプリカが、同じ Amazon VPC 内または VPC 外に存在する必要があります。クロスリージョンリードレプリカでは、--db-subnet-group-name パラメータを指定する Create Read Replica コマンドのいずれかで、同じ VPC の DB サブネットグループを指定する必要があります。

  • 別のリージョンの VPC 内のソース DB インスタンスから、VPC にクロスリージョンリードレプリカを作成できます。VPC にないソース DB インスタンスから、VPC にクロスリージョンリードレプリカを作成することもできます。VPC 内のソース DB インスタンスから、VPC 外にクロスリージョンリードレプリカを作成することもできます。

  • VPC のアクセスコントロールリスト (ACL) のエントリ数に制限があるため、5 つを超えるクロスリージョンリードレプリカのインスタンスについては保証されません。

クロスリージョンレプリケーションのコスト

クロスリージョンレプリケーションから転送されたデータには、Amazon RDS のデータ転送料金が発生します。以下のクロスリージョンレプリケーションアクションでは、ソース AWS リージョン外に転送されるデータに対して料金が発生します。

  • リードレプリカを作成すると、Amazon RDS によりソースインスタンスのスナップショットが取得され、リードレプリカリージョンにスナップショットが転送されます。

  • ソースデータベースのデータが変更されるたびに、Amazon RDS で作成元の AWS リージョンからリードレプリカリージョンにデータが転送されます。

データ転送料金の詳細については、「Amazon RDS 料金表」を参照してください。

MySQL および MariaDB インスタンスの場合、作成するクロスリージョンリードレプリカの数を減らすことで、データ転送コストを削減できます。たとえば、1 つの AWS リージョンにソース DB インスタンスがあり、別の AWS リージョンに 3 つのリードレプリカが必要であるとします。この場合、ソース DB インスタンスからリードレプリカを 1 つのみ作成します。他の 2 つのレプリカは、ソース DB インスタンスからではなく、最初のリードレプリカから作成します。

たとえば、ある AWS リージョンに source-instance-1 がある場合は、以下の操作を行います。

  • ソースとして read-replica-1 を指定し、新しい AWS リージョンに source-instance-1 を作成します。

  • read-replica-2 から read-replica-1 を作成します。

  • read-replica-3 から read-replica-1 を作成します。

この例では、source-instance-1 から read-replica-1 に転送されるデータ対してのみ課金されます。read-replica-1 から他の 2 つのレプリカに転送されたデータには課金されません。すべて同じ AWS リージョンにあるためです。3 つのレプリカをすべて source-instance-1 から直接作成した場合、3 つのレプリカすべてへのデータ転送に課金されます。

Amazon RDS でのクロスリージョンレプリケーションのしくみ

Amazon RDS は、次のプロセスを使用してクロスリージョンリードレプリカを作成します。関係するリージョンとデータベースのデータ量によっては、このプロセスは完了までに数時間かかることがあります。クロスリージョンリードレプリカを作成する際、この情報を使用してプロセスの進行状況を確認できます。

  1. Amazon RDS は、ソース DB インスタンスをレプリケーションソースとして設定し始め、ステータスを modifying に設定します。

  2. Amazon RDS は、転送先 AWS リージョンで指定されたリードレプリカをセットアップし始め、ステータスを creating に設定します。

  3. Amazon RDS は、作成元の AWS リージョンでソース 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 スナップショットページの進行状況列には、DB スナップショット作成の進行状況が報告されます。DB スナップショットが完成すると、DB スナップショットとソース DB インスタンスの両方のステータスが available に設定されます。

  4. Amazon RDS は、初期データ転送用のクロスリージョンスナップショットコピーを開始します。スナップショットコピーは、転送先 AWS リージョンの自動スナップショットとして、creating のステータスで一覧表示されます。名前はソース DB スナップショットと同じです。DB スナップショットの進行状況列には、コピーの進行状況が示されます。コピーが完了すると、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 メトリクスでは、Seconds_Behind_Master コマンドの SHOW SLAVE STATUS フィールドの値がレポートされます。PostgreSQL の場合、ReplicaLag メトリクスでは SELECT extract(epoch from now() - pg_last_xact_replay_timestamp()) AS slave_lag の値がレポートされます。

    MySQL と MariaDB のレプリケーション遅延の一般的な原因は以下のとおりです。

    • ネットワークが停止している。

    • リードレプリカで、インデックスがあるテーブルに書き込んでいる。read_only パラメータがリードレプリカで 0 に設定されていない場合、レプリケーションが中断されることがあります。

    • MyISAM などの非トランザクションストレージエンジンを使用している。レプリケーションは、MariaDB の MySQL および InnoDB ストレージエンジンの XtraDB ストレージエンジンでのみサポートされます。

    ReplicaLag メトリックが 0 に達すると、レプリカがソース DB インスタンスに追いついています。ReplicaLag メトリックにより -1 が返された場合、レプリケーションは現在アクティブではありません。ReplicaLag​ = -1 は Seconds_Behind_Master = NULL と同等です。

    PostgreSQL (バージョン 9.4.7 と 9.5.2 以降) は、ソース インスタンスでの先書きログ (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 の場合:

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 の場合:

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 の場合:

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 の場合:

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 コンソールは、リードレプリカの詳細の [可用性と耐久性] セクションにリードレプリカのステータスを表示します。リードレプリカの詳細を表示するには、Amazon RDS コンソールのインスタンスのリストでリードレプリカの名前をクリックします。


                リードレプリカのステータス

AWS CLI describe-db-instances コマンドまたは Amazon RDS API DescribeDBInstances アクションを使用して、リードレプリカのステータスを確認することもできます。

リードレプリカのステータスは、以下のいずれかです。

  • replicatingリードレプリカが正常にレプリケーションされています。

  • errorレプリケーションでエラーが発生しました。Amazon RDS コンソールの [Replication Error] またはイベントをログを確認して、正確なエラーについて調べます。レプリケーションエラーのトラブルシューティングの詳細については、「MySQL リードレプリカに関する問題のトラブルシューティング」を参照してください。

  • terminatedレプリケーションは終了しました。これは、手動またはレプリケーションエラーによってレプリケーションが連続する 30 日超停止した場合に発生します。この場合、マスター DB インスタンスでストレージ要件が高まることとフェイルオーバー時間が長くなることを防ぐため、Amazon RDS はマスター DB インスタンスとすべてのリードレプリカの間のレプリケーションを終了します。

    レプリケーションが中断すると、ログに書き込まれるエラーメッセージの量が増えてログのサイズと数が増加するため、ストレージに影響が及ぶ可能性があります。さらに、レプリケーションが中断すると、Amazon RDS が復旧中に大量のログを保持して処理するのに必要な時間が原因で、災害対策にも影響が及ぶ可能性があります。

  • stopped (MySQL または MariaDB のみ)—お客様がリクエストを開始したため、レプリケーションが停止しました。

  • replication stop point set (MySQL のみ)—お客様が開始した停止ポイントは mysql.rds_start_replication_until ストアドプロシージャを使用して設定され、レプリケーションが進行中です。

  • replication stop point reached (MySQL のみ)—お客様が開始した停止ポイントは mysql.rds_start_replication_until ストアドプロシージャを使用して設定され、レプリケーションは停止ポイントに到達したために停止しました。