Amazon Web Services ブログ

Oracle Active Data Guard を使用した Amazon RDS for Oracle によるマネージド障害復旧とマネージドリーダーファーム



多くの AWS ユーザーは、Amazon Relational Database Service (Amazon RDS) ポートフォリオのマネージドデータベース製品を利用して、日々の活動から均一な重労働を多く取り除いています。Amazon RDS for Oracle を使って、Oracle データベースの管理と保守にかかる管理費用を大幅に削減できます。

Amazon RDS for Oracle は、マルチ AZ 配置オプションを提供し、特定の AWS リージョン内のデータベース (DB) インスタンスの可用性と耐久性を強化しています。これは、多くの場合、ほとんどの顧客ユースケースに効果的な障害復旧 (DR) ソリューションです。ただし、ミッションクリティカルなデータベースを実行している一部のお客様は、異なる AWS リージョンにまたがる DR 構成のビジネス要件を抱えています。同時に、これらのお客様は DR への投資を活用して、本番環境の読み取りワークロードの一部を処理できることを望んでいます。

現在、Amazon RDS for Oracle のセルフマネージド DR ソリューションは、次のいずれかを使用して実装できます。

Amazon RDS for Oracle でリージョン内およびクロスリージョンのリードレプリカがサポートされているため、Oracle Active Data Guard を使用してレプリカを簡単に作成できます。この記事では、Amazon RDS for Oracle リードレプリカのマネージド DR およびマネージドリーダーファーム機能について説明します。また、プライマリ DB インスタンスからの読み取りワークロードのオフロード、リーダーファームでの読み取りワークロードのスケールアウト、データの近接性など、他のユースケースも対象としています。

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

Amazon RDS for Oracle リードレプリカ (リージョン内とクロスリージョンの両方) は、プライマリと物理的スタンバイ (リードレプリカ) DB インスタンスの間で Oracle Active Data Guard を使用します。Amazon RDS for Oracle は、プライマリとリードレプリカの間の非同期 Data Guard レプリケーションを構成します。この場合、REDO Apply がアクティブな間、リードレプリカは読み取り専用モードで開かれます。プライマリインスタンスとリードレプリカ DB インスタンスは、Data Guard 最大パフォーマンスモードで動作します。これは、ログライター (LGWR) 非同期トランスポート (ASYNC) を使用し、リードレプリカ I/O (NOAFFIRM) を確認することはありません。このモードでは、生成された redo がオンライン redo ログに書き込まれると、トランザクションがすぐにコミットされます。さらに、redo はリードレプリカの redo ログに非同期で書き込まれます。このソリューションは、プライマリ DB インスタンスのパフォーマンスに影響を与えることなく、可能な限り最高レベルのデータ保護を提供します。

データベースのワークロードとそれが生成する redo ログの量に応じて、RPO と RTO を 1 桁で実現できます。RDS Oracle は、プライマリレプリカとリードレプリカの間に安全な通信チャネルを作成し、セキュリティグループとアクセスコントロールリストの設定と構成を管理して、プライマリレプリカとリードレプリカ間の安全な redo 転送を可能にします。

リージョン内リードレプリカの使用例

以下は、リージョン内のリードレプリカで実現できるユースケースです。

  • 読み取りワークロードのオフロード – お客様は、読み取りワークロードをプライマリ DB インスタンスからリードレプリカ DB インスタンスにオフロードできるため、プライマリで実行される読み書きトランザクションのパフォーマンスを向上させることができます。
  • 読み取りワークロードのスケールアウト – お客様は、最大 5 つのリードレプリカのリーダーファームで読み取りワークロードをスケールアウトできます。
  • 可用性 – お客様は、特定のリードレプリカを新しいスタンドアロンデータベースとして昇格させ、プライマリ DB に障害が発生した場合の追加の可用性を実現できます。

次の図は、Amazon RDS for Oracle リージョン内リードレプリカのアーキテクチャを示しています。

クロスリージョンリードレプリカの使用例

以下は、クロスリージョンリードレプリカで実現できるユースケースです。

  • マネージド障害復旧 – マネージド DR サービスを使用すれば、別のリージョンのリードレプリカを新しいスタンドアロンの本番データベースに昇格できます。
  • データの近接性 – お客様は特定リージョンのアプリケーションユーザーの近くにレプリカを配置して、読み取りレイテンシーを短縮できます。
  • 読み取りワークロードのオフロード – お客様は、読み取りワークロードをプライマリ DB インスタンスからリードレプリカ DB インスタンスにオフロードできます。リードレプリカは、任意の AWS リージョンに配置できます。
  • 読み取りワークロードのスケールアウト – お客様は、任意の AWS リージョンに置かれている最大 5 つのリードレプリカのリーダーファームで読み取りワークロードをスケールアウトできます。

