Azure Database for PostgreSQL の高可用性 - Hyperscale (Citus)

適用対象: Azure Database for PostgreSQL - Hyperscale (Citus)

高可用性 (HA) は、サーバー グループ内の各ノードのスタンバイ レプリカを維持することでデータベースのダウンタイムを回避する機能です。 ノードがダウンした場合、Hyperscale (Citus) は、障害が発生したノードからそのスタンバイに受信接続を切り替えます。 フェールオーバーは数分で完了し、昇格されたノードには、PostgreSQL の同期ストリーミング レプリケーションを通じて常に最新のデータが格納されます。

HA が有効になっていない場合でも、各ハイパースケール (Citus) ノードには、独自のローカル冗長ストレージ (LRS) が与えられ、3 つの同期レプリカが Azure Storage サービスによって管理されます。 1 つのレプリカが故障した場合、故障が Azure Storage サービスによって検出され、ユーザーを介さずに再作成されます。 LRS ストレージの持続性については、こちらのページのメトリックを参照してください。

HA が有効に "なっている" とき、ハイパースケール (Citus) によってサーバー グループのプライマリ ノードごとにスタンバイ ノードが 1 つ実行されます。 プライマリとそのスタンバイでは、同期 PostgreSQL レプリケーションが使用されます。 このレプリケーションにより、プライマリ ノードが故障した場合、ダウンタウンが予測できます。 簡単に言えば、Microsoft サービスによってプライマリ ノードの故障が検出され、スタンバイ ノードにフェールオーバーされ、データ損失がゼロに抑えられます。

コーディネーター ノードで HA を利用するためには、接続の切断とトランザクションの失敗をデータベース アプリケーションが検出して再試行する必要があります。 新たに昇格されたコーディネーターには、同じ接続文字列でアクセスできます。

高可用性の状態

復旧は、検出、フェールオーバー、完全復旧の 3 つのステージに分けることができます。 すべてのノードは、Hyperscale (Citus) によって定期的に正常性チェックが実行されます。チェックで 4 回不合格になると、そのノードはダウンしていると判断されます。 その後 Hyperscale (Citus) は、スタンバイ ノードの状態をプライマリに昇格させ (フェールオーバー)、新しいスタンバイ候補をプロビジョニングします。 ストリーミング レプリケーションが開始されて、新しいノードが最新の状態になります。 すべてのデータのレプリケートが完了したとき、ノードは完全復旧の状態に達します。

Hyperscale (Citus) により、Azure portal のサーバー グループの [概要] ページにフェールオーバーの進行状況が表示されます。

  • 正常: HA が有効になっており、ノードがそのスタンバイに完全にレプリケートされます。
  • フェールオーバー進行中: プライマリ ノードでエラーが検出され、スタンバイへのフェールオーバーが開始されました。 この状態は、スタンバイ ノードへのフェールオーバーが完了するとスタンバイの作成中に移行され、スタンバイが新しいプライマリになります。
  • スタンバイの作成中: 前のスタンバイがプライマリに昇格され、そのための新しいスタンバイが作成されています。 新しいセカンダリの準備が整うと、この状態がレプリケーション進行中に移行します。
  • レプリケーション進行中: 新しいスタンバイ ノードがプロビジョニングされ、データ同期が進行中です。 すべてのデータが新しいスタンバイにレプリケートされると、プライマリおよびスタンバイ ノードの間で同期レプリケーションが有効になり、ノードの状態が正常に移行します。
  • なし: このノードで HA が有効になっていません。

次のステップ