33 Oracle Cloudまたはオンプレミスでのサイト全体の切替え
完全サイト障害またはサイト全体の障害が発生すると、アプリケーション層とデータベース層の両方が使用できなくなります。可用性を維持するため、本番データベースの冗長アプリケーション層と同期コピーをホスティングするセカンダリ・サイトに、ユーザーをリダイレクトする必要があります。MAAのベスト・プラクティスは、Data Guardを使用して本番データベースの同期コピーを保持することです。サイト障害が発生すると、WANトラフィック・マネージャまたはロード・バランサを使用してDNSフェイルオーバーが(手動または自動で)実行されて、すべてのユーザーがスタンバイ・サイトのアプリケーション層にリダイレクトされます。その間に、Data Guardフェイルオーバーによってスタンバイ・データベースがプライマリ本番ロールに遷移します。
通常のランタイム操作では、次のことが行われます。
-
クライアント・リクエストは、プライマリ・サイトのクライアント層に入り、WANトラフィック・マネージャによって転送されます。
-
クライアント・リクエストは、アプリケーション・サーバー層に送信されます。
-
リクエストは、アクティブなロード・バランサを介してアプリケーション・サーバーに転送されます。
-
リクエストは、データベース・サーバー層に送信されます。
-
アプリケーション・リクエストは、必要に応じてOracle RACインスタンスにルーティングされます。
-
レスポンスは、同様の経路でアプリケーションとクライアントに戻されます。
次に、サイト・スイッチオーバー前のネットワーク・ルートを示します。
次のステップでは、サイト・スイッチオーバーの影響について説明します。
-
管理者は、プライマリ・データベースをセカンダリ・サイトにフェイルオーバーまたはスイッチオーバーします。この操作は、Data Guardファスト・スタート・フェイルオーバーを使用している場合は自動的に処理されます。専用ハードウェア上のAutonomous Databaseは、Data Guardファスト・スタート・フェイルオーバーをサポートしています。
-
管理者は、セカンダリ・サイトの中間層アプリケーション・サーバーを起動します(実行されていない場合)。障害が発生したサイトに同じ中間層アプリケーション・サーバーが存在する場合、それらを利用できることがあります。
-
セカンダリ・サイトのワイドエリア・トラフィック・マネージャの選択は、サイト全体の障害に対して自動的に行うことができます。
-
セカンダリ・サイトのワイドエリア・トラフィック・マネージャがセカンダリ・サイトのロード・バランサの仮想IPアドレスを返し、後続の再接続でクライアントが自動的に方向付けされます。このシナリオでは、サイト・フェイルオーバーは自動ドメイン・ネーム・システム(DNS)フェイルオーバーによって実行されます。
次の図は、サイト・フェイルオーバー後のネットワーク・ルートを示しています。クライアントまたはアプリケーション・リクエストは、セカンダリ・サイトのクライアント層に入り、プライマリ・サイトと同じ経路をたどります。
フェイルオーバーは、クライアントのWebブラウザにも依存します。ほとんどのブラウザ・アプリケーションでは、一定期間DNSエントリがキャッシュされます。したがって、停止の発生時に進行中だったセッションは、キャッシュ・タイムアウトの期限切れまでフェイルオーバーされない可能性があります。このようなクライアントでサービスを再開するには、ブラウザを一度終了して再起動します。
リージョン間のロール遷移の実行
次に、Oracle Public Cloudを活用する例を示します。ただし、同様のステップをオンプレミスまたはハイブリッド・クラウドのシナリオで実行できます。
別のリージョンへのフェイルオーバー
フェイルオーバー操作は、プライマリ・サイトが使用できなくなったときに実行され、通常は計画外の操作です。元のプライマリ・データベースで障害が発生し、プライマリ・データベースを適時にリカバリできる可能性がない場合は、スタンバイ・データベースのプライマリ・データベースへのロール・トランジションを実行できます。プライマリ・データベースに障害が発生した時点でプライマリ・データベースとターゲット・スタンバイ・データベースに一貫性があったかどうかによって、データが消失する場合があります。
DR構成で手動フェイルオーバーを実行するには、次のステップに従います。
-
DNS名をスイッチオーバーします。
システムで使用される名前をホストするDNSサーバーで必要なDNSプッシュを実行するか、クライアントのファイル・ホスト解決を変更して、システムのフロント・エンド・アドレスがsite2のロード・バランサによって使用されるパブリックIPを指すようにします。DNSが外部フロント・エンド解決(OCI DNS、商用DNSなど)に使用されるシナリオでは、適切なAPIを使用して変更をプッシュできます。OCI DNSでこの変更をプッシュする例:
次に、ordscsdroci.domainexample.comなどのフロント・エンドDNSエントリをサイト1ロード・バランサのパブリックIPアドレス(111.111.111.123など)に更新するOCIクライアント・スクリプトを示します。
oci dns record rrset update --config-file /home/opc/scripts/.oci_ordscsdr/config --zone-name-or-id "domainexample.com" --domain "ordscsdroci.domainexample.com" --rtype "A" --items '[{"domain":"ordscsdroci.domainexample.com","rdata":"111.111.111.123","rtype":"A","ttl":60}]' --force
-
データベースをフェイルオーバーします。
Oracle Cloud:
Oracle Control Planeを使用して、Data Guardスイッチオーバーまたはフェイルオーバー操作を発行します。
オンプレミス:
セカンダリ・データベース・ホストのData Guard Brokerを使用してフェイルオーバーを実行します。ユーザーoracleとして:
[oracle@drdbwlmp1b ~]$ dgmgrl sys/your_sys_password@secondary_db_unqname DGMGRL> failover to “secondary_db_unqname”
-
セカンダリ・サイトのサーバーを起動します。
セカンダリ・アプリケーション・サーバーを再起動します。
スイッチオーバー
スイッチオーバーは、管理者が2つのサイトのロールを元に戻す計画操作です。ロールは、プライマリからスタンバイ、およびスタンバイからプライマリに変更されます。これは手動スイッチオーバーと呼ばれます。手動スイッチオーバーを実行するには、次のステップに従います。
-
保留中の構成変更を伝播します。
データベース以外のファイルの場合は、rsyncまたはオブジェクト・ストレージ・サービス(OSS)を使用してセカンダリ・サイトにレプリケートできます。
-
プライマリ・サイトのサーバーを停止します。
スクリプトを使用して、プライマリ・サイトの管理対象サーバー/中間層を停止します。
-
DNS名をスイッチオーバーします
システムで使用される名前をホストするDNSサーバーで必要なDNSプッシュを実行するか、クライアントのファイル・ホスト解決を変更して、システムのフロント・エンド・アドレスがサイト2のロード・バランサによって使用されるパブリックIPを指すようにします。DNSが外部フロント・エンド解決(OCI DNS、商用DNSなど)に使用されるシナリオでは、適切なAPIを使用して変更をプッシュできます。
次の例では、OCI DNSでこの変更をプッシュします。
OCIクライアント・スクリプトは、フロント・エンドDNSエントリ(ordscsdroci.domainexample.comなど)をsite1ロード・バランサのパブリックIPアドレス(111.111.111.123など)に更新します。
oci dns record rrset update --config-file /home/opc/scripts/.oci_ordscsdr/config --zone-name-or-id "domainexample.com" --domain "ordscsdroci.domainexample.com" --rtype "A" --items '[{"domain":"ordscsdroci.domainexample.com","rdata":"111.111.111.123","rtype":"A","ttl":60}]' --force
DNSエントリのTTL値が、スイッチオーバーの有効なRTOに影響することに注意してください。TTLの値が大きい(20分など)と、DNSの変更がクライアントで有効になるのに、それと同じ時間がかかります。TTLの値を小さくすると、この処理は短時間で行われますが、クライアントがDNSをチェックする頻度が高くなるため、オーバーヘッドの原因になる可能性があります。DNSの変更前に、TTLを一時的に小さい値(1分など)に設定することをお薦めします。その後、変更を行い、スイッチオーバーの手順が完了したら、TTLを通常の値に設定しなおします。
-
データベース・スイッチオーバーを実行します。
Oracle Cloud:
Oracle Control Planeを使用して、Data Guardスイッチオーバー操作を発行します。
オンプレミス:
プライマリ・データベース・ホストのData Guard Brokerを使用してスイッチオーバーを実行します。
ユーザーoracleとして:
$ dgmgrl sys/your_sys_password@primary_db_unqname DGMGRL> switchover to “secondary_db_unqname”
-
セカンダリ・サイトのサーバーを起動します(新しいプライマリ)。
セカンダリ管理対象サーバーおよび中間層を再起動します。
サイト全体のスイッチオーバーのベスト・プラクティス
次のベスト・プラクティスを使用することをお薦めします。
-
プライマリ・サイトとスタンバイ・サイトで同じ構成を維持します。プライマリ・システムに適用される変更は、セカンダリ・システムでも実行する必要があるため、プライマリ・システムとセカンダリ・システムの両方が同じ構成になります。例: プライマリ・ロード・バランサの変更、オペレーティング・システムへの変更など。
-
定期的なスイッチオーバーを実行して、セカンダリ・サイトの状態を検証します。
-
プライマリ・サーバーを停止する前に、停止時間を必要としないスイッチオーバー関連アクティビティを実行します。たとえば、config_replica.shスクリプトに基づくWLS構成レプリケーションには停止時間は必要ないため、プライマリ・システムの稼働中にこれを実行できます。その他の例には、スタンバイ・サイトでの停止ホストの起動があります。
-
アプリケーション・サーバーの再起動のために必要な場合は、管理対象サーバー/中間層をパラレルに停止および起動します。
-
DNSのフロントエンド更新は顧客に依存します。適切なDNSエントリで(少なくともスイッチオーバー操作中に)小さいTTL値を使用して、更新の時間を短縮します。スイッチオーバーが終了すると、TTLを元の値に戻すことができます。
-
また、OCIロード・バランサは、サーバーが稼働していることを認識し、リクエストの送信を開始するのに時間がかかります。通常は、OCIロード・バランサのヘルス・チェックの頻度に応じて数秒かかります。チェックに使用する間隔を短くするほど、サーバーが稼働していることが早くわかるようになります。ただし、使用間隔が短すぎると注意が必要です。ヘルス・チェックが大量のチェックの場合は、バックエンドが過負荷になる可能性があります。