次の図は、Amazon RDS for Oracle クロスリージョンリードレプリカのアーキテクチャを示しています。

Amazon RDS コンソールでのリードレプリカの作成

Amazon RDS for Oracle リードレプリカは、DB インスタンスのパフォーマンスと耐久性を強化します。Amazon RDS は、送信元 DB インスタンスのスナップショットを使用して 2 番目の DB インスタンスを作成します。リードレプリカを有効にするには、自動バックアップを有効にし (バックアップ保持期間を 0 より大きい値に設定)、送信元 DB インスタンスに強制的にログを記録する必要があります。強制ログ記録モードを有効にするには、DB インスタンスに接続し、次のコードを入力します。

exec rdsadmin.rdsadmin_util.force_logging(p_enable => true);

リードレプリカの作成とその制限については、Oracle でのリードレプリカの制限を参照してください。

このセクションでは、クロスリージョンリードレプリカの作成について説明します。

  1. プライマリ (送信元 DB) インスタンスを作成します。
    リードレプリカの作成を説明するために、プライマリデータベースインスタンス「mydbinstance」は、以下の CLI コマンドを使用して既に AWS リージョン「us-west-2」に作成されています。

    aws rds create-db-instance \
      --db-instance-identifier mydbinstance \
      --db-name MYDB \
      --allocated-storage 20 \
      --storage-type gp2 \
      --db-instance-class db.m5.xlarge \
      --engine oracle-ee  \
      --port 1521 \
      --backup-retention-period 1 \
      --license-model byol \
      --master-user-password xxxxxxxxxxxx \
      --master-username admin \
      --engine-version 19.0.0.0.ru-2020-01.rur-2020-01.r1

    詳細については、Oracle DB インスタンスの作成および Oracle DB インスタンス上のデータベースへの接続を参照してください。
    プライマリ DB インスタンスのステータスが利用可能と表示されたら、リードレプリカを作成できます (必ず、Amazon RDS コンソールをプライマリ DB インスタンスが配置されているリージョンに切り替えてください)。

  2. Amazon RDS コンソールで [データベース] を選択します。
  3. mydbinstance を選択します。
  4. [アクション] ドロップダウンメニューで [リードレプリカの作成] を選択します。
  5. [インスタンス仕様] セクションの [DB インスタンスクラス] で、[m5.xlarge] を選択します。
  6. [マルチ AZ 配置] で、[いいえ] を選択します。
  7. [ストレージタイプ] で、[汎用 (SSD)] を選択します。
  8. [ネットワークとセキュリティ] セクションの [送信先リージョン] で、[米国東部 (バージニア北部)] を選択します。
  9. [送信先 DB サブネットグループ] で、[デフォルト] を選択します。
  10. [アベイラビリティーゾーン] で、[指定なし] を選択します。
  11. [パブリックにアクセス可能] では、[はい] を選択します。
  12. [VPC セキュリティグループ] には [デフォルト] を選択します。
  13. [設定] セクションの [リードレプリカ送信元] で、[mydbinstance] を選択します。
  14. [DB インスタンス識別子] で、mydbinstance-ro を入力します。
  15. [モニタリング] セクションの [拡張モニタリング] で、[拡張モニタリングを無効にする] を選択します。
  16. [ログのエクスポート] セクションで、すべてのログタイプの選択を解除したままにします。
  17. [Performance Insights] セクションで、[Performance Insights を無効にする] を選択します。
  18. [メンテナンス] セクションの [自動マイナーバージョンアップグレード] で、[いいえ] を選択します。
  19. [リードレプリカの作成] を選択します。
    作成が完了するまでに 10〜15 分かかります。その後、プライマリ DB インスタンスのロールが us-west-2マスターとして表示されます。
    リードレプリカのロールは、us-east-1 ではレプリカとして表示されます。

AWS CLI でのリードレプリカの作成

または AWS CLI で、あるいは create-db-instance-read-replica Amazon RDS API を使用してリードレプリカを作成することもできます。us-west-2 で実行されているプライマリ DB インスタンス (mydbinstance) を使用して us-east-1 にクロスリージョンリードレプリカ (mydbinstance-ro) を作成するには、次のコードを入力します。

aws rds create-db-instance-read-replica \
--source-db-instance-identifier arn:aws:rds:us-west-2:xxxxxxxxxx:db:mydbinstance\
--source-region us-west-2\
--db-instance-identifier mydbinstance-ro\
--region us-east-1
-- kms-key-id  kms-key-id xxxxxxxxxx: xxxxxxxxxx:

別のリージョンに暗号化されたリードレプリカを作成する場合は、送信先リージョンの AWS KMS キーを指定する必要があります。AWS KMS 暗号化キーは、作成したリージョン固有のものです。あるリージョンの暗号化キーを別のリージョンで使用することはできません。

