この記事では、可用性 ゾーン と リージョン間の復旧とビジネス継続性を含む Azure Database for PostgreSQL の高可用性について説明します。 Azure における信頼性の詳細については、Azure の信頼性に関するページを参照してください。
Azure Database for PostgreSQL では、同じ可用性ゾーン (ゾーン) 内または複数の可用性ゾーン (ゾーン冗長) 内で、物理的に分離されたプライマリ レプリカとスタンバイ レプリカをプロビジョニングすることで、高可用性がサポートされます。 この高可用性モデルは、コミットされたデータが障害時に失われないように設計されています。 高可用性 (HA) セットアップでは、データはプライマリ サーバーとスタンバイ サーバーの両方に同期的にコミットされます。 このモデルは、データベースがソフトウェア アーキテクチャにおける単一障害点にならないように設計されています。 高可用性と可用性ゾーンのサポートに関する詳細については、「可用性ゾーンのサポート」をご覧ください。
可用性ゾーンのサポート
可用性ゾーン は、各 Azure リージョン内のデータセンターの物理的に分離されたグループです。 1 つのゾーンで障害が発生した際には、サービスを残りのゾーンのいずれかにフェールオーバーできます。
Azure Database for PostgreSQL では、高可用性構成用 のゾーン冗長モデルとゾーン モデル の両方がサポートされています。 どちらの高可用性構成でも、計画的なイベントと計画外のイベントの両方で、データ損失ゼロの自動フェールオーバー機能が有効になります。
ゾーン冗長。 ゾーン冗長の高可用性では、別のゾーン内に自動フェールオーバー機能を備えたスタンバイ レプリカがデプロイされます。 ゾーン冗長性は最高レベルの可用性を提供しますが、ゾーン間でアプリケーションの冗長性を構成する必要があります。 そのため、ゾーン冗長は、可用性ゾーン レベルの障害からの保護が必要な場合や、可用性ゾーン間の待機時間を許容できる場合に選択します。 書き込みとコミットの待ち時間は同期レプリケーションによってある程度影響を受ける可能性がありますが、読み取りクエリへの影響はありません。 この影響は、ワークロード、選択した SKU の種類、リージョンに固有です。
プライマリ サーバーとスタンバイ サーバーの両方について、リージョンと可用性ゾーンを選択できます。 スタンバイ レプリカ サーバーは、同じリージョン内の選択した可用性ゾーンにプロビジョニングされ、コンピューティング、ストレージ、ネットワーク構成はプライマリ サーバーと同じになります。 データ ファイルとトランザクション ログ ファイル (先書きログ、WAL とも呼ばれます) は、各可用性ゾーン内のローカル冗長ストレージ (LRS) に格納され、 3 つの データ コピーが自動的に格納されます。 ゾーン冗長構成では、プライマリ サーバーとスタンバイ サーバー間でスタック全体が物理的に分離されます。
ゾーン冗長オプションは、可用性ゾーンがサポートされているリージョンでのみ使用できます。
ゾーン冗長は、次の場合にサポートされていません。
バーストが可能なコンピュート階層
単一ゾーンの可用性を持つリージョン
ゾーン ベース。 単一の可用性ゾーン内で最高レベルの可用性を実現しながら、ネットワーク待機時間を最小限に抑えたい場合は、ゾーン デプロイを選択します。 両方のプライマリ データベース サーバーをデプロイするリージョンと可用性ゾーンを選択できます。 スタンバイ レプリカ サーバーは、同じ可用性ゾーンで自動的にプロビジョニングおよび管理され、コンピューティング、ストレージ、ネットワーク構成はプライマリ サーバーと同じになります。 ゾーン構成は、ノードレベルの障害からデータベースを保護し、計画的および計画外のダウンタイム イベント中のアプリケーションのダウンタイムを削減するのにも役立ちます。 プライマリ サーバーからのデータは、同期モードでスタンバイ レプリカにレプリケートされます。 プライマリ サーバーが中断された場合、サーバーは自動的にスタンバイ レプリカにフェールオーバーします。
ゾーン デプロイ オプションは、フレキシブル サーバーをデプロイできるすべての Azure リージョンで利用できます。
注
ゾーン デプロイ モデルとゾーン冗長デプロイ モデルは、アーキテクチャ的にはどちらも同じように動作します。 以下のセクションのさまざまな記述は、特に明記されていない限り、両方に適用されます。
ポータルでゾーンの回復性を構成する
高可用性 (HA) は、最大の回復性のためにスタンバイ サーバーを別の可用性ゾーンに配置するゾーン冗長 HA と、プライマリ サーバーと同じゾーンにスタンバイ サーバーをデプロイして待機時間を最小限に抑える同じゾーン HA の 2 つの方法で構成できます。
構成を簡略化し、ゾーンの回復性を確保するために、ポータルには、[有効] と [無効] の 2 つのラジオ ボタンがあるゾーンの回復性オプションが用意されています。 [有効] を選択すると、別の可用性ゾーン (ゾーン冗長 HA モード) にスタンバイ サーバーの作成が試行されます。 リージョンがゾーン冗長 HA をサポートしていない場合は、代わりにフォールバック チェックボックス (次の図で強調表示されています) を選択して、同じゾーン HA を有効にすることができます。
フォールバック チェックボックスを選択すると、システムによって同じゾーンにスタンバイ サーバーが作成されます。 ゾーン容量が後で使用可能になった場合、 PITR または読み取りレプリカを使用してゾーン冗長 HA 構成に移行することを選択できるように、Azure から通知されます。 チェック ボックスをオンにせず、ゾーン容量が使用できない場合、HA の有効化は失敗します。 この設計では、ゾーン冗長 HA が既定として適用され、同じゾーン HA に制御されたフォールバックが提供されるため、ワークロードは最終的に手動介入なしで完全なゾーンの回復性を実現します。
高可用性機能
スタンバイ レプリカは、プライマリ サーバーと同じ VM 構成 (仮想コア、ストレージ、ネットワーク設定など) にデプロイされます。
既存のデータベース サーバーに可用性ゾーンのサポートを追加できます。
高可用性を無効にすることで、スタンバイ レプリカを削除できます。
ゾーン冗長可用性を実現するために、プライマリ データベース サーバーとスタンバイ データベース サーバーの可用性ゾーンを選択できます。
停止、開始、再起動などの操作は、プライマリとスタンバイの両方のデータベース サーバーで同時に実行されます。
ゾーン冗長モデルとゾーン モデルでは、プライマリ データベース サーバーは自動バックアップを定期的に実行します。 同時に、スタンバイ レプリカは、バックアップ ストレージ内のトランザクション ログを継続的にアーカイブします。 リージョンで可用性ゾーンがサポートされている場合、バックアップ データがゾーン冗長ストレージ (ZRS) に保存されます。 可用性ゾーンがサポートされていないリージョンでは、バックアップ データがローカル冗長ストレージ (LRS) に保存されます。
クライアントは常に、プライマリ データベース サーバーのエンド ホスト名に接続されます。
サーバー パラメーターへの変更は、スタンバイ レプリカにも適用されます。
サーバーを再起動して、静的サーバー パラメーターの変更を取得できます。
マイナー バージョンのアップグレードなどの定期的なメンテナンス アクティビティは、最初にスタンバイで行われます。 ダウンタイムを減らすために、スタンバイはプライマリに昇格されるため、残りのノードにメンテナンス タスクが適用されている間もワークロードを維持できます。
注
高可用性機能を適切に確保するには、 max_replication_slots と max_wal_senders サーバー パラメーターの値を構成します。 高可用性には、フェールオーバーとシームレスなアップグレードを処理するために、それぞれ 4 つが必要です。 5 つの読み取りレプリカと 12 個の論理レプリケーション スロットを使用した高可用性セットアップでは、 max_replication_slots と max_wal_senders の両方のパラメーター値を 21 に設定します。 この構成が必要なのは、各読み取りレプリカと論理レプリケーション スロットには、それぞれ 1 つと、高可用性が正常に機能するために必要な 4 つが必要であるためです。
max_replication_slotsパラメーターとmax_wal_senders パラメーターの詳細については、ドキュメントを参照してください。
高可用性の正常性を監視する
Azure Database for PostgreSQL での高可用性 (HA) の正常性状態の監視では、HA 対応インスタンスの正常性と準備の継続的な概要が提供されます。 この監視機能 は、Azure の Resource Health Check (RHC) フレームワークを適用して、データベースのフェールオーバーの準備または全体的な可用性に影響を与える可能性のある問題を検出してアラートを生成します。 HA 正常性状態の監視では、接続状態、フェールオーバー状態、データ レプリケーションの正常性などの主要なメトリックを評価することで、予防的なトラブルシューティングが可能になり、データベースのアップタイムとパフォーマンスを維持するのに役立ちます。
HA ヘルスステータスの監視を利用して、次の操作を行います。
- パフォーマンスの低下やネットワークのブロックなど、潜在的な問題を明らかにする状態インジケーターを使用して、プライマリ レプリカとスタンバイ レプリカの両方の正常性に関するリアルタイムの分析情報を取得します。
- HA 状態の変更に関するタイムリーな通知のアラートを設定して、潜在的な中断に対処するための迅速なアクションを実行できるようにします。
- データベース操作に影響を与える前に問題を特定して対処することで、フェールオーバーの準備を最適化します。
HA の正常性状態の構成と解釈に関する詳細なガイドについては、 Azure Database for PostgreSQL の高可用性 (HA) の正常性状態の監視に関するページを参照してください。
高可用性の制限
スタンバイ サーバーへの同期レプリケーション (特にゾーン冗長構成の場合) により、アプリケーションでは書き込みとコミットの待機時間が長くなる可能性があります。
読み取りクエリにスタンバイ レプリカを使用することはできません。
プライマリ サーバーのワークロードとアクティビティによっては、スタンバイ レプリカを昇格する前に復旧する必要があるため、フェールオーバー プロセスに 120 秒以上かかる場合があります。
通常、スタンバイ サーバーでは、40 MB/秒で WAL ファイルが復旧されます。 より大きなバージョンの場合、このレートは 200 MB/秒まで増加する可能性があります。 ワークロードがこの制限を超える場合、フェールオーバー中または新しいスタンバイの確立後、復旧完了までの時間が延びる可能性があります。
プライマリ データベース サーバーを再起動すると、スタンバイ レプリカも再起動されます。
追加のスタンバイを構成することはできません。
管理メンテナンス期間中に、顧客が開始した管理タスクをスケジュールすることはできません。
スケール コンピューティングやスケール ストレージなどの計画的なイベントは、最初にスタンバイで発生し、次にプライマリ サーバーで発生します。 現在、これらの計画的な操作については、サーバーのフェールオーバーは行われません。
HA 対応フレキシブル サーバーで論理デコードまたは論理レプリケーションを構成する場合:
- PostgreSQL 16 以前では、論理レプリケーション スロットは、既定でフェールオーバー後にスタンバイ サーバーに保持されません。
- フェールオーバー後も論理レプリケーションが引き続き機能するようにするには、
pg_failover_slots拡張機能を有効にして、hot_standby_feedback = onなどのサポート設定を構成する必要があります。 -
PostgreSQL 17 以降では、スロット同期が標準機能としてサポートされています。 適切な PostgreSQL 構成 (
sync_replication_slots、hot_standby_feedback) を有効にした場合、論理レプリケーション スロットはフェールオーバー後に自動的に保持され、拡張機能は必要ありません。 - セットアップ手順と前提条件については、 PG_Failover_Slots拡張機能 のドキュメントを参照してください。
プライベート (仮想ネットワーク) とプライベート エンドポイントを使用したパブリック アクセスの間の可用性ゾーンの構成はサポートされていません。 仮想ネットワーク内の可用性ゾーン (リージョン内の可用性ゾーンにまたがる) またはプライベート エンドポイントを使用したパブリック アクセスを構成する必要があります。
可用性ゾーンは、1 つのリージョン内でのみ構成できます。 リージョン間で可用性ゾーンを構成することはできません。
SLA
ゾーン モデルは、約 99.95%の SLA のアップタイムを提供します。
ゾーン冗長モデルは、約 99.99%の SLA のアップタイムを提供します。
可用性ゾーンが有効になっている Azure Database for PostgreSQL を作成する
可用性ゾーンを使用して高可用性を実現するために Azure Database for PostgreSQL を作成する方法については、「 クイック スタート: Azure portal で Azure Database for PostgreSQL を作成する」を参照してください。
可用性ゾーンの再デプロイと移行
ゾーン冗長デプロイ モデルとゾーン デプロイ モデルの両方でフレキシブル サーバーの高可用性構成を有効または無効にする方法については、「 フレキシブル サーバーでの高可用性の管理」を参照してください。
高可用性コンポーネントとワークフロー
トランザクションの完了
アプリケーション トランザクションは、最初にプライマリ サーバー上の WAL にログを記録する書き込みとコミットをトリガーします。 プライマリ サーバーは、Postgres ストリーミング プロトコルを使用して、これらのログをスタンバイ サーバーにストリーミングします。 スタンバイ サーバー ストレージがログを保持すると、プライマリ サーバーは書き込みの完了を確認します。 アプリケーションは、この受信確認の後にのみトランザクションをコミットします。 この余分なラウンドトリップにより、アプリケーションに待機時間が追加されます。 影響率は、アプリケーションによって異なります。 この確認プロセスでは、スタンバイ サーバーへのログの適用を待機しません。 スタンバイサーバーは、プロモートされるまでリカバリモードのままです。
健康診断
フレキシブル サーバーの正常性監視では、プライマリ サーバーとスタンバイ サーバーの両方の正常性が定期的にチェックされます。 複数の ping を実行した後、正常性の監視でプライマリ サーバーに到達できないことが検出された場合、サービスはスタンバイ サーバーへの自動フェールオーバーを開始します。 正常性監視アルゴリズムは、誤検知の状況を回避するために複数のデータ ポイントを使用します。
フェールオーバー モード
フレキシブル サーバーは、計画フェールオーバーと計画外フェールオーバーの 2 つのフェールオーバー モードをサポートします。 どちらのモードでも、レプリケーションが中断されると、スタンバイ サーバーはプライマリとして昇格する前に復旧を実行し、読み取り/書き込みのために開きます。 新しいプライマリ サーバー エンドポイントで自動 DNS エントリが更新された場合、アプリケーションは同じエンドポイントを使用してサーバーに接続できます。 新しいスタンバイ サーバーがバックグラウンドで確立されるので、それによってアプリケーションは接続性を維持できます。
高可用性の状態
システムは、プライマリ サーバーとスタンバイ サーバーの正常性を継続的に監視します。 スタンバイ サーバーへのフェールオーバーのトリガーなど、問題を解決するための適切なアクションが実行されます。 次の表に、考えられる高可用性の状態を示します。
| 地位 | 説明 |
|---|---|
| 初期化中 | 新しいスタンバイ サーバーの作成中です。 |
| データのレプリケート中 | スタンバイの作成後、そのスタンバイがプライマリにキャッチアップ中です。 |
| Healthy | レプリケーションは安定状態にあり、正常です。 |
| フェールオーバー中 | データベース サーバーはスタンバイにフェールオーバー中です。 |
| スタンバイの削除中 | スタンバイ サーバーの削除中です。 |
| 無効 | 高可用性が有効ではありません。 |
注
高可用性は、サーバーの作成時または後で有効にすることができます。 作成後のステージで高可用性を有効または無効にする場合は、プライマリ サーバーのアクティビティが少ないときに有効または無効にします。
安定状態の操作
PostgreSQL クライアント アプリケーションは、DB サーバー名を使用してプライマリ サーバーに接続します。 プライマリ サーバーは、アプリケーションの読み取りを直接処理します。 同時に、アプリケーションはコミットの確認を受け取り、ログ データがプライマリ サーバーとスタンバイ レプリカの両方に保持された後にのみ書き込みを行います。 この余分なラウンドトリップのため、アプリケーションでは、書き込みとコミットの待機時間が長くなることが予想されます。 高可用性の正常性をポータルで監視できます。
- クライアントがフレキシブル サーバーに接続し、書き込み操作を実行します。
- 変更は待機サイトに複製されます。
- プライマリが受信確認を受け取ります。
- 書き込みとコミットが確認されます。
高可用性サーバーのポイントインタイム リストア
高可用性で構成されたフレキシブル サーバーの場合、システムはリアルタイムでログ データをスタンバイ サーバーにレプリケートします。 テーブルの誤削除や不適切なデータ更新など、プライマリ サーバー上のユーザー エラーは、スタンバイ レプリカにレプリケートされます。 そのため、このような論理エラーから回復するためにスタンバイを使用することはできません。 このようなエラーから復旧するには、バックアップからポイントインタイム リストアを実行する必要があります。 フレキシブル サーバーのポイントインタイム リストア機能を使用すると、エラーが発生する前の時刻に復元できます。 新しいデータベース サーバーが、高可用性が構成されたデータベースのために単一ゾーン フレキシブル サーバーとして復元され、ユーザーが指定した新しいサーバー名が付けられます。 復元されたサーバーは、いくつかのユース ケースで使用できます。
復元されたサーバーを運用環境に使用し、必要に応じて、同じゾーンまたは同じリージョン内の別のゾーンのスタンバイ レプリカで高可用性を有効にします。
オブジェクトを復元する場合は、復元されたデータベース サーバーからオブジェクトをエクスポートして、運用データベース サーバーにインポートします。
テストおよび開発目的でデータベース サーバーを複製する場合や、その他の目的のために復元する場合は、ポイントインタイム リストアを実行できます。
フレキシブル サーバーのポイントインタイム リストアを実行する方法については、「フレキシブル サーバー のポイントインタイム リストア」をご覧ください。
フェールオーバーのサポート
計画されたフェールオーバー
計画的なダウンタイムのイベントには、Azure のスケジュールされた定期的なソフトウェア更新やマイナー バージョンのアップグレードが含まれます。 計画フェールオーバーを使用して、プライマリ サーバーを優先可用性ゾーンに戻すこともできます。 高可用性を構成する場合、これらの操作はまずスタンバイ レプリカに適用され、アプリケーションは引き続きプライマリ サーバーにアクセスします。 プロセスによってスタンバイ レプリカが更新されると、プライマリ サーバー接続がドレインされ、同じデータベース サーバー名を持つプライマリ サーバーとしてスタンバイ レプリカがアクティブ化されるフェールオーバーがトリガーされます。 クライアント アプリケーションは、同じデータベース サーバー名で新しいプライマリ サーバーに再接続し、操作を再開できます。 このプロセスにより、古いプライマリと同じゾーンに新しいスタンバイ サーバーが確立されます。
スケール コンピューティングやスケール ストレージなど、ユーザーが開始するその他の操作の場合、プロセスは最初にスタンバイ、次にプライマリに変更を適用します。 現時点では、サービスはスタンバイにフェールオーバーしません。 そのため、スケール操作はプライマリ サーバーで実行されますが、アプリケーションでは短いダウンタイムが発生します。
また、この機能を使用すると、ダウンタイムを短縮してスタンバイ サーバーにフェールオーバーできます。 たとえば、プライマリ サーバーは、計画外のフェールオーバー後にアプリケーションとは異なる可用性ゾーンに存在する可能性があります。 アプリケーションと併置するために、プライマリ サーバーを前のゾーンに戻す必要があります。
この機能を実行すると、プロセスは最初にスタンバイ サーバーが最新のトランザクションに追いつくために準備し、アプリケーションが読み取りと書き込みの実行を続行できるようにします。 このプロセスでは、スタンバイがプライマリに昇格され、既存のプライマリへの接続が切断されます。 プロセスがバックグラウンドで新しいスタンバイ サーバーを確立している間、アプリケーションは引き続きプライマリに書き込むことができます。 次の表では、計画されたフェールオーバーに関連する手順について説明します。
| ステップ | 説明 | アプリのダウンタイムが予想されるか? |
|---|---|---|
| 1 | スタンバイ サーバーがプライマリに追いつくのを待ちます。 | いいえ |
| 2 | 内部監視システムによって、フェールオーバー ワークフローが開始されます。 | いいえ |
| 3 | スタンバイ サーバーがプライマリのログ シーケンス番号 (LSN) に近い場合、アプリケーションの書き込みはブロックされます。 | イエス |
| 4 | スタンバイ サーバーが独立したサーバーに昇格されます。 | イエス |
| 5 | DNS レコードがスタンバイ サーバーの新しい IP アドレスで更新されます。 | イエス |
| 6 | アプリケーションは再接続し、新しいプライマリとの読み取り/書き込みを再開します。 | いいえ |
| 7 | 別のゾーンの新しいスタンバイ サーバーが確立されます。 | いいえ |
| 八 | スタンバイ サーバーで、確立中に失われたログの復旧が (Azure BLOB から) 開始されます。 | いいえ |
| 9 | プライマリ サーバーとスタンバイ サーバーの間に安定した状態が確立されます。 | いいえ |
| 10 | 計画フェールオーバーのプロセスが完了します。 | いいえ |
アプリケーションのダウンタイムは手順 3 から開始され、手順 5 の後に操作を再開できます。 残りの手順は、アプリケーションの書き込みとコミットに影響を与えることなく、バックグラウンドで行われます。
ヒント
フレキシブル サーバーを使用すると、必要に応じて、データベース上のアクティビティが低いことが予想される日に 60 分の期間を選択することで、Azure によって開始されるメンテナンス アクティビティをスケジュールできます。 修正プログラムの適用やマイナー バージョンのアップグレードなどの Azure メンテナンス タスクは、その期間中に発生します。 カスタム ウィンドウを選択しない場合、システムは、サーバーの現地時刻の午後 11 時から午前 7 時の間に 1 時間のウィンドウを割り当てます。 これらの Azure によって開始されるメンテナンス アクティビティは、可用性ゾーンで構成されたフレキシブル サーバーのスタンバイ レプリカでも実行されます。
発生する可能性のある計画的なダウンタイム イベントの一覧については、「計画的なダウンタイム イベント」をご覧ください。
計画外のフェールオーバー
計画外のダウンタイムは、基になるハードウェア障害、ネットワークの問題、ソフトウェアのバグなど、予期しない中断の結果として発生する可能性があります。 高可用性で構成されたデータベース サーバーが予期せず停止した場合、プロセスによってスタンバイ レプリカがアクティブ化され、クライアントは操作を再開できます。 高可用性 (HA) を構成せず、再起動の試行が失敗した場合、プロセスによって新しいデータベース サーバーが自動的にプロビジョニングされます。 計画外のダウンタイムを回避することはできませんが、フレキシブル サーバーは、人間の介入を必要とせずに自動的に復旧操作を実行することで、ダウンタイムを軽減するのに役立ちます。
考えられるシナリオなど、計画外のフェールオーバーとダウンタイムの詳細については、「計画外のダウンタイムの軽減」をご覧ください。
フェールオーバー テスト (強制フェールオーバー)
強制フェールオーバーを使用すると、運用ワークロードの実行中に計画外の停止シナリオをシミュレートし、アプリケーションのダウンタイムを観察できます。 プライマリ サーバーが応答しなくなったときに強制フェールオーバーを使用することもできます。
強制フェールオーバーによってプライマリ サーバーが停止され、スタンバイ 昇格操作が実行されるフェールオーバー ワークフローが開始されます。 スタンバイは、最後にコミットされたデータまで復旧プロセスを完了すると、プライマリ サーバーに昇格されます。 DNS レコードが更新され、アプリケーションは昇格されたプライマリ サーバーに接続できます。 新しいスタンバイ サーバーがバックグラウンドで確立されている間、アプリケーションは引き続きプライマリに書き込みを行うことができます。これが稼働時間に影響を及ぼすことはありません。
強制フェールオーバー中の手順を次の表に示します。
| ステップ | 説明 | アプリのダウンタイムが予想されるか? |
|---|---|---|
| 1 | プライマリ サーバーは、フェールオーバー要求を受信した直後に停止します。 | イエス |
| 2 | プライマリ サーバーがダウンしているため、アプリケーションでダウンタイムが発生します。 | イエス |
| 3 | 内部監視システムによってエラーが検出され、スタンバイ サーバーへのフェールオーバーが開始されます。 | イエス |
| 4 | スタンバイ サーバーは、独立したサーバーとして完全に昇格される前に、回復モードに移行します。 | イエス |
| 5 | フェールオーバー プロセスは、スタンバイの復旧が完了するまで待機します。 | イエス |
| 6 | サーバーが稼働すると、プロセスは同じホスト名で DNS レコードを更新しますが、スタンバイの IP アドレスを使用します。 | イエス |
| 7 | アプリケーションは新しいプライマリ サーバーに再接続して操作を再開できます。 | いいえ |
| 八 | 優先ゾーン内のスタンバイ サーバーが確立されます。 | いいえ |
| 9 | スタンバイ サーバーで、確立中に失われたログの復旧が (Azure BLOB から) 開始されます。 | いいえ |
| 10 | プライマリ サーバーとスタンバイ サーバーの間に安定した状態が確立されます。 | いいえ |
| 11 | 強制フェールオーバー プロセスが完了します。 | いいえ |
アプリケーションのダウンタイムは、手順 1 の後に開始され、手順 6 が完了するまで続行されます。 他の手順は、アプリケーションの書き込みとコミットに影響を与えずにバックグラウンドで実行されます。
Important
エンドツーエンドのフェールオーバー プロセスには、(a) プライマリの障害発生後のスタンバイ サーバーへのフェールオーバーと (b) 定常状態での新しいスタンバイ サーバーの確立が含まれます。 スタンバイへのフェールオーバーが完了するまでアプリケーションでダウンタイムが発生するため、エンド ツー エンドのフェールオーバー プロセス全体ではなく 、アプリケーション/クライアントの観点からダウンタイムを測定 します。
強制フェールオーバーを実行するときの考慮事項
全体的なエンドツーエンドの操作時間は、アプリケーションによって発生した実際のダウンタイムよりも長くなる可能性があります。
Important
常にアプリケーションの観点からダウンタイムを観察してください。
フェールオーバーをすぐに連続して実行することはしないでください。 新しいスタンバイ サーバーを完全に確立できるように、フェールオーバーの間に少なくとも 15 ~ 20 分待ちます。
ダウンタイムを減らすために、アクティビティの少ない期間中に強制フェールオーバーを実行します。
フェールオーバー後の PostgreSQL 統計のベスト プラクティス
PostgreSQL フェールオーバー後、最適なデータベース パフォーマンスを維持するには、 pg_statistic テーブルと pg_stat_* テーブルの個別のロールを理解する必要があります。
pg_statistic テーブルにはオプティマイザー統計が格納されます。これはクエリ プランナーにとって非常に重要です。 これらの統計にはテーブル内のデータ分散が含まれており、フェールオーバー後もそのまま残ります。これにより、クエリ プランナーは、正確な履歴データ分散情報に基づいてクエリの実行を効果的に最適化し続けることができます。
これに対し、 pg_stat_* テーブルは、スキャンの数、読み取られたタプル、更新などのアクティビティの統計情報を記録し、フェールオーバー時にリセットします。 このようなテーブルの例として、ユーザー定義テーブルのアクティビティを追跡する pg_stat_user_tables テーブルがあります。 このリセットは、新しいプライマリの運用状態を正確に反映しますが、自動バキューム プロセスやその他の運用効率を通知する可能性のある履歴アクティビティ メトリックの損失も意味します。
この違いを考えると、PostgreSQL フェールオーバー後に ANALYZE を実行します。 このアクションにより、新しいアクティビティ統計などを含むpg_stat_* テーブル (例えば pg_stat_user_tables) が更新され、自動バキューム プロセスに役立ち、新しいロールでデータベースのパフォーマンスが最適なまま維持されます。 このプロアクティブな手順は、データベースの現在の状態に合わせて、基本的なオプティマイザー統計を保持することとアクティビティ メトリックを更新することとのギャップを埋めます。
ゾーンダウン エクスペリエンス
ゾーン: ゾーン レベルの障害から復旧するには、バックアップを使用して ポイントインタイム リストアを実行 します。 最新時刻のカスタム復元ポイントを選択して、最新のデータを復元できます。 影響を受けていない別のゾーンに、新しいフレキシブル サーバーがデプロイされます。 復元にかかる時間は、前回のバックアップと、復旧するトランザクション ログの量によって異なります。
ポイントインタイム リストアの詳細については、「Azure Database for PostgreSQL フレキシブル サーバー でのバックアップと復元」を参照してください。
ゾーン冗長: フレキシブル サーバーは、データ損失をゼロにして、60 ~ 120 秒以内にスタンバイ サーバーに自動的にフェールオーバーします。
可用性ゾーンのない構成
推奨はされませんが、高可用性を有効にせずにフレキシブル サーバーを構成することもできます。 高可用性なしで構成されたフレキシブル サーバーの場合、サービスはローカル冗長ストレージに 3 つのデータ コピー、ゾーン冗長バックアップ (サポートされているリージョン)、組み込みのサーバーの回復性を提供して、クラッシュしたサーバーを自動的に再起動し、サーバーを別の物理ノードに再配置します。 この構成では、 99.9%の アップタイム SLA が提供されます。 計画されたフェールオーバー イベントまたは計画外のフェールオーバー イベント中に、サーバーがダウンした場合、サービスは次の自動化された手順を使用してサーバーの可用性を維持します。
- 新しいコンピューティング Linux VM がプロビジョニングされます。
- データ ファイルを含むストレージが新しい仮想マシンにマップされます。
- 新しい仮想マシン上で PostgreSQL データベース エンジンがオンラインになります。
次の図は、VM とストレージ障害の間の遷移を示しています。
ゾーン冗長の高可用性 (HA) がない状態での可用性を示す図。
リージョン間のディザスター リカバリーおよび事業継続
リージョン全体の障害が発生した場合、Azure は、別のリージョンを利用してディザスター リカバリーを使用して、地域または大規模な地域の災害からの保護を提供できます。 Azure ディザスター リカバリー アーキテクチャの詳細については、「Azure から Azure へのディザスター リカバリー アーキテクチャ」を参照してください。
フレキシブル サーバーは、計画的および計画外のダウンタイム イベント中に、ミッション クリティカルなデータベースのデータを保護し、ダウンタイムを軽減する機能を提供します。 フレキシブル サーバーは堅牢な回復性と可用性を提供する Azure インフラストラクチャ上に構築されており、障害からの保護を強化し、復旧時間要件に対処し、データ損失の発生を減らすビジネス継続性機能を備えています。 アプリケーションを設計するときは、ダウンタイムの許容度 (目標復旧時間 (RTO))、データ損失の露出 (目標復旧時点 ) を考慮してください。 たとえば、ビジネス クリティカルなデータベースでは、テスト データベースよりも厳しいアップタイムが必要になります。
複数リージョンの地域でのディザスター リカバリー
geo 冗長バックアップと復元
geo 冗長バックアップと復元を使用すると、障害が発生した場合に別のリージョンでサーバーを復元できます。 さらにこれにより、バックアップ オブジェクトの年間 99.99999999999999% (9 が 16 個) 以上の持続性が実現されます。
geo 冗長バックアップは、サーバーの作成時にのみ構成できます。 geo 冗長バックアップを使用してサーバーを構成すると、バックアップ データとトランザクション ログが、ストレージ レプリケーションを介してペアになっているリージョンに非同期的にコピーされます。
地理的冗長バックアップと復元の詳細については、「地理的冗長バックアップと復元」を参照してください。
読み取りレプリカ
リージョン間の読み取りレプリカをデプロイして、リージョン レベルの障害からデータベースを保護できます。 読み取りレプリカは、PostgreSQL の物理レプリケーション テクノロジを使用して非同期的に更新され、プライマリに遅れる可能性があります。 汎用コンピューティング レベルとメモリ最適化コンピューティング レベルでは、読み取りレプリカがサポートされます。
読み取りレプリカの機能と考慮事項の詳細については、読み取りレプリカに関する記事をご覧ください。
停止の検出、通知、管理
geo 冗長バックアップを使用してサーバーを構成する場合は、ペアのリージョンで geo リストアを実行できます。 新しいサーバーがプロビジョニングされ、そのリージョンにコピーされた使用可能な最後のデータに復旧されます。
リージョンにまたがる読み取りレプリカも使用できます。 リージョンの障害が発生した場合は、読み取りレプリカをスタンドアロンの読み取り/書き込み可能サーバーに昇格することで、ディザスター リカバリー操作を実行できます。 RPO は、障害発生時に RPO がレプリケーションのラグに近い場合に重大なリージョン障害が発生する場合を除き、最大 5 分 (データ損失の可能性) が予想されます。
計画外のダウンタイム軽減策とリージョン障害後の復旧の詳細については、「計画外のダウンタイムの軽減」をご覧ください。