DB インスタンスのリードレプリカの操作 - Amazon Relational Database Service

DB インスタンスのリードレプリカの操作

リードレプリカは、DB インスタンスの読み取り専用コピーです。クエリをアプリケーションからリードレプリカにルーティングすることにより、プライマリ DB インスタンスの負荷を軽減できます。こうすることにより、単一 DB インスタンスの容量制約にとらわれることなく伸縮自在にスケールアウトし、読み取り負荷の高いデータベースワークロードに対応できます。

ソース DB インスタンスからリードレプリカを作成するには、Amazon RDS では、DB エンジン組み込みのレプリケーション機能を使用します。特定のエンジンでのリードレプリカの使用については、以下のセクションを参照してください。

ソース DB インスタンスからリードレプリカを作成すると、ソースがプライマリ DB インスタンスになります。プライマリ DB インスタンスに対して更新を行うと、Amazon RDS はリードレプリカに非同期的にコピーします。次の図は、ソース DB インスタンスが別のアベイラビリティーゾーン (AZ) のリードレプリカにレプリケートされる様子を示しています。クライアントにはプライマリ DB インスタンスへの読み取り/書き込みアクセス権、およびレプリカへの読み取り専用アクセス権があります。

リードレプリカの設定

リードレプリカは、レプリカに使用される DB インスタンスクラスと同じレートで標準 DB インスタンスとして請求されます。同じ AWS リージョン 内のソース DB インスタンスとリードレプリカ間のデータのレプリケーションで発生したデータ転送に対しては課金されません。詳細については、クロスリージョンレプリケーションのコストおよびAmazon RDS 向け DB インスタンスの請求を参照してください。

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

次のセクションでは、DB インスタンスのリードレプリカについて説明します。マルチ AZ DB クラスターのリードレプリカについては、「Amazon RDS のマルチ AZ DB クラスターのリードレプリカの操作」を参照してください。

リードレプリカのユースケース

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

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

  • ソース DB インスタンスが利用可能でない場合に読み込みトラフィックを誘導します。場合によっては、バックアップまたは予定される保守による I/O 停止により、ソース DB インスタンスで I/O リクエストを取得できないことがあります。このような場合は、リードトラフィックをリードレプリカに誘導することができます。このようなユースケースの場合、ソース DB インスタンスを利用できないため、リードレプリカのデータは「古い」場合があるので注意が必要です。

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

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

リードレプリカの仕組み

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

リードレプリカは、読み取り専用接続のみ許可される DB インスタンスとして動作します。例外は、RDS for Oracle DB エンジンで、これはマウントモードでレプリカデータベースをサポートします。マウントされたレプリカはユーザー接続を受け付けないため、読み取り専用のワークロードに対応できません。マウントされたレプリカの主な用途は、クロスリージョンの災害対策です。詳細については、「Amazon RDS for Oracle でのリードレプリカの使用」を参照してください。

アプリケーションは、DB インスタンスの場合と同じ方法でリードレプリカに接続します。Amazon RDS では、ソース DB インスタンスからのすべてのデータベースがレプリケートされます。

マルチ AZ 配置のリードレプリカ

マルチ AZ 配置で高可用性を持つように設定されたスタンバイレプリカもある DB インスタンスのリードレプリカを設定できます。スタンバイレプリカとのレプリケーションは同期的です。リードレプリカとは異なり、スタンバイレプリカは読み取りトラフィックを処理できません。

次のシナリオでは、クライアントは 1 つの AZ のプライマリ DB インスタンスへの読み取り/書き込みアクセス権を持っています。プライマリインスタンスは、更新を 2 番目の AZ のリードレプリカに非同期でコピーし、さらに 3 番目の AZ のスタンバイレプリカにも同期的にコピーします。クライアントはリードレプリカに対してのみ読み取りアクセス権を持ちます。

リードレプリカとスタンバイレプリカの設定

高可用性レプリカとスタンバイレプリカの詳細については、「Amazon RDS でのマルチ AZ 配置の設定と管理」を参照してください。

クロスリージョンリードレプリカ

リードレプリカは、そのプライマリ DB インスタンスとは異なる AWS リージョン に存在する場合があります。このような場合、Amazon RDS によりプライマリ DB インスタンスとリードレプリカ間の安全な通信チャネルが設定されます。Amazon RDS では、セキュリティグループエントリの追加など、安全なチャネルを有効にするために必要な AWS のセキュリティ設定を確立できます。クロスリージョンリードレプリカの詳細については、「別の AWS リージョン でのリードレプリカの作成」を参照してください。

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

DB エンジンのリードレプリカ間の違い

Amazon RDS DB エンジンによるレプリケーションの実装方法は異なるため、知っておくべき大きな違いがいくつかあります。詳細を以下のテーブルに示します。

機能または動作 MySQL と MariaDB Oracle PostgreSQL SQL Server

レプリケーション方法

論理レプリケーション。

物理レプリケーション。

物理レプリケーション。

物理レプリケーション。

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

RDS for MySQL および RDS for MariaDB では、適用されていないバイナリログは維持されます。

