Azure Cosmos DB for PostgreSQL での高可用性
適用対象: Azure Cosmos DB for PostgreSQL (PostgreSQL の Citus データベース拡張機能を利用)
高可用性 (HA) は、クラスター内の各ノードのスタンバイ レプリカを維持して、データベースのダウンタイムを最小限に抑えます。 ノードがダウンした場合、Azure Cosmos DB for PostgreSQL は、障害が発生したノードからそのスタンバイに受信接続を切り替えます。 フェールオーバーは数分で完了し、昇格されたノードには、PostgreSQL の同期ストリーミング レプリケーションを通じて常に最新のデータが格納されます。
クラスター内のすべてのプライマリ ノードは、ノード間の待機時間を短縮するために、1 つの可用性ゾーンにプロビジョニングされます。 優先可用性ゾーンを使用すると、すべてのクラスター ノードを、アプリケーションがデプロイされているのと同じ可用性ゾーンに配置できます。 この近接性により、アプリ データベースの待機時間が短縮され、パフォーマンスがさらに向上する可能性があります。 スタンバイ ノードは別の可用性ゾーンにプロビジョニングされます。 Azure portal には、クラスター内の各プライマリ ノードの可用性ゾーンが表示されます。 REST API などのプログラムによる方法のいずれかを使用して、クラスター内の各ノードの可用性ゾーンを確認することもできます。
HA が有効になっていない場合でも、各ノードには独自のローカル冗長ストレージ (LRS) が与えられ、3 つの同期レプリカが Azure Storage サービスによって管理されます。 1 つのレプリカが故障した場合、故障が Azure Storage サービスによって検出され、ユーザーを介さずに再作成されます。 LRS ストレージの持続性については、こちらのページのメトリックを参照してください。
HA が有効に なっている 場合、Azure Cosmos DB for PostgreSQL によって、クラスターのプライマリ ノードごとに 1 つのスタンバイ ノードが実行されます。 プライマリとそのスタンバイでは、同期 PostgreSQL レプリケーションが使用されます。 このレプリケーションにより、プライマリ ノードが故障した場合、ダウンタウンが予測できます。 簡単に言えば、Microsoft サービスによってプライマリ ノードの故障が検出され、スタンバイ ノードにフェールオーバーされ、データ損失がゼロに抑えられます。
コーディネーター ノードで HA を利用するためには、接続の切断とトランザクションの失敗をデータベース アプリケーションが検出して再試行する必要があります。 新たに昇格されたコーディネーターには、同じ接続文字列でアクセスできます。
高可用性の状態
復旧は、検出、フェールオーバー、完全復旧の 3 つのステージに分けることができます。 Azure Cosmos DB for PostgreSQL は、各ノードに対して定期的に正常性チェックを実行します。チェックで 4 回不合格になると、ノードがダウンしていると判断されます。 その後、Azure Cosmos DB for PostgreSQL はスタンバイ ノードの状態をプライマリに昇格させ (フェールオーバー)、新しいスタンバイ候補を作成します。 ストリーミング レプリケーションが開始されて、新しいノードが最新の状態になります。 すべてのデータのレプリケートが完了したとき、ノードは完全復旧の状態に達します。
Azure Cosmos DB for PostgreSQL により、Azure portal のクラスターの [概要] ページにフェールオーバーの進行状況が表示されます。
- 正常: HA が有効になっており、ノードがそのスタンバイに完全にレプリケートされます。
- フェールオーバー進行中: プライマリ ノードでエラーが検出され、スタンバイへのフェールオーバーが開始されました。 この状態は、スタンバイ ノードへのフェールオーバーが完了するとスタンバイの作成中に移行され、スタンバイが新しいプライマリになります。
- スタンバイの作成中: 前のスタンバイがプライマリに昇格され、そのための新しいスタンバイが作成されています。 新しいセカンダリの準備が整うと、この状態がレプリケーション進行中に移行します。
- レプリケーション進行中: 新しいスタンバイ ノードがプロビジョニングされ、データ同期が進行中です。 すべてのデータが新しいスタンバイにレプリケートされると、プライマリおよびスタンバイ ノードの間で同期レプリケーションが有効になり、ノードの状態が正常に移行します。
- なし: このノードで HA が有効になっていません。
次のステップ
- クラスターで高可用性を実現にする方法について学習します。
- Azure Cosmos DB for PostgreSQL の可用性ゾーンについて学習します。