Azure Database For PostgreSQLフレキシブルサーバーでレプリケーション設定
Azure Database for PostgreSQLでは単一サーバー、フレキシブル サーバー共に読み取り専用のレプリカ機能が提供されています。
読み取り専用レプリカはレプリケーションの機能によって提供されます。
Azure Database for PostgreSQLフレキシブル サーバーのレプリケーション設定、動作確認、レプリケーション解除によるマスター昇格まで試してみました。
PostgreSQLフレキシブルサーバーの読み取り専用レプリカ
読み取り専用レプリカをサポート
Azure Database for PostgreSQLのフレキシブルサーバーでは読み取り専用レプリカがサポートされています。
Azure Database for PostgreSQL – フレキシブル サーバーの読み取りレプリカ
読み取り専用レプリカはAzureで提供されているレプリケーション機能を使って作成します。
読み取り専用レプリカは同一リージョンにも別リージョンにも作成可能です。複数(最大5つ)作成可能です。
※読み取り専用なのでプライマリの書き込み負荷が軽減される事はありません。
汎用かメモリ最適化で利用可能
読み取り専用レプリカはCompute tierで汎用かメモリ最適化を選択している場合のみ利用可能です。
Compute tierでバースト可能を選択している場合、読み取り専用レプリカは利用出来ません。
レプリカにも課金されます
読み取り専用レプリカのサーバーにも課金が発生します。
課金額は通常のサーバーと同じです。
レプリケーションは非同期
同期レプリケーションではありません。
通常時は読み取りレプリカはプライマリからほぼリアルタイムで更新されますが、書き込みが集中した場合等ではタイムラグが発生します。
考慮事項(Azure Database for PostgreSQL – フレキシブル サーバーの読み取りレプリカ)
※タイムラグは数分から数時間に及ぶケースもあると記載があります。書き込み中心のデータベースや大量のデータを一括して処理する場合には注意が必要です。
論理レプリケーションや論理デコードもサポート
PostgreSQL のネイティブ論理レプリケーションや論理デコードがサポートされています。
Azure Database for PostgreSQL – フレキシブル サーバーでの論理レプリケーションと論理デコード
※今回はAzureのサービスで提供されるレプリケーション機能を使っています。
プライマリをゾーン冗長している場合は注意
プライマリサーバーでゾーン冗長をしている場合は、レプリカ先のリージョンでもゾーン冗長が利用できる必要があります。
レプリカサーバーは冗長出来ないのですが、ゾーン冗長出来るリージョンで無いとレプリケーション設定時にエラーになります。
Azure Azure リージョン(概要 – Azure Database for PostgreSQL – フレキシブル サーバー)
※ゾーン冗長を無効化するとレプリカサーバーを作成する事が出来ます。(2023年1月現在)
停止できないので課金に注意
プライマリサーバー、レプリカサーバー共に電源が停止できません。
考慮事項(2)(Azure Database for PostgreSQL – フレキシブル サーバーの読み取りレプリカ)
レプリケーション設定する事で電源停止による課金停止が出来なくなるので注意が必要です。(2023年1月現在)
Azure Database For PostgreSQLフレキシブルサーバーの起動停止についてはこちらに纏めています。
再レプリケーションは出来ない
レプリケーション設定を一度解除すると再度同じサーバーとレプリケーション設定する事は出来ません。
考慮事項(2)(Azure Database for PostgreSQL – フレキシブル サーバーの読み取りレプリカ)
レプリカサーバーを再作成する必要があります。
プライベートアクセスの場合はネットワーク設定に注意
プライマリがプライベートアクセス設定の場合はレプリカが属する仮想ネットワークとピアリングが必要になるようです。
プライマリとレプリカ間とネットワーク接続が出来ない場合はエラーになるようなので注意が必要です。
※公式ドキュメントでの記載が見つけられなかったのですが、実際にやるとエラーになります。
PostgreSQLフレキシブルサーバーでレプリケーション設定
レプリケーション構成
別リージョンへのレプリケーション設定します。
East USに作成したtest-postgresql-flexible-serverをプライマリとします。
レプリカをSouth Central USにサーバー名test-postgresql-flexible-server-replicaとして新規作成します。
ネットワークはパブリックアクセス許可の設定のサーバーを利用しています。
- プライマリ(レプリケーション元サーバー)
- レプリカ(レプリケーション先サーバー)
区分 | 項目 | 設定値 |
サーバーの詳細 | サーバー名 | test-postgresql-flexible-server-replica |
場所 | South Central US(米国中南部) |
レプリカの追加
プライマリ側のAzure Database for PostgreSQLフレキシブルサーバーでレプリケーション設定します。
レプリカの追加で新規レプリカサーバーを作成します。
サーバー名とレプリケーション先を指定するだけで、非常に簡単にAzure Database for PostgreSQLフレキシブルサーバーのレプリカサーバーを作成する事が出来ました。
フレキシブルサーバーリソースの設定確認
レプリケーション設定後に作成されたリソースを確認します。
PostgreSQLでレプリケーション確認
サーバー接続情報
今回はpgAdmin 4を使って各サーバーに接続します。
pgAdmin 4は公式サイトからダウンロードして利用します。
今回はWindows版を利用しています。
-
- プライマリ(test-postgresql-flexible-server)
- Hostname/address:test-postgresql-flexible-server.postgres.database.azure.com
- Username:設定したユーザー名
- Port:5432
- パスワード:設定した値
- レプリカ(test-postgresql-flexible-server-replica)
- Hostname/address:test-postgresql-flexible-server-replica.postgres.database.azure.com
- Username:プライマリと同じ
- Port:5432
- パスワード:プライマリと同じ
- プライマリ(test-postgresql-flexible-server)
pgAdmin 4で接続設定
各サーバーへの接続設定します。
※通常運用時はセキュリティ(SSL等)に考慮した接続設定にします。
PostgreSQLのレプリケーション設定を確認
PostgreSQLでレプリケーションに関する設定を確認してみます。
PostgreSQLの設定を確認 | ||
プライマリ(test-postgresql-flexible-server)でsynchronous_standby_namesを確認します。 PostgreSQL日本語訳(PostgreSQL 14.5文書)
|
【SQL文】
|
|
プライマリ(test-postgresql-flexible-server)でtransaction_read_onlyを確認すると、設定値がoffとなっており読み書きOK状態である事が分かります。 |
【SQL文】
【SQL実行結果】 |
|
レプリカ(test-postgresql-flexible-server-replica)でtransaction_read_onlyを確認します。 |
【SQL文】
【SQL実行結果】 |
テーブルを作成してレプリケーション確認
PostgreSQLでテーブル作成してレプリケーションを確認します。
今回は検証なのでスキーマは指定していません。データベースもpostgresを利用しています。
PostgreSQLの操作 | ||
プライマリ(test-postgresql-flexible-server)でreplica_test_tableと言う名前でテーブルを作成します。
|
【SQL文】
【SQL実行結果】 |
|
レプリカ(test-postgresql-flexible-server-replica)で確認します。 |
【SQL文】
【SQL実行結果】 |
|
レプリカ(test-postgresql-flexible-server-replica)で値を挿入してみます。読み取り専用レプリカなのでエラーになります。 |
【SQL文】
【SQL実行結果】 |
読み取り専用レプリカをプライマリへ昇格
レプリカを昇格
レプリケーションの設定でレプリカを昇格させます。
昇格はプライマリサーバー、レプリカサーバーどちらからでも可能です。
昇格後に書き込み確認
プライマリに昇格したtest-postgresql-flexible-server-replicaでSQLを実行して読み取り専用が解除されているか確認します。
昇格後後の確認 | ||
プライマリに昇格したtest-postgresql-flexible-server-replicatransaction_read_onlyを確認します。offに変わっており読み書きOK状態である事が確認出来ます。 |
【SQL文】
【SQL実行結果】 |
|
プライマリに昇格したtest-postgresql-flexible-server-replicaで値を追加します。読み取り専用が解除されているのでエラーにならず値が挿入されている事が確認出来ます。 |
【SQL文】
【SQL実行結果】 |
最後に
Azure Database for PostgreSQL フレキシブルサーバーの読み取り専用レプリカ作成について纏めてみました。
レプリケーションはサーバー名と場所(リージョン)を指定するだけで、とても簡単に設定する事が出来ました。
昇格もボタン一つで実行出来て、レプリケーション設定時と同様に何かSQLを実行する必要もありませんでした。
2023年1月現在ではまだプレビューですが早くGAして欲しい所です。
Azure Database for PostgreSQL フレキシブルサーバーのバックアップ、リストアについてはこちらに纏めています。