プライマリ DB インスタンスにクロスリージョンのリードレプリカがない場合、Amazon RDS for Oracle は、ソース DB インスタンスで最低 2 時間のトランザクションログを保持します。2 時間後、またはアーカイブログの保持時間設定のいずれか長い方の時間が経過すると、ログはソース DB インスタンスから削除されます。ログがデータベースに正常に適用された場合にのみ、アーカイブログの保持時間設定が経過すると、ログはリードレプリカから削除されます。

プライマリ DB インスタンスには、1 つ以上のクロスリージョンのリードレプリカが存在する場合があります。その場合 Amazon RDS for Oracle は、ソース DB インスタンスのトランザクションログが転送され、すべてのクロスリージョンリードレプリカに適用されるまで保持します。

アーカイブログの保持時間の設定については、「アーカイブ REDO ログの保持」を参照してください。

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

プライマリレプリカのトランザクションログファイルの仮想ログファイル (VLF) は、セカンダリレプリカで不要になったら切り捨てることができます。

VLF は、レプリカでログレコードがハードニングされている場合にのみ非アクティブとしてマークできます。プライマリレプリカ内でのディスクサブシステムの速度に関係なく、トランザクションログは、最も遅いレプリカで強化されるまで VLF を保持します。

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

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

いいえ。Oracle リードレプリカは物理的なコピーであり、Oracle ではリードレプリカでの書き込みは許可されていません。リードレプリカを昇格させて書き込み可能にすることができます。昇格したリードレプリカには、昇格をリクエストされた時点までのレプリケートされたデータがあります。

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

いいえ。SQL Server リードレプリカは物理コピーであり、同様に書き込み可能にすることはできません。リードレプリカを昇格させて書き込み可能にすることができます。昇格したリードレプリカには、昇格をリクエストされた時点までのレプリケートされたデータがあります。

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

はい。自動バックアップと手動スナップショットは、RDS for MySQL または RDS for MariaDB のリードレプリカでサポートされています。

はい。RDS for Oracle リードレプリカでは、自動バックアップと手動スナップショットがサポートされています。

はい、RDS for PostgreSQL リードレプリカの手動スナップショットは作成できます。リードレプリカの自動バックアップは、RDS for PostgreSQL 14.1 以降のバージョンでのみサポートされます。RDS for PostgreSQL 14.1 より前のバージョンの PostgreSQL リードレプリカでは、自動バックアップをオンにすることはできません。RDS for PostgreSQL 13 以前のバージョンでバックアップが必要な場合は、リードレプリカのスナップショットを作成します。

いいえ。 RDS for SQL Server のリードレプリカでは、自動バックアップと手動スナップショットはサポートされていません。

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

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

はい。REDO ログデータは、常にプライマリデータベースからそのすべてのリードレプリカに並行して転送されます。

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

はい。REDO ログデータは、常にプライマリデータベースからそのすべてのリードレプリカに並行して転送されます。

レプリカは、読み取り専用ではなくマウント状態で維持できるか

いいえ。

はい。マウントされたレプリカの主な用途は、クロスリージョンの災害対策です。マウントされたレプリカには、Active Data Guard ライセンスは必要ありません。詳細については、「Amazon RDS for Oracle でのリードレプリカの使用」を参照してください。

いいえ。

いいえ。

リードレプリカのストレージタイプ

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

ソース DB インスタンスストレージのタイプ ソース DB インスタンスストレージの割り当て リードレプリカのストレージタイプのオプション
プロビジョンド IOPS 100 GiB - 64 TiB プロビジョンド IOPS、汎用、マグネティック
汎用 100 GiB - 64 TiB プロビジョンド IOPS、汎用、マグネティック
汎用 100 GiB 未満 汎用、マグネティック
マグネティック 100 GiB~6 TiB プロビジョンド IOPS、汎用、マグネティック
マグネティック 100 GiB 未満 汎用、マグネティック
注記

リードレプリカの割り当て済みストレージを増やす場合は、少なくとも 10% にする必要があります。10 パーセントに満たない単位で増やそうとすると、エラーになります。

レプリカからレプリカを作成する場合の制限事項

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

MariaDB および RDS for MySQL、そして RDS for PostgreSQL の特定のバージョンでは、既存のリードレプリカからリードレプリカを作成することができます。例えば、既存のレプリカ ReadReplica1 から新しいリードレプリカ ReadReplica2 を作成できます。RDS for Oracle および RDS for SQL Server では、既存のリードレプリカからリードレプリカを作成することはできません。

レプリカを削除する際の注意事項

リードレプリカが不要になった場合は、DB インスタンスを削除するのと同じメカニズムを使用して、リードレプリカを明示的に削除できます。同じ AWS リージョン のリードレプリカを削除せずにソース DB インスタンスを削除すると、各リードレプリカはスタンドアロン DB インスタンスに昇格されます。DB インスタンスの削除については、「DB インスタンスを削除する」を参照してください。リードレプリカの昇格の詳細については、「リードレプリカをスタンドアロン DB インスタンスに昇格させる」を参照してください。

クロスリージョンリードレプリカがある場合、そのソース DB インスタンスの削除について、「クロスリージョンレプリケーションに関する考慮事項」を参照してください。