ウェブサイト検索

CentOS 8 で PostgreSQL 12 ストリーミング レプリケーションを構成する方法


PostgreSQL データベースは、高可用性、スケーラブル、フォールト トレラントなアプリケーションを構築するためのいくつかのレプリケーション ソリューションをサポートしています。そのうちの 1 つはログ先行書き込み (WAL) です。 ) 配送。このソリューションにより、ファイルベースのログ配布またはストリーミング レプリケーション、または可能な場合は両方のアプローチの組み合わせを使用してスタンバイ サーバーを実装できます。

ストリーミング レプリケーションでは、スタンバイ (レプリケーション スレーブ) データベース サーバーがマスター/プライマリ サーバーに接続するように構成され、WAL レコードが生成されると、WAL を待たずにスタンバイにストリーミングします。入力するファイル。

デフォルトでは、ストリーミング レプリケーションは非同期であり、プライマリ サーバーでトランザクションがコミットされた後にデータがスタンバイ サーバーに書き込まれます。これは、マスター サーバーでトランザクションをコミットしてからスタンバイ サーバーで変更が表示されるまでの間にわずかな遅延があることを意味します。このアプローチの欠点の 1 つは、マスター サーバーがクラッシュした場合、コミットされていないトランザクションがレプリケートされず、データ損失が発生する可能性があることです。

このガイドでは、CentOS 8 上で Postgresql 12 マスター/スタンバイ ストリーミング レプリケーションを設定する方法を説明します。スタンバイが古い WAL セグメントを受信する前にマスター サーバーが古い WAL セグメントをリサイクルしないようにするための解決策として、スタンバイに「レプリケーション スロット」を使用します。

他の方法と比較して、レプリケーション スロットは、必要であることがわかっているセグメントの数のみを保持することに注意してください。

テスト環境:

このガイドでは、SSH 経由でマスターおよびスタンバイ データベース サーバーに root として接続していることを前提としています (管理者権限を持つ通常のユーザーとして接続している場合は、必要に応じて Sudo コマンドを使用します)。

Postgresql master database server: 		10.20.20.9
Postgresql standby database server:		10.20.20.8

両方のデータベース サーバーにPostgresql 12 がインストールされている必要があります。そうでない場合は、「CentOS 8 に PostgreSQL と pgAdmin をインストールする方法」を参照してください。

: PostgreSQL 12 には、recovery.conf の置き換えなど、レプリケーションの実装と構成に大きな変更が加えられています。 recovery.conf パラメータを通常の PostgreSQL 設定パラメータに変換することで、クラスタ レプリケーションの設定がはるかに簡単になります。

ステップ 1: PostgreSQL マスター/プライマリ データベース サーバーの構成

1. マスター サーバーで、postgres システム アカウントに切り替え、マスター サーバーがクライアントからの接続をリッスンする IP アドレスを構成します。

この場合、すべてを意味する * を使用します。

su - postgres
psql -c "ALTER SYSTEM SET listen_addresses TO '*';"

ALTER SYSTEM SET SQL コマンドは、SQL クエリを使用してサーバーの構成パラメータを直接変更できる強力な機能です。設定は、データ フォルダー (/var/lib/pgsql/12/data/ など) のルートにある postgresql.conf.auto ファイルに保存され、追加情報が読み取られます。 postgresql.conf に保存されているものに。ただし、前者の構成は、後者やその他の関連ファイルの構成より優先されます。

2. 次に、createuser プログラムを使用して、スタンバイ サーバーからマスター サーバーへの接続に使用されるレプリケーション ロールを作成します。次のコマンドでは、-P フラグにより新しいロールのパスワードの入力が要求され、-e により createuser が生成してデータベース サーバーに送信するコマンドがエコーされます。

su – postgres
createuser --replication -P -e replicator
exit

3. 次に、/var/lib/pgsql/12/data/pg_hba.conf クライアント認証構成ファイルの末尾に次のエントリを入力し、データベース フィールドを に設定します。スクリーンショットに示されているように、レプリケーションが行われます。

host    replication     replicator      10.20.20.8/24     md5

4. 次に、次の systemctl コマンドを使用して Postgres12 サービスを再起動し、変更を適用します。

systemctl restart postgresql-12.service

5. 次に、firewalld サービスを実行している場合は、スタンバイ サーバーからマスターへのリクエストを許可するために、firewalld 構成に Postgresql サービスを追加する必要があります。

firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload

ステップ 2: スタンバイ サーバーをブートストラップするためのベース バックアップの作成

6. 次に、スタンバイ サーバーからマスター サーバーのベース バックアップを作成する必要があります。これは、スタンバイ サーバーをブートストラップするのに役立ちます。スタンバイ サーバー上の postgresql 12 サービスを停止し、postgres ユーザー アカウントに切り替え、データ ディレクトリ (/var/lib/pgsql/12/data/) をバックアップし、その下にあるものをすべて削除する必要があります。図に示すように、ベース バックアップを作成する前に。

