プライマリサーバーのレプリケーション設定
最初のステップとして、プライマリ PostgreSQL サーバーをレプリケーション用に準備します。これには、ネットワーク接続を許可するための設定ファイルの変更、必要な Write-Ahead Log (WAL) レベルの有効化、およびレプリケーション用の特別なユーザーの作成が含まれます。
1. PostgreSQL 設定ファイルの変更
レプリケーションの準備をするために、メインの設定ファイルである postgresql.conf を変更する必要があります。この大きなファイルを nano のようなテキストエディタで手動編集すると、多数のオプションがあるため困難でエラーが発生しやすくなります。より効率的で信頼性の高い方法は、コマンドラインツールを使用して、変更が必要な特定のセッティングを表示および更新することです。これにより、何百行ものスクロールを避け、誤った操作を防ぐことができます。
まず、変更が必要な設定である listen_addresses、wal_level、および max_wal_senders の現在の値を確認しましょう。
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
echo "--- Current Settings ---"
sudo grep -E "^#?\s*(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
これらの行は、おそらく # でコメントアウトされているでしょう。
次に、これらの設定を自動的に更新しましょう。以下のコマンドは、設定ファイルのバックアップを作成してから、各必要なパラメータを更新します。
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
## 変更を加える前にバックアップを作成
sudo cp $CONF_FILE ${CONF_FILE}.bak.$(date +%s)
## すべてのIPアドレスからの接続を許可するように listen_addresses を設定
sudo sed -i -E "s/^[#\s]*listen_addresses\s*=.*/listen_addresses = '*'/" "$CONF_FILE"
## レプリケーションログを有効にするために wal_level を 'replica' に設定
sudo sed -i -E "s/^[#\s]*wal_level\s*=.*/wal_level = replica/" "$CONF_FILE"
## 同時レプリケーション接続の最大数を設定
sudo sed -i -E "s/^[#\s]*max_wal_senders\s*=.*/max_wal_senders = 10/" "$CONF_FILE"
最後に、変更が正しく適用されたことを確認しましょう。以下のコマンドは、コメントアウトされた行を除外して、新しい値を表示します。
echo "--- Verified Settings ---"
sudo grep -E "^(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
出力は、更新されたアクティブな設定を示すはずです。
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
これらの設定が確認されたことで、サーバーは次のステップの準備が整いました。
2. 専用レプリケーションユーザーの作成
スーパーユーザーではなく、レプリケーション専用のユーザーを使用することはベストプラクティスです。replicator という名前のロールを作成しましょう。
psql コマンドラインクライアントを使用して PostgreSQL に接続します。
sudo -u postgres psql
次に、以下の SQL コマンドを実行して、レプリケーション権限とパスワードを持つユーザーを作成します。
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'replicapass';
CREATE ROLE という出力が表示されるはずです。これで、psql クライアントを終了します。
\q
3. レプリケーション接続の許可
次に、レプリカサーバーからの replicator ユーザーの接続を許可するようにサーバーを設定する必要があります。これは pg_hba.conf ファイルを編集することで行います。
nano でファイルを開きます。
sudo nano /etc/postgresql/14/main/pg_hba.conf
ファイルの末尾に以下の行を追加します。このルールは、ユーザー replicator が replication 疑似データベースに任意の IP アドレス (0.0.0.0/0) から接続することを許可することを示しています。この実験では、両方のサーバーが同じマシン上にあるため 127.0.0.1/32 を使用します。
host replication replicator 127.0.0.1/32 md5
Ctrl+X、Y、Enter を押して保存して終了します。
4. プライマリサーバーの再起動
これらのすべての設定変更を適用するには、PostgreSQL サービスを再起動する必要があります。
sudo service postgresql restart
これでプライマリサーバーはレプリケーション接続を受け入れる準備ができました。