☁️

Azure Database for PostgreSQLの仮想エンドポイントによる「プライマリサーバーへの昇格」を試してみた

2024/05/01に公開

こんにちは、株式会社FIXER@名古屋オフィス所属の村上です。

Azure Database for PostgreSQL - Flexible Server にて「仮想エンドポイント」が一般提供されました!
一般提供|Azure Database for PostgreSQL - Flexible Server ディザスタリカバリ機能を強化

仮想エンドポイント とは

Azure Database for PostgreSQL - Flexible Serverで実装された"読み取り/書き込み"と"読み取り専用"の2つのエンドポイントにおける総称を「仮想エンドポイント」と呼びます。

仮想エンドポイントの利点は、DNSによるデータベースサーバの切り替えを行うため、接続文字列の変更は発生しない(アプリケーションにおける接続情報の書き換え作業は発生しない)ことです。
そのため、プライマリサーバ側のリージョン障害が発生した場合、Azure Portalやだけで復旧作業を行い、DR稼働上でサービス継続を実現することが可能です。リージョン障害が回復した後、通常稼働に切り替える場合もレプリカサーバを別途用意し、復旧作業と同じ操作で実現することができます。

試してみた

本ブログでは、以下の構成でAzure Database for PostgreSQL - Flexible Serverを構築しました。

  • 東日本リージョン: 読み取り/書き込みサーバ(プライマリサーバ)
  • 西日本リージョン: 読み取り専用サーバ(レプリカサーバ)

1.仮想エンドポイントを作成する

プライマリサーバとレプリカサーバをターゲットに仮想エンドポイントを作成します。

ターゲット 仮想エンドポイント(論理ドメイン)
読み取り/書き込み virtual-endpoint.writer.postgres.database.azure.com
読み取り専用 virtual-endpoint.reader.postgres.database.azure.com

2.仮想エンドポイントのホストを問い合わせる

nslookupコマンドなどで仮想エンドポイント(論理ドメイン)のターゲット先を確認します。

nslookup virtual-endpoint.writer.postgres.database.azure.com

Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
virtual-endpoint.writer.postgres.database.azure.com	canonical name = primarydbtechblog20240426.postgres.database.azure.com.
primarydbtechblog20240426.postgres.database.azure.com	canonical name = primarydbtechblog20240426.privatelink.postgres.database.azure.com.
Name:	primarydbtechblog20240426.privatelink.postgres.database.azure.com
Address: 4.241.110.84
nslookup virtual-endpoint.reader.postgres.database.azure.com

Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
virtual-endpoint.reader.postgres.database.azure.com	canonical name = replicadbtechblog20240426.postgres.database.azure.com.
replicadbtechblog20240426.postgres.database.azure.com	canonical name = replicadbtechblog20240426.privatelink.postgres.database.azure.com.
Name:	replicadbtechblog20240426.privatelink.postgres.database.azure.com
Address: 20.27.242.40

3.レプリカサーバをプライマリサーバに昇格する

Azure Database for 〇〇シリーズでは、プライマリへの昇格作業によって切り替えを行います。赤枠の昇格ボタンを押下します。

今回は現行のプライマリサーバをレプリカサーバに置き換えてみます。もちろん、独立させることも可能です。
また、データ同期モードは計画済みにします。現行のプライマリサーバに障害発生した場合は、強制昇格を行いましょう。

計画済みの場合、データベースを操作しない状況でも約10分ほどで昇格しました。
強制昇格の場合、約5分ほどで昇格しました。

4.仮想エンドポイントのホストを再度問い合わせる

ターゲット先のサーバが入れ替わっていることを確認できましたね。

nslookup virtual-endpoint.writer.postgres.database.azure.com
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
virtual-endpoint.writer.postgres.database.azure.com	canonical name = replicadbtechblog20240426.postgres.database.azure.com.
replicadbtechblog20240426.postgres.database.azure.com	canonical name = replicadbtechblog20240426.privatelink.postgres.database.azure.com.
Name:	replicadbtechblog20240426.privatelink.postgres.database.azure.com
Address: 20.27.242.40
nslookup virtual-endpoint.reader.postgres.database.azure.com

Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
virtual-endpoint.reader.postgres.database.azure.com	canonical name = primarydbtechblog20240426.postgres.database.azure.com.
primarydbtechblog20240426.postgres.database.azure.com	canonical name = primarydbtechblog20240426.privatelink.postgres.database.azure.com.
Name:	primarydbtechblog20240426.privatelink.postgres.database.azure.com
Address: 4.241.110.84

最後に

本ブログでは、Azure Database for PostgreSQL - Flexible Serverの仮想エンドポイントと昇格機能を使ったフェールオーバを試してみました。やっぱり、論理ドメインでターゲットをDNSレベルできるのは素晴らしいです! ただし、運用面ではAzure SQL DatabaseのようなAzureによる自動フェールオーバーは実装されていないため、擬似的にフェールオーバーを用意したい場合はメトリックやログをトリガーにAzure Automationなどで昇格処理をキックさせる必要があります。

P.S.
マイクロソフト様!!
Azure Database for MySQL - Flexible Server にも仮想エンドポイントを実装してほしいです!

Discussion