systemctl stop postgresql-12.service
su - postgres
cp -R /var/lib/pgsql/12/data /var/lib/pgsql/12/data_orig
rm -rf /var/lib/pgsql/12/data/*

7. 次に、pg_basebackup ツールを使用して、正しい所有権 ( 内のデータベース システム ユーザー、つまり Postgres) でベース バックアップを作成します。 Postgres ユーザー アカウント)と適切な権限が必要です。

次のコマンドのオプション:

  • -h – マスターサーバーであるホストを指定します。
  • -D – データ ディレクトリを指定します。
  • -U – 接続ユーザーを指定します。
  • -P – 進行状況レポートを有効にします。
  • -v – 詳細モードを有効にします。
  • -R – リカバリ構成の作成を有効にします。standby.signal ファイルを作成し、データの下の postgresql.auto.conf に接続設定を追加します。ディレクトリ。
  • -X – 必要な先行書き込みログ ファイル (WAL ファイル) をバックアップに含めるために使用されます。 stream の値は、バックアップの作成中に WAL をストリーミングすることを意味します。
  • -C – バックアップを開始する前に、-S オプションで指定されたレプリケーション スロットの作成を有効にします。
  • -S – レプリケーション スロット名を指定します。
pg_basebackup -h 10.20.20.9 -D /var/lib/pgsql/12/data -U replicator -P -v  -R -X stream -C -S pgstandby1
exit

8. バックアップ プロセスが完了すると、スタンバイ サーバー上の新しいデータ ディレクトリはスクリーンショットのようになります。 standby.signal が作成され、接続設定が postgresql.auto.conf に追加されます。 ls コマンドを使用してその内容を一覧表示できます。

ls -l /var/lib/pgsql/12/data/

postgresql.confhot_standby パラメータが on (デフォルト値) に設定されている場合、レプリケーション スレーブは「ホット スタンバイ」モードで実行されます。データ ディレクトリにはstandby.signal ファイルが存在します。

9. マスター サーバーに戻り、次のように pg_replication_slots ビューを開くと、pgstandby1 というレプリケーション スロットが表示されるはずです。

su - postgres
psql -c "SELECT * FROM pg_replication_slots;"
exit

10.postgresql.auto.conf ファイルに追加された接続設定を表示するには、cat コマンドを使用します。

cat /var/lib/pgsql/12/data/postgresql.auto.conf

11. 次に、次のように PostgreSQL サービスを開始して、スタンバイ サーバーで通常のデータベース操作を開始します。

systemctl start postgresql-12

ステップ 3: PostgreSQL ストリーミング レプリケーションのテスト

12. マスターとスタンバイの間で接続が正常に確立されると、スタンバイ サーバーの WAL レシーバー プロセスがストリーミングのステータスで表示されます。これを確認できます。 pg_stat_wal_receiver ビューを使用します。

psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"

ストリーミング状態と非同期のsync_stateを持つマスター/プライマリ サーバー内の対応するWAL送信者プロセスを確認すると、この pg_stat_replication pg_stat_replication ビューを確認できます。

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

上のスクリーンショットから、ストリーミング レプリケーションは非同期であることがわかります。次のセクションでは、オプションで同期レプリケーションを有効にする方法を説明します。

13. 次に、マスター サーバーにテスト データベースを作成し、スタンバイ サーバーに存在するかどうかを確認して、レプリケーションが正常に動作しているかどうかをテストします。
[マスター]postgres=# データベースの作成 tecmint;
[スタンバイ]postgres=# \l

オプション: 同期レプリケーションの有効化

14. 同期レプリケーションは、プライマリ データベースとスタンバイ/レプリカに同時にトランザクションをコミット (またはデータの書き込み) する機能を提供します。トランザクションによって行われたすべての変更が 1 つ以上の同期スタンバイ サーバーに転送された場合にのみ、トランザクションが成功したことを確認します。

同期レプリケーションを有効にするには、synchronous_commit も on に設定する必要があり (これはデフォルト値であるため、変更の必要はありません)、synchronous_standby_names パラメータも設定する必要があります。空ではない値に設定します。このガイドでは、すべてに設定します。

psql -c "ALTER SYSTEM SET synchronous_standby_names TO  '*';"

15. 次に、PostgreSQL 12 サービスをリロードして、新しい変更を適用します。

systemctl reload postgresql-12.service

16. ここで、プライマリ サーバー上の WAL 送信側プロセスをもう一度クエリすると、ストリーミングの状態と sync_state が表示されるはずです。strong>同期です。

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

このガイドはこれで終わりです。 CentOS 8PostgreSQL 12 のマスター/スタンバイ データベース ストリーミング レプリケーションを設定する方法を説明しました。 PostgreSQL データベース クラスターで同期レプリケーションを有効にする方法についても説明しました。

レプリケーションにはさまざまな用途があり、IT 環境やアプリケーション固有の要件を満たすソリューションをいつでも選択できます。詳細については、PostgreSQL 12 ドキュメントの「ログ配布スタンバイ サーバー」を参照してください。