リードレプリカへの接続

優先クライアントを使用してリードレプリカインスタンスに接続できます。この記事では、次に示すように SQL* Plus を使用しています。RDS Oracle データベースへの接続については、サンプル Oracle DB インスタンスへの接続を参照してください。

SQL* PLUS を使用してリードレプリカに接続するには、次のコードを入力します。

$ sqlplus 'admin@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= mydbinstance-ro.xxxxxxxx. us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=MYDB)))'

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> set lines 250 pages 10000
SQL> show parameter db_uniq

NAME				     	TYPE	 	VALUE
------------------------------------ -----------
db_unique_name			     string	MYDB_B

SQL> select open_mode,database_role from v$database;

OPEN_MODE	     		DATABASE_ROLE
-------------------- ----------------
READ ONLY WITH APPLY 	PHYSICAL STANDBY

リードレプリカ遅延のモニタリング

レプリケーション遅延は、Amazon CloudWatch コンソール、Amazon RDS コンソール、Oracle Enterprise Manager (OEM)、または Oracle Data Guard ビュー (v$archived_logv$dataguard_statsv$dataguard_status) でモニタリングできます。

Amazon RDS コンソールでモニタリングを行うには、[データベース] ページでリードレプリカインスタンスを選択します。

[モニタリング] タブで、レプリカの遅延を検索します。

優先クライアントを使用してリードレプリカインスタンスに接続できます。この記事では SQL 開発者を使用しています。RDS Oracle データベースへの接続については、サンプル Oracle DB インスタンスへの接続を参照してください。次のコードを参照してください。

リードレプリカインスタンスで次のクエリを実行し、Oracle Active Data Guard ビューを使用してレプリケーション遅延の詳細を確認できます。SQL 開発者を使用して admin ユーザーとして接続されたリードレプリカから取得した出力を以下に示します。

SQL>  Select * from v$standby_event_histogram where upper(name)='APPLY_LAG';

SQL> Select name,value,datum_time,time_computed from v$dataguard_stats where upper(name)='APPLY_LAG';

リードレプリカの昇格

障害が発生した場合は、次の手順を実行して、特定のクロスリージョンリードレプリカを新しいスタンドアロンの本番データベースとして昇格させます。

  1. 古い本番データベースにアクセスしているアプリケーションを停止します。
  2. 使用可能なすべての redo ログがクロスリージョンリードレプリカに適用されており、レプリケーション遅延がないことを確認してください。
  3. クロスリージョンリードレプリカを昇格させます。
  4. 新しく昇格したデータベースのリスナーエンドポイントをアプリケーションに指定します。
  5. 新しくアクティブ化されたスタンドアロンデータベースからリードレプリカを再作成します。

リードレプリカを手動で昇格するには、次の手順を実行します。

  1. [データベース] ページで、mydbinstance-ro を選択します。
  2. [アクション] ドロップダウンメニューから、[昇格] を選択します。
  3. [リードレプリカの昇格] ページの [自動バックアップを有効にする] で、[はい] を選択します。
  4. [バックアップ保持期間] では、[1 日] を選択します。
  5. [バックアップ期間] では、[指定なし] を選択します。
  6. [次へ] を選択します。
    確認ページが表示されます。
  7. [リードレプリカの昇格] を選択します。
    このプロセスには約 5 分かかります。正常に完了すると、Amazon RDS コンソールでマスターインスタンスとレプリカインスタンスのステータスを確認できます。ロールは両方ともインスタンスとして表示されます。
    必要に応じて、インスタンスと [変更] を選択することにより、DB インスタンス識別子を変更できます。

AWS CLI を介したリードレプリカの昇格

AWS CLI でリードレプリカを昇格するには、次のコードを入力します。

aws rds promote-read-replica \
 --db-instance-identifier mydbinstance-ro\

予定メンテナンス

メジャーアップグレードとマイナーアップグレードの両方で、最初にプライマリ DB インスタンスにエンジンアップグレードが適用されます。次にすべてのレプリカにエンジンアップグレードが同時に適用されます (すべてのレプリカはプライマリ DB インスタンスのメンテナンスウィンドウでアップグレードされるので、ご注意ください)。Amazon RDS for Oracle データベースエンジンのアップグレードの詳細については、Oracle DB エンジンのアップグレードを参照してください。

ライセンス要件

Amazon RDS for Oracle は、Oracle Database Enterprise エディションで独自のライセンス (BYOL) モデルを使用し、Oracle Active Data Guard オプションのライセンスを所有している場合、リージョン内とクロスリージョンの両方のリードレプリカ機能をサポートします。プライマリ DB インスタンスと各リードレプリカ DB インスタンスに対して、Oracle Enterprise エディションと Oracle Active Data Guard オプションのライセンスを取得する必要があります。

