Azure Database for PostgreSQLの仮想エンドポイントによる「プライマリサーバーへの昇格」を試してみた
こんにちは、株式会社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