Azure Database For PostgreSQLフレキシブルサーバーでレプリケーション設定

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フレキシブルサーバーでレプリケーション設定します。
レプリカの追加で新規レプリカサーバーを作成します。

レプリカ追加

レプリケーションのリソースメニューを選択します。
レプリカの追加を選択します。

レプリカサーバーの作成画面が表示されます。
サーバー名と場所を選択します。
コンピューティングとストレージや認証の設定は変更出来ません。

ネットワーク設定です。
接続方法は変更出来ません。
プライマリのファイアウォール規則は引き継がれます。

※プライマリがプライベートアクセスの場合はレプリカもプライベートアクセスである必要があります。

プライマリでGeo復元バックアップが有効になっている為、セキュリティ設定は変更出来ません。そのまま進めます。

確認画面です。
プライマリサーバー名、サーバー名を確認し間違いが無ければ作成します。

サーバー名とレプリケーション先を指定するだけで、非常に簡単にAzure Database for PostgreSQLフレキシブルサーバーのレプリカサーバーを作成する事が出来ました。

フレキシブルサーバーリソースの設定確認

レプリケーション設定後に作成されたリソースを確認します。

レプリケーション設定確認

プライマリ(test-postgresql-flexible-server)とレプリカ(test-postgresql-flexible-server-replica)の2つリソースが確認出来ます。

プライマリ(test-postgresql-flexible-server)でレプリケーション設定を確認します。
プライマリかレプリカかはロールに表示されます。
レプリカ(test-postgresql-flexible-server-replica)が表示されている事が確認出来ます。

同様にレプリカ(test-postgresql-flexible-server-replica)側でレプリケーション設定を確認します。
プライマリ(test-postgresql-flexible-server)が表示されている事が確認出来ます。

レプリカ(test-postgresql-flexible-server-replica)のサーバ設定を確認します。

プライマリと同様のコンピューティングとストレージ設定である事が確認出来ます

※レプリケーション設定後にコンピューティングサイズの変更は可能です。

レプリカは高可用性設定を有効にする事が出来ません。

※レプリケーション設定を解除して昇格させると高可用性を有効にする事が出来ます。

レプリカではバックアップは取得されません。

※レプリケーション設定を解除して昇格させた時点で初回バックアップが取得されます。

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
      • パスワード:プライマリと同じ

pgAdmin 4で接続設定

各サーバーへの接続設定します。

pgAdmin 4接続設定

pgAdmin 4を起動します。
Object→Register→Serverと選択します。

接続先のサーバー設定です。
Nameは接続設定名になります。
任意で設定します。

※今回はプライマリをoriginal、レプリカをreplicaとしています。

Connectionのタブで接続設定します。
Hostname/address、Username、Passwordを設定します。

Saveを選択して接続設定を保存します。

※通常運用時はセキュリティ(SSL等)に考慮した接続設定にします。

PostgreSQLのレプリケーション設定を確認

PostgreSQLでレプリケーションに関する設定を確認してみます。

PostgreSQLの設定を確認

プライマリ(test-postgresql-flexible-server)でsynchronous_standby_namesを確認します。
Settingでレプリケーションに関する値が確認出来ます。

PostgreSQL日本語訳(PostgreSQL 14.5文書)

 

【SQL文】

select name,setting from pg_settings where name like 'synchronous_standby_names’;

【SQL実行結果】

プライマリ(test-postgresql-flexible-server)でtransaction_read_onlyを確認すると、設定値がoffとなっており読み書きOK状態である事が分かります。

【SQL文】

select name,setting from pg_settings where name like 'transaction_read_only’;

【SQL実行結果】

レプリカ(test-postgresql-flexible-server-replica)でtransaction_read_onlyを確認します。
設定値がonになっており読み取り専用状態である事が確認出来ます。

【SQL文】

select name,setting from pg_settings where name like 'transaction_read_only’;

【SQL実行結果】

テーブルを作成してレプリケーション確認

PostgreSQLでテーブル作成してレプリケーションを確認します。
今回は検証なのでスキーマは指定していません。データベースもpostgresを利用しています。

PostgreSQLの操作

プライマリ(test-postgresql-flexible-server)でreplica_test_tableと言う名前でテーブルを作成します。
併せて1つサンプルレコードを作成します。

 

【SQL文】

create table replica_test_table (
 id integer,
 name varchar(8)
);
insert into replica_test_table values (1, 'reptest’);
Select * from replica_test_table;

【SQL実行結果】

レプリカ(test-postgresql-flexible-server-replica)で確認します。
テーブルとレコードが表示されておりレプリケーションされている事が分かります。

【SQL文】

Select * from replica_test_table;

【SQL実行結果】

レプリカ(test-postgresql-flexible-server-replica)で値を挿入してみます。読み取り専用レプリカなのでエラーになります。

【SQL文】

insert into replica_test_table values (2, 'reptest2’);

【SQL実行結果】

読み取り専用レプリカをプライマリへ昇格

レプリカを昇格

レプリケーションの設定でレプリカを昇格させます。
昇格はプライマリサーバー、レプリカサーバーどちらからでも可能です。

レプリカを昇格

レプリカ(test-postgresql-flexible-server-replica)でレプリケーションのリソースメニューを選択します。昇格を選択します。

確認メッセージが表示されます。
同じサーバーを再度レプリカ設定する事が出来ない事を確認するメッセージが表示されます。
チェックを入れて昇格するを選択します。

プライマリ(test-postgresql-flexible-server)でレプリケーション設定を確認します。レプリカが表示されません。

レプリカ(test-postgresql-flexible-server-replica)でもレプリカが表示されない事が確認出来ました。

昇格後に書き込み確認

プライマリに昇格したtest-postgresql-flexible-server-replicaでSQLを実行して読み取り専用が解除されているか確認します。

昇格後後の確認

プライマリに昇格したtest-postgresql-flexible-server-replicatransaction_read_onlyを確認します。offに変わっており読み書きOK状態である事が確認出来ます。

【SQL文】

select name,setting from pg_settings where name like 'transaction_read_only’;

【SQL実行結果】

プライマリに昇格したtest-postgresql-flexible-server-replicaで値を追加します。読み取り専用が解除されているのでエラーにならず値が挿入されている事が確認出来ます。

【SQL文】

insert into replica_test_table values (2, 'reptest2’);
Select * from replica_test_table;

【SQL実行結果】

最後に

Azure Database for PostgreSQL フレキシブルサーバーの読み取り専用レプリカ作成について纏めてみました。
レプリケーションはサーバー名と場所(リージョン)を指定するだけで、とても簡単に設定する事が出来ました。
昇格もボタン一つで実行出来て、レプリケーション設定時と同様に何かSQLを実行する必要もありませんでした。

2023年1月現在ではまだプレビューですが早くGAして欲しい所です。

Azure Database for PostgreSQL フレキシブルサーバーのバックアップ、リストアについてはこちらに纏めています。

スポンサーリンク