互換性

Amazon RDS for Oracle は、Oracle Enterprise エディションバージョン 12.1 (12.1.0.2.v10) 以降でこの機能をサポートしています。

請求

リードレプリカは、標準 DB インスタンスとして同じ料金が請求されます。標準 DB インスタンスと同様に、リードレプリカの DB インスタンスクラスは、DB インスタンスの毎時の料金を決定します。

クロスリージョンリードレプリカの場合、リージョン間のプライマリ DB インスタンスとリードレプリカ DB インスタンス間のデータ転送は、送信元リージョンと送信先リージョンのデータ転送速度に基づいて請求されます。インスタンスの料金、ストレージ、データ転送、およびリージョンの可用性の詳細については、Amazon RDS for Oracle の料金をご覧ください。

リードレプリカの高可用性

マルチ AZ を有効にして、リードレプリカで実行されるビジネスクリティカルなレポートワークロードの高可用性を実現できます。マルチ AZ フェイルオーバー (プライマリ環境またはリードレプリカ環境のいずれか) 時に、ソースとターゲット間の Data Guard レプリケーションが自動的に再構成されるため、介入は必要ありません。

次の CLI コードは、リードレプリカでマルチ AZ を有効にする方法を示しています。

## リードレプリカを変更: SAZ を MAZ に変換:

aws rds modify-db-instance \
 --db-instance-identifier mydbinstance-ro\
--apply-immediately\
-- multi-az

リードレプリカに使用するインスタンスクラスとストレージタイプは、プライマリと同一のものである必要はありません。たとえば、リージョン内のリードレプリカは、読み取りワークロードを処理するのに十分な、より低いインスタンスクラス、サイズ、ストレージタイプを使用できます。DR にクロスリージョンリードレプリカを使用する場合は、プライマリのインスタンスクラス、サイズ、ストレージタイプをミラーリングする必要があります。クロスリージョンリードレプリカが昇格されると、すべての本番ワークロードを処理できるようになります。

マルチ AZ とリードレプリカの使用

Amazon RDS for Oracle リードレプリカは、Amazon RDS マルチ AZ 配置を補完します。Amazon RDS マルチ AZ は高可用性とデータ保護を提供しますが、関連するリージョンのリードレプリカは読み取り専用ワークロードのスケーラビリティを提供します。クロスリージョンのリードレプリカは、読み取りスケーラビリティに加えて障害復旧を提供します。さらに、リードレプリカでビジネスクリティカルなレポートワークロードを実行する場合は、リードレプリカ DB インスタンスでマルチ AZ を有効にする必要があります。次の表では、Amazon RDS マルチ AZ と Amazon RDS for Oracle リードレプリカを比較しています。

マルチ AZ リードレプリカ
同期レプリケーション — データ損失ゼロの高い耐久性 非同期レプリケーション — 高い拡張性
単一 AWS リージョン内での主な使用例における高可用性と障害復旧 リージョン内のリードレプリカの主な使用例には、読み取りスケーラビリティがあります。クロスリージョンのリードレプリカは、2 つの AWS リージョンにわたる障害復旧です。
プライマリインスタンスのみが常にアクティブ すべてのレプリカがアクティブで、読み取りスケーリングに使用可能
バックアップをセカンダリから取得 RDS Oracle リードレプリカではバックアップに未対応
常にリージョン内の 2 つのアベイラビリティーゾーンに存在 アベイラビリティーゾーン、クロスアベイラビリティーゾーン、またはクロスリージョン内にすることができます。
問題が検出されたときに自動フェイルオーバー スタンドアロンデータベースに手動で昇格可能

まとめ

Amazon RDS for Oracle は、リードレプリカのファームでの読み取りワークロードのマネージド DR およびマネージドスケーラビリティをサポートします。Oracle BYOL のお客様で DR 戦略が必要な場合は、データセンターまたは他のクラウドで実行されているセルフマネージドのミッションクリティカルなデータベースを Amazon RDS for Oracle に移動して、マネージド DR およびリーダーファーム機能の利点を利用できます。

マネージドデータベースサービスモデルに移行することで、マネージドの高可用性、DR、スケーラビリティ、および Amazon RDS for Oracle が提供する他の多くの機能を利用できます。これで、データベース設計の最適化、容量サイズの調整、およびパフォーマンスの調整など、組織のビジネスにおいて重要なことに専念できます。Amazon RDS for Oracle リードレプリカの詳細については、Amazon RDS の Oracle リードレプリカ操作および RDS リードレプリカの操作を参照してください。

 


著者について

 

Sameer Malik は、アマゾン ウェブ サービスのプリンシパルデータベースソリューションアーキテクトです

 

 

 

 

Srinagesh Battula は、アマゾン ウェブ サービスのプリンシパルプロダクトマネージャーです。