PostgreSQL データベースは、高可用性、スケーラブル、フォールトトレラントなアプリケーションを構築するためのいくつかのレプリケーションソリューションをサポートしています。そのうちの1つはログ先行書き込みです。 (ウォルマート ) 運送。このソリューションでは、ファイルベースのログ配布またはストリーミングレプリケーション、あるいは可能な場合は両方のアプローチの組み合わせを使用して、スタンバイサーバーを実装できます。
ストリーミングレプリケーションでは、スタンバイ(レプリケーションスレーブ)データベースサーバーは、 WALをストリーミングするマスター/プライマリサーバーに接続するように構成されます。 WAL を待たずに、生成時にスタンバイに記録します 記入するファイル。
デフォルトでは、ストリーミングレプリケーションは非同期であり、プライマリサーバーでトランザクションがコミットされた後にデータがスタンバイサーバーに書き込まれます。これは、マスターサーバーでトランザクションをコミットしてからスタンバイサーバーで変更が表示されるまでにわずかな遅延があることを意味します。このアプローチの欠点の1つは、マスターサーバーがクラッシュした場合に、コミットされていないトランザクションが複製されない可能性があり、これによりデータが失われる可能性があることです。
このガイドは、 Postgresql 12を設定する方法を示しています CentOS 8でのマスタースタンバイストリーミングレプリケーション 。 「レプリケーションスロット」を使用します 」は、マスターサーバーが古い WALをリサイクルしないようにするためのソリューションとしてのスタンバイ用です。 スタンバイがそれらを受信する前のセグメント。
他の方法と比較して、レプリケーションスロットは必要であることがわかっているセグメントの数だけを保持することに注意してください。
テスト環境:
このガイドでは、 SSHを介してルートとしてマスターデータベースサーバーとスタンバイデータベースサーバーに接続していることを前提としています。 ( Sudoを使用します 管理者権限を持つ通常のユーザーとして接続している場合は、必要に応じてコマンドを実行します):
Postgresql master database server: 10.20.20.9 Postgresql standby database server: 10.20.20.8
両方のデータベースサーバーにPostgresql12が必要です インストールされている場合、それ以外の場合は、「CentOS8にPostgreSQLとpgAdminをインストールする方法」を参照してください。
<強い色:赤;">注 : PostgreSQL 12 restorey.conf の置き換えなど、レプリケーションの実装と構成に大きな変更が加えられています およびrecovery.confの変換 パラメータを通常のPostgreSQL構成パラメータに変更し、クラスタレプリケーションの構成をはるかに簡単にします。
ステップ1:PostgreSQLマスター/プライマリデータベースサーバーの構成
1。 マスターサーバーで、postgresシステムアカウントに切り替えて、マスターサーバーがクライアントからの接続をリッスンするIPアドレスを構成します。
この場合、*
を使用します すべてを意味します。
# su - postgres $ psql -c "ALTER SYSTEM SET listen_addresses TO '*';"
代替システムセット SQLコマンドは、SQLクエリを使用してサーバーの構成パラメータを直接変更するための強力な機能です。構成はpostgresql.conf.autoに保存されます データフォルダのルートにあるファイル(例: / var / lib / pgsql / 12 / data / )、 postgresql.confに保存されているものに加えて読み取ります 。ただし、前者の構成は、後者およびその他の関連ファイルの構成よりも優先されます。
PostgreSQLマスターでIPアドレスを構成する
2。 次に、 createuser を使用して、スタンバイサーバーからマスターサーバーへの接続に使用されるレプリケーションロールを作成します。 プログラム。次のコマンドでは、-P
フラグは、新しい役割と-e
のパスワードの入力を求めます createuserが生成してデータベースサーバーに送信するコマンドをエコーします。
# su – postgres $ createuser --replication -P -e replicator $ exit
Pgmasterでレプリケーションユーザーを作成する
3。 次に、 /var/lib/pgsql/12/data/pg_hba.confの最後に次のエントリを入力します スクリーンショットに示すように、データベースフィールドがレプリケーションに設定されたクライアント認証構成ファイル。
host replication replicator 10.20.20.8/24 md5
レプリケーション認証の構成
4。 ここで、 Postgres12を再起動します 次のsystemctlコマンドを使用して変更を適用するサービス。
# systemctl restart postgresql-12.service
5。 次に、 firewalldがある場合 サービスを実行している場合、スタンバイサーバーからマスターへのリクエストを許可するには、firewalld構成にPostgresqlサービスを追加する必要があります。
# firewall-cmd --add-service=postgresql --permanent # firewall-cmd --reload
ステップ2:スタンバイサーバーをブートストラップするためのベースバックアップを作成する
6。 次に、スタンバイサーバーからマスターサーバーのベースバックアップを作成する必要があります。これは、スタンバイサーバーをブートストラップするのに役立ちます。スタンバイサーバーでpostgresql12サービスを停止し、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.5 -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/
バックアップデータディレクトリの確認
レプリケーションスレーブは「ホットスタンバイ」で実行されます hot_standby の場合は、」モード postgresql.conf でパラメータがon(デフォルト値)に設定されている そしてstandby.signalがあります データディレクトリに存在するファイル。
9。 マスターサーバーに戻ると、 pgstandby1というレプリケーションスロットが表示されるはずです。 pg_replication_slotsを開いたとき 次のように表示します。
# 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;"
WALレシーバープロセスを確認する
および対応するWAL ストリーミングの状態とsync_stateを持つマスター/プライマリサーバーの送信者プロセス 非同期の場合は、このpg_stat_replicationpg_stat_replicationビューを確認できます。
$ psql -c "\x" -c "SELECT * FROM pg_stat_replication;"
マスターでWAL送信者プロセスを確認する
上のスクリーンショットから、ストリーミングレプリケーションは非同期です。次のセクションでは、オプションで同期レプリケーションを有効にする方法を示します。
13。 次に、マスターサーバーにテストデータベースを作成してレプリケーションが正常に機能しているかどうかをテストし、スタンバイサーバーに存在するかどうかを確認します。
[master] postgres =#CREATE DATABASE tecmint;
[standby] 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が表示されます。 同期の 。
$ psql -c "\x" -c "SELECT * FROM pg_stat_replication;"
マスターでWAL送信者プロセスを確認する
このガイドは終わりです。 PostgreSQL 12の設定方法を示しました CentOS 8でのマスタースタンバイデータベースストリーミングレプリケーション 。また、PostgreSQLデータベースクラスターで同期レプリケーションを有効にする方法についても説明しました。
レプリケーションには多くの用途があり、IT環境やアプリケーション固有の要件を満たすソリューションをいつでも選択できます。詳細については、PostgreSQL12のドキュメントのログ配布スタンバイサーバーを参照してください。
共有は思いやりがあります…Facebookで共有するTwitterで共有するLinkedinで共有するRedditで共有する