From 4e8fb107310d32e8e28f0922883f74114a7bf5da Mon Sep 17 00:00:00 2001 From: Masaya Kawamoto Date: Thu, 21 Oct 2021 05:51:11 +0000 Subject: [PATCH] Doc: update Japanese "Pgpool-II + Watchdog Setup Example" and sample scripts. Updating Japanese document and script to Pgpool-II 4.3 and Postgresql 14. English document will updated later. Pgpool-II 4.3 yum repository url is blank and sample script link is set master branch because there are still not existed. We will update those when Pgpool-II 4.3 release. --- doc.ja/src/sgml/example-cluster.sgml | 472 ++++++++++++------ src/sample/scripts/failover.sh.sample | 2 +- src/sample/scripts/follow_primary.sh.sample | 2 +- src/sample/scripts/pgpool_remote_start.sample | 2 +- src/sample/scripts/recovery_1st_stage.sample | 4 +- 5 files changed, 318 insertions(+), 164 deletions(-) diff --git a/doc.ja/src/sgml/example-cluster.sgml b/doc.ja/src/sgml/example-cluster.sgml index b46d14092..d646723ae 100644 --- a/doc.ja/src/sgml/example-cluster.sgml +++ b/doc.ja/src/sgml/example-cluster.sgml @@ -3,22 +3,30 @@ <productname>Pgpool-II</productname> + Watchdogの構築の例 - ここでは、ストリーミングレプリケーション構成のPostgreSQLをPgpool-IIで管理するシステムの構成例を示します。この例では、3台のPgpool-IIを使ってPostgreSQLを管理し、単一障害点やスプリットブレインの起きない堅牢なクラスタを運用することが可能です。 + ここでは、ストリーミングレプリケーション構成のPostgreSQLを + Pgpool-IIで管理するシステムの構成例を示します。 + この例では、3台のPgpool-IIを使ってPostgreSQLを + 管理し、単一障害点やスプリットブレインの起きない堅牢なクラスタを運用することが可能です。 - この設定例ではPostgreSQL 13を使っていますが、各種スクリプトはPostgreSQL 9.5以降での動作確認を行っています。 + この設定例ではPostgreSQL 14を使っていますが、 + 各種スクリプトはPostgreSQL 9.6以降での動作確認を行っています。 前提条件 - Pgpool-IIサーバとPostgreSQLサーバが同じサブネットにあることを前提とします。 + Pgpool-IIサーバとPostgreSQLサーバが + 同じサブネットにあることを前提とします。 全体構成 - 今回は、Linuxサーバを3台用意し、それぞれのホスト名は 「server1」、「server2」、「server3」 とします。使用するOSはすべてCentOS 7.4とします。それぞれのサーバにPostgreSQLとPgpool-IIをインストールします。3台のPostgreSQLがストリーミングレプリケーション構成になります。全体構成図は以下の通りです。 + 今回は、Linuxサーバを3台用意し、それぞれのホスト名は 「server1」、「server2」、「server3」 とします。 + 使用するOSはすべてCentOS 7.4とします。 + それぞれのサーバにPostgreSQLとPgpool-IIをインストールします。 + 3台のPostgreSQLがストリーミングレプリケーション構成になります。全体構成図は以下の通りです。
@@ -77,7 +85,7 @@ PostgreSQLバージョン - 13.0 + 14.0 - @@ -87,7 +95,7 @@ $PGDATA - /var/lib/pgsql/13/data + /var/lib/pgsql/14/data - @@ -123,7 +131,7 @@ Pgpool-IIバージョン - 4.2.0 + 4.3.0 - @@ -137,7 +145,7 @@ 9000 - watchdogが接続を受け付けるポート番号 + Watchdogが接続を受け付けるポート番号 9694 @@ -151,7 +159,7 @@ Pgpool-II起動ユーザ postgres (Pgpool-II 4.1以降) - Pgpool-II 4.0 以前のバージョンでは、デフォルトではrootでPgpool-IIを起動する + Pgpool-II 4.0以前のバージョンでは、デフォルトではrootでPgpool-IIを起動する Pgpool-II動作モード @@ -204,7 +212,10 @@ Watchdog /etc/pgpool-II/escalation.sh.sample - Pgpool-II のアクティブ/スタンバイ切り替え時に新アクティブ機以外で起動している仮想IPを停止するスクリプト。で使用します。 + + Pgpool-IIのアクティブ/スタンバイ切り替え時に新アクティブ機以外で起動している + 仮想IPを停止するスクリプト。で使用します。 + @@ -217,22 +228,23 @@ インストール - すべてのサーバにPostgreSQL 13.0とPgpool-II 4.2をRPMからインストールします。 + すべてのサーバにPostgreSQL 14.0とPgpool-II 4.3をRPMからインストールします。 PostgreSQLのインストールはPostgreSQLコミュニティのリポジトリを使います。 # yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm -# yum install -y postgresql13-server +# yum install -y postgresql14-server - Pgpool-IIのインストールはPgpool-II開発コミュニティが提供するYumリポジトリを用いてインストールします。 + Pgpool-IIのインストールはPgpool-II開発 + コミュニティが提供するYumリポジトリを用いてインストールします。 -# yum install -y https://www.pgpool.net/yum/rpms/4.2/redhat/rhel-7-x86_64/pgpool-II-release-4.2-1.noarch.rpm -# yum install pgpool-II-pg13-* +# yum install -y +# yum install pgpool-II-pg14-* @@ -245,11 +257,12 @@ PostgreSQLプライマリサーバのみでストリーミングレプリケーションの設定を行います。 - スタンバイサーバの設定は、プライマリが起動した状態で、Pgpool-IIのオンラインリカバリ機能を使って行うため不要です。 - この設定の例ではアーカイブリカバリを行うように設定します。 + スタンバイサーバの設定は、プライマリが起動した状態で、Pgpool-IIの + オンラインリカバリ機能を使って行うため不要です。この設定の例ではアーカイブリカバリを行うように設定します。 - まず、すべてのサーバにてWALを格納するディレクトリ/var/lib/pgsql/archivedirを事前に作成します。この設定例では、プライマリサーバのみでWALアーカイブをローカルで実施します。 + まず、すべてのサーバにてWALを格納するディレクトリ/var/lib/pgsql/archivedirを + 事前に作成します。この設定例では、プライマリサーバのみでWALアーカイブをローカルで実施します。 [全サーバ]# su - postgres @@ -258,9 +271,8 @@ 次にserver1にて、設定ファイル$PGDATA/postgresql.confを以下のように編集します。 - pg_rewindを使うためにwal_log_hintsを有効にしておきます。 - プライマリが後でスタンバイになる可能性があるので、hot_standby = onにしておきます。 - + pg_rewindを使うためにwal_log_hintsを有効にしておきます。 + プライマリが後でスタンバイになる可能性があるので、hot_standby = onにしておきます。 listen_addresses = '*' @@ -276,10 +288,15 @@ wal_log_hints = on - Pgpool-IIのヘルスチェック及びレプリケーションの遅延チェックでPostgreSQLのユーザを設定する必要があります。セキュリティ上の理由で、この設定例ではスーパーユーザを使わないようにします。 - Pgpool-IIのレプリケーションの遅延チェックとヘルスチェック用のユーザpgpoolを作成します。 - また、PostgreSQLプライマリサーバserver1でレプリケーション専用ユーザreplを作成します。 - Pgpool-II4.0からSCRAM認証を利用できるようになりました。この設定例では、scram-sha-256認証方式を利用します。 + Pgpool-IIのヘルスチェック及びレプリケーションの + 遅延チェックでPostgreSQLのユーザを設定する必要があります。 + セキュリティ上の理由で、この設定例ではスーパーユーザを使わないようにします。 + Pgpool-IIのレプリケーションの遅延チェックとヘルスチェック用の + ユーザpgpoolを作成します。 + また、PostgreSQLプライマリサーバserver1で + レプリケーション専用ユーザreplを作成します。 + Pgpool-II 4.0からSCRAM認証を利用できるようになりました。 + この設定例では、scram-sha-256認証方式を利用します。 まず、password_encryption = 'scram-sha-256'に変更してから、ユーザを登録します。 @@ -302,7 +319,10 @@ wal_log_hints = on pgpool pgpool - Pgpool-IIのレプリケーション遅延チェック()、ヘルスチェック専用ユーザ() + + Pgpool-IIのレプリケーション遅延チェック()、 + ヘルスチェック専用ユーザ() + postgres @@ -324,9 +344,10 @@ postgres=# \password postgres - コマンドでreplication_statカラムとreplication_sync_stateカラムを表示するには、 - pgpoolユーザはPostgreSQLのスーパーユーザーであるか、 - pg_monitorグループに所属する必要があります。(Pgpool-II4.1以降) + コマンドでreplication_statカラムと + replication_sync_stateカラムを表示するには、pgpoolユーザは + PostgreSQLのスーパーユーザーであるか、pg_monitorグループ + に所属する必要があります(Pgpool-II 4.1以降)。 以下のコマンドでpgpoolユーザをそのグループに所属させます。 @@ -335,12 +356,16 @@ GRANT pg_monitor TO pgpool; - (Pgpool-II 4.1以降)を利用する予定がある場合、"pgpool" ロールはPostgreSQLのスーパーユーザーであるか、pg_monitorグループに所属する必要があります。 + (Pgpool-II 4.1以降)を + 利用する予定がある場合、"pgpool" ロールはPostgreSQLの + スーパーユーザーであるか、pg_monitorグループに所属する必要があります。 - Pgpool-IIサーバとPostgreSQLバックエンドサーバが同じサブネットワークにあることを想定し、各ユーザがscram-sha-256認証方式で接続できるように、pg_hba.confを編集しておきます。 + Pgpool-IIサーバとPostgreSQLバックエンドサーバが + 同じサブネットワークにあることを想定し、各ユーザがscram-sha-256認証方式で接続できるように、 + pg_hba.confを編集しておきます。 host all all samenet scram-sha-256 @@ -350,7 +375,13 @@ host replication all samenet scram-sha-256 - 自動フェイルオーバ、オンラインリカバリ機能を利用するには、Pgpool-II起動ユーザ(デフォルトではroot)とpostgresユーザ間、postgresユーザとpostgresユーザ間が双方向にパスワードなしでSSH接続できる状態になっている必要があります。全サーバで以下のコマンドを実行し、SSHの設定を行います。生成される鍵ファイル名はid_rsa_pgpoolとします。 + 自動フェイルオーバ、オンラインリカバリ機能を利用するには、 + Pgpool-II起動ユーザ(Pgpool-II 4.0以前の + デフォルトではroot)とpostgresユーザ間、 + postgresユーザとpostgresユーザ間が + 双方向にパスワードなしでSSH接続できる状態になっている必要があります。 + 全サーバで以下のコマンドを実行し、SSHの設定を行います。 + 生成される鍵ファイル名はid_rsa_pgpoolとします。 [全サーバ]# cd ~/.ssh @@ -367,14 +398,21 @@ host replication all samenet scram-sha-256 [全サーバ]$ ssh-copy-id -i id_rsa_pgpool.pub postgres@server3 - 設定後、rootユーザ及びpostgresユーザからssh postgres@serverX -i ~/.ssh/id_rsa_pgpoolコマンドを実行し、パスワード入力せずログインできることを確認してください。 - 必要に応じて/etc/ssh/sshd_configを編集し、sshdを再起動してください。 + 設定後、rootユーザ及びpostgresユーザから + ssh postgres@serverX -i ~/.ssh/id_rsa_pgpoolコマンドを実行し、 + パスワード入力せずログインできることを確認してください。 + 必要に応じて/etc/ssh/sshd_configを編集し、 + sshdを再起動してください。 - replユーザのパスワード入力なしで、ストリーミングレプリケーションとオンラインリカバリを行うために、またはpostgresユーザでpg_rewindを実行するために、すべてのサーバにてpostgresユーザのホームディレクトリ/var/lib/pgsql に.pgpassを作成・配置し、パーミッションを 600 に設定しておきます。 + replユーザのパスワード入力なしで、ストリーミングレプリケーションと + オンラインリカバリを行うために、またはpostgresユーザで + pg_rewindを実行するために、すべてのサーバにて + postgresユーザのホームディレクトリ/var/lib/pgsqlに + .pgpassを作成・配置し、パーミッションを 600 に設定しておきます。 [全サーバ]# su - postgres @@ -392,7 +430,9 @@ server3:5432:postgres:postgres:<postgresユーザのパスワード> - Pgpool-IIやPostgreSQLに接続する際には、ファイアーウォールによって目的のポートが開けられていなければなりません。CentOS/RHEL7の場合、以下のように設定します。 + Pgpool-IIやPostgreSQLに接続する際には、 + ファイアーウォールによって目的のポートが開けられていなければなりません。 + CentOS/RHEL7の場合、以下のように設定します。 [全サーバ]# firewall-cmd --permanent --zone=public --add-service=postgresql @@ -411,8 +451,11 @@ server3:5432:postgres:postgres:<postgresユーザのパスワード> - Pgpool-IIを自動起動にした場合、サーバ起動後にPostgreSQLを起動できるだけの時間をに設定してください。 - search_primary_node_timeoutの間にバックエンドのPostgreSQLに接続できない場合、 + Pgpool-IIを自動起動にした場合、 + サーバ起動後にPostgreSQLを起動できるだけの時間を + に設定してください。 + search_primary_node_timeoutの間にバックエンドの + PostgreSQLに接続できない場合、 Pgpool-IIはPostgreSQLに接続できなくなります。 @@ -425,9 +468,10 @@ server3:5432:postgres:postgres:<postgresユーザのパスワード> pgpool_node_idファイルの作成 Pgpool-II 4.2以降、すべての設定パラメーターがすべてのホストで同一になりました。 - Watchdog機能が有効になっている場合、どの設定がどのホストであるかを区別するには、 + Watchdog機能が有効になっている場合、どの設定がどのホストであるかを区別するには、 pgpool_node_idファイルの設定が必要になります。 - pgpool_node_idファイルを作成し、そのファイルにpgpool(watchdog)ホストを識別するためのノード番号(0、1、2など)を追加します。 + pgpool_node_idファイルを作成し、 + そのファイルにpgpool(watchdog)ホストを識別するためのノード番号(0、1、2など)を追加します。 @@ -463,7 +507,9 @@ server3:5432:postgres:postgres:<postgresユーザのパスワード> <productname>Pgpool-II</productname>の設定 - Pgpool-II 4.2以降、すべての設定パラメーターがすべてのホストで同一になったので、どれか一つのノード上でpgpool.confを編集し、編集したpgpool.confファイルを他のpgpoolノードにコピーすれば良いです。 + Pgpool-II 4.2以降、すべての設定パラメーターがすべてのホストで同一になったので、 + どれか一つのノード上でpgpool.confを編集し、 + 編集したpgpool.confファイルを他のpgpoolノードにコピーすれば良いです。 @@ -474,7 +520,10 @@ server3:5432:postgres:postgres:<postgresユーザのパスワード> 今回の設定例では、ストリーミングレプリケーションモードを設定します。 - RPMからインストールした場合、すべてのPgpool-IIのサンプル設定ファイルは/etc/pgpool-IIにあります。今回はストリーミングレプリケーションモードのテンプレートとしてpgpool.conf.sample-streamサンプルファイルを使用します。 + RPMからインストールした場合、すべてのPgpool-IIのサンプル設定ファイルは + /etc/pgpool-IIにあります。 + 今回はストリーミングレプリケーションモードのテンプレートとして + pgpool.conf.sample-streamサンプルファイルを使用します。 [全サーバ]# cp -p /etc/pgpool-II/pgpool.conf.sample-stream /etc/pgpool-II/pgpool.conf @@ -484,7 +533,8 @@ server3:5432:postgres:postgres:<postgresユーザのパスワード> listen_addresses - Pgpool-IIが全てのIPアドレスから接続を受け付けるように、パラメータに'*'を設定します。 + Pgpool-IIが全てのIPアドレスから接続を受け付けるように、 + パラメータに'*'を設定します。 listen_addresses = '*' @@ -504,9 +554,14 @@ port = 9999 ストリーミングレプリケーションのチェック - レプリケーションの遅延チェックユーザにpgpoolユーザを設定します。 - この設定例では、はpgpool.confに指定せず、ファイルに作成します。作成方法については後述のを参照ください。 - Pgpool-II 4.0から、が空白の場合、Pgpool-IIは空のパスワードを使用する前にまずファイルからに指定したユーザのパスワードを取得できるか試みます。 + レプリケーションの遅延チェックユーザにpgpoolユーザを設定します。 + この設定例では、はpgpool.confに指定せず、 + ファイルに作成します。 + 作成方法については後述のを参照ください。 + Pgpool-II 4.0から、が空白の場合、 + Pgpool-IIは空のパスワードを使用する前に + まずファイルからに + 指定したユーザのパスワードを取得できるか試みます。 sr_check_user = 'pgpool' @@ -517,9 +572,14 @@ sr_check_password = '' ヘルスチェック - 自動フェイルオーバのため、ヘルスチェックを有効にします。のデフォルト値が0で、これはヘルスチェックが無効であることを意味します。 - また、ネットワークが不安定な場合には、バックエンドが正常であるにも関わらず、ヘルスチェックに失敗し、フェイルオーバや縮退運転が発生してしまう可能性があります。そのようなヘルスチェックの誤検知を防止するため、ヘルスチェックのリトライ回数をhealth_check_max_retries = 3 に設定しておきます。 - 、は前述の、と同様に設定します。 + 自動フェイルオーバのため、ヘルスチェックを有効にします。 + のデフォルト値が0で、これはヘルスチェックが無効であることを意味します。 + また、ネットワークが不安定な場合には、バックエンドが正常であるにも関わらず、 + ヘルスチェックに失敗し、フェイルオーバや縮退運転が発生してしまう可能性があります。 + そのようなヘルスチェックの誤検知を防止するため、ヘルスチェックのリトライ回数を + health_check_max_retries = 3 に設定しておきます。 + 、は + 前述の、と同様に設定します。 health_check_period = 5 @@ -538,7 +598,10 @@ health_check_max_retries = 3 バックエンドの設定 - また、バックエンド情報を前述のserver1、server2及びserver3の設定に従って設定しておきます。複数バックエンドノードを定義する場合、以下のbackend_*などのパラメータ名の末尾にノードIDを表す数字を付加することで複数のバックエンドを指定することができます。 + また、バックエンド情報を前述のserver1、server2 + 及びserver3の設定に従って設定しておきます。 + 複数バックエンドノードを定義する場合、以下のbackend_*などのパラメータ名の + 末尾にノードIDを表す数字を付加することで複数のバックエンドを指定することができます。 # - Backend Connection Settings - @@ -549,7 +612,7 @@ backend_port0 = 5432 # Port number for backend 0 backend_weight0 = 1 # Weight for backend 0 (only in load balancing mode) -backend_data_directory0 = '/var/lib/pgsql/13/data' +backend_data_directory0 = '/var/lib/pgsql/14/data' # Data directory for backend 0 backend_flag0 = 'ALLOW_TO_FAILOVER' # Controls various backend behavior @@ -557,19 +620,21 @@ backend_flag0 = 'ALLOW_TO_FAILOVER' backend_hostname1 = 'server2' backend_port1 = 5432 backend_weight1 = 1 -backend_data_directory1 = '/var/lib/pgsql/13/data' +backend_data_directory1 = '/var/lib/pgsql/14/data' backend_flag1 = 'ALLOW_TO_FAILOVER' backend_hostname2 = 'server3' backend_port2 = 5432 backend_weight2 = 1 -backend_data_directory2 = '/var/lib/pgsql/13/data' +backend_data_directory2 = '/var/lib/pgsql/14/data' backend_flag2 = 'ALLOW_TO_FAILOVER' - コマンドでreplication_statカラムとreplication_sync_stateカラムを表示するには、 - パラメータを設定する必要があります。ここではそれぞれのホスト名を設定します。(Pgpool-II 4.1以降) + コマンドでPgpool-II 4.1で追加された + replication_statカラムとreplication_sync_stateカラムを表示するには、 + パラメータを設定する必要があります。 + ここではそれぞれのホスト名を設定します。 ... backend_application_name0 = 'server1' @@ -584,11 +649,18 @@ backend_application_name2 = 'server3' フェイルオーバの設定 - PostgreSQLバックエンドノードがダウンした時に実行するスクリプトをに設定します。 - また、PostgreSQLサーバが3台の場合、プライマリノードのフェイルオーバ後に新しいプライマリからスレーブをリカバリするためにも設定する必要があります。はプライマリノードのフェイルオーバ後に実行されます。PostgreSQLサーバが2台の場合、の設定は不要です。 + PostgreSQLバックエンドノードがダウンした時に実行するスクリプトを + に設定します。 + また、PostgreSQLサーバが3台の場合、 + プライマリノードのフェイルオーバ後に新しいプライマリからスタンバイをリカバリするために + も設定する必要があります。 + はプライマリノードのフェイルオーバ後に実行されます。 + PostgreSQLサーバが2台の場合、の設定は不要です。 - それぞれの実行スクリプトの引数は、それぞれ実行時にPgpool-IIによってバックエンドの具体的な情報に置き換えられます。各引数の意味はをご参照ください。 + それぞれの実行スクリプトの引数は、それぞれ実行時にPgpool-II + によってバックエンドの具体的な情報に置き換えられます。 + 各引数の意味はをご参照ください。 failover_command = '/etc/pgpool-II/failover.sh %d %h %p %D %m %H %M %P %r %R %N %S' @@ -597,11 +669,13 @@ follow_primary_command = '/etc/pgpool-II/follow_primary.sh %d %h %p %D %m %H %M %N、%SはPgpool-II 4.1で追加された引数です。 - Pgpool-II 4.0 または以前のバージョンを利用している場合、これらの引数を指定できないので、ご注意ください。 + Pgpool-II 4.0または以前のバージョンを利用している場合、 + これらの引数を指定できないので、ご注意ください。 - サンプルスクリプトfailover.sh及びfollow_primary.shは + サンプルスクリプトfailover.sh及び + follow_primary.shは /etc/pgpool-II/配下にインストールされていますので、これらのファイルをコピーして作成します。 @@ -615,19 +689,23 @@ follow_primary_command = '/etc/pgpool-II/follow_primary.sh %d %h %p %D %m %H %M [全サーバ]# vi /etc/pgpool-II/failover.sh ... -PGHOME=/usr/pgsql-13 +PGHOME=/usr/pgsql-14 ... [全サーバ]# vi /etc/pgpool-II/follow_primary.sh ... -PGHOME=/usr/pgsql-13 +PGHOME=/usr/pgsql-14 ... - PCPコマンドを使用するにはユーザ認証が必要になるので、ユーザ名とmd5ハッシュに変換されたパスワードを"username:encrypted password"の形式でpcp.confファイルに設定します。 + PCPコマンドを使用するにはユーザ認証が必要になるので、 + ユーザ名とmd5ハッシュに変換されたパスワードを + "username:encrypted password"の形式で + pcp.confファイルに設定します。 - follow_primary.shでpgpoolユーザがPCP_USERに指定されている場合、 + follow_primary.shでpgpoolユーザが + PCP_USERに指定されている場合、 # cat /etc/pgpool-II/follow_primary.sh @@ -636,13 +714,16 @@ PCP_USER=pgpool ... - 以下のようにコマンドを利用し、ハッシュ化されたpgpoolユーザのパスワードエントリを/etc/pgpool-II/pcp.confに追加します。 + 以下のようにコマンドを利用し、 + ハッシュ化されたpgpoolユーザのパスワードエントリを/etc/pgpool-II/pcp.confに追加します。 [全サーバ]# echo 'pgpool:'`pg_md5 PCPコマンドパスワード` >> /etc/pgpool-II/pcp.conf - 前述のfollow_primary.shのスクリプトでパスワード入力なしでPCPコマンドを実行できるように、すべてのサーバでPgpool-IIの起動ユーザのホームディレクトリに.pcppassを作成します。 + 前述のfollow_primary.shのスクリプトでパスワード入力なしで + PCPコマンドを実行できるように、すべてのサーバで + Pgpool-IIの起動ユーザのホームディレクトリに.pcppassを作成します。 [全サーバ]# su - postgres @@ -660,8 +741,12 @@ PCP_USER=pgpool オンラインリカバリの設定 - 続いて、オンラインリカバリを行うためのPostgreSQLのユーザ名およびオンラインリカバリ時に呼び出されるコマンドrecovery_1st_stageを設定します。 - オンラインリカバリで実行されるpgpool_recovery関数はPostgreSQLのスーパーユーザ権限が必要なため、recovery_userにスーパーユーザを指定しなければなりません。ここでは、postrgesユーザを指定します。 + 続いて、オンラインリカバリを行うためのPostgreSQLのユーザ名 + 及びオンラインリカバリ時に呼び出されるコマンドrecovery_1st_stageを設定します。 + オンラインリカバリで実行されるpgpool_recovery関数は + PostgreSQLのスーパーユーザ権限が必要なため、 + recovery_userにスーパーユーザを指定しなければなりません。 + ここでは、postrgesユーザを指定します。 recovery_user = 'postgres' @@ -674,30 +759,33 @@ recovery_1st_stage_command = 'recovery_1st_stage' オンラインリカバリ用のサンプルスクリプトrecovery_1st_stage 及びpgpool_remote_startは - /etc/pgpool-II/配下にインストールされていますので、これらのファイルをプライマリサーバ(server1)のデータベースクラスタ配下に配置します。 + /etc/pgpool-II/配下にインストールされていますので、 + これらのファイルをプライマリサーバ(server1)のデータベースクラスタ配下に配置します。 -[server1]# cp -p /etc/pgpool-II/recovery_1st_stage.sample /var/lib/pgsql/13/data/recovery_1st_stage -[server1]# cp -p /etc/pgpool-II/pgpool_remote_start.sample /var/lib/pgsql/13/data/pgpool_remote_start -[server1]# chown postgres:postgres /var/lib/pgsql/13/data/{recovery_1st_stage,pgpool_remote_start} +[server1]# cp -p /etc/pgpool-II/recovery_1st_stage.sample /var/lib/pgsql/14/data/recovery_1st_stage +[server1]# cp -p /etc/pgpool-II/pgpool_remote_start.sample /var/lib/pgsql/14/data/pgpool_remote_start +[server1]# chown postgres:postgres /var/lib/pgsql/14/data/{recovery_1st_stage,pgpool_remote_start} 基本的にはPGHOMEを環境に合わせて変更すれば、動作します。 -[server1]# vi /var/lib/pgsql/13/data/recovery_1st_stage +[server1]# vi /var/lib/pgsql/14/data/recovery_1st_stage ... -PGHOME=/usr/pgsql-13 +PGHOME=/usr/pgsql-14 ... -[server1]# vi /var/lib/pgsql/13/data/pgpool_remote_start +[server1]# vi /var/lib/pgsql/14/data/pgpool_remote_start ... -PGHOME=/usr/pgsql-13 +PGHOME=/usr/pgsql-14 ... - また、オンラインリカバリ機能を使用するには、pgpool_recovery、pgpool_remote_start、pgpool_switch_xlogという関数が必要になるので、server1のtemplate1にpgpool_recoveryをインストールしておきます。 + また、オンラインリカバリ機能を使用するには、pgpool_recovery、 + pgpool_remote_start、pgpool_switch_xlogという関数が必要になるので、 + server1のtemplate1にpgpool_recoveryをインストールしておきます。 [server1]# su - postgres @@ -714,15 +802,24 @@ PGHOME=/usr/pgsql-13 クライアント認証の設定 - 事前設定の章で、Pgpool-IIとPostgreSQLの間に認証方式をscram-sha-256に設定しました。この設定例では、クライアントとPgpool-IIの間でもscram-sha-256認証方式を利用し接続するように設定します。 - Pgpool-IIのクライアント認証の設定ファイルはpool_hba.confと呼ばれ、RPMパッケージからインストールする場合、デフォルトでは/etc/pgpool-II配下にインストールされます。 - デフォルトではpool_hba.confによる認証は無効になっているので、pgpool.confでは以下の設定をonに変更します。 + 事前設定の章で、 + Pgpool-IIとPostgreSQLの間に + 認証方式をscram-sha-256に設定しました。 + この設定例では、クライアントとPgpool-IIの間でも + scram-sha-256認証方式を利用し接続するように設定します。 + Pgpool-IIのクライアント認証の設定ファイルは + pool_hba.confと呼ばれ、RPMパッケージからインストールする場合、 + デフォルトでは/etc/pgpool-II配下にインストールされます。 + デフォルトではpool_hba.confによる認証は無効になっているので、 + pgpool.confでは以下の設定をonに変更します。 enable_pool_hba = on - pool_hba.confのフォーマットはPostgreSQLのpg_hba.confとほとんど同じです。pgpoolとpostgresユーザをscram-sha-256認証に設定します。 + pool_hba.confのフォーマットはPostgreSQLの + pg_hba.confとほとんど同じです。 + pgpoolとpostgresユーザをscram-sha-256認証に設定します。 host all pgpool 0.0.0.0/0 scram-sha-256 @@ -730,15 +827,22 @@ host all postgres 0.0.0.0/0 scram-sha-256 - Pgpool-II 4.0の場合、pgpool.confファイル内の、 - 、、 - にはAES256暗号化形式、平文形式しか指定できないので、 - ご注意ください。 + Pgpool-II 4.1からpgpool.confファイル内の + 、、 + 、には + AES256暗号化形式、平文形式、md5ハッシュ形式が指定できます。 + Pgpool-II 4.0ではAES256暗号化形式、 + 平文形式が指定可能で、それ以前のバージョンでは平文形式のみが指定可能です。 - Pgpool-IIのクライアント認証で用いるデフォルトのパスワードファイル名はpool_passwdです。 - scram-sha-256認証を利用する場合、Pgpool-IIはそれらのパスワードを復号化するために復号鍵が必要となります。全サーバで復号鍵ファイルをPgpool-IIの起動ユーザpostgres(Pgpool-II 4.1以降)のホームディレクトリ配下に作成します。(Pgpool-II 4.0 以前のバージョンでは、デフォルトではrootユーザでPgpool-IIを起動する) + Pgpool-IIのクライアント認証で用いるデフォルトの + パスワードファイル名はpool_passwdです。 + scram-sha-256認証を利用する場合、 + Pgpool-IIはそれらのパスワードを復号化するために復号鍵が必要となります。 + 全サーバで復号鍵ファイルをPgpool-IIの起動ユーザ + postgres (Pgpool-II 4.0以前のバージョンでは + root) のホームディレクトリ配下に作成します。 [全サーバ]# su - postgres @@ -746,8 +850,9 @@ host all postgres 0.0.0.0/0 scram-sha-256 [全サーバ]$ chmod 600 ~/.pgpoolkey - 「pg_enc -m -k /path/to/.pgpoolkey -u ユーザ名 -p」 コマンドを実行すると、ユーザ名とAES256で暗号化したパスワードのエントリがに登録されます。 - がまだ存在しなければ、pgpool.confと同じディレクトリ内に作成されます。 + 「pg_enc -m -k /path/to/.pgpoolkey -u username -p」を実行すると、 + ユーザ名とAES256で暗号化したパスワードのエントリがに登録されます。 + がまだ存在しなければ、pgpool.confと同じディレクトリ内に作成されます。 [全サーバ]# su - postgres @@ -765,59 +870,72 @@ postgres:AESHs/pWL5rtXy2IwuzroHfqg== Watchdogの設定 - デフォルトではwatchdog機能が無効のため、server1、server2及びserver3でwatchdogを有効にします。 + デフォルトではWatchdog機能が無効のため、 + Watchdogを有効にします。 use_watchdog = on - アクティブ機が立ち上げる仮想IPをdelegate_IPに指定します。仮想 IP はまだ使われていないIPアドレスを指定してください。server1、server2及びserver3の共通の設定です。 + アクティブ機が立ち上げる仮想IPをdelegate_IPに指定します。 + 仮想IPはまだ使われていないIPアドレスを指定してください。 delegate_IP = '192.168.137.150' - 仮想IPの起動/停止、ARPリクエストの送信を行う設定パラメータ、、に、ネットワーク環境に合わせてネットワークインターフェース名を設定します。 + 仮想IPの起動/停止、ARPリクエストの送信を行う設定パラメータ + 、、に、 + ネットワーク環境に合わせてネットワークインターフェース名を設定します。 今回の例で使ったネットワークインターフェースは「enp0s8」となっています。 if_up/down_cmdやarping_cmdを実行するにはroot権限が必要となりますので、 一般ユーザが実行できるようにip/arpingコマンドにsetuidを設定するか、 - Pgpool-II起動ユーザ、デフォルトではpostgresユーザ (Pgpool-II 4.1以降) がパスワードなしにsudoを実行できるように設定する必要があります。 + Pgpool-II起動ユーザ、 + デフォルトではpostgresユーザ (Pgpool-II 4.1以降) が + パスワードなしにsudoを実行できるように設定する必要があります。 - RPMからインストールした場合、postgresユーザがパスワードなしにsudoを介してip/arpingを実行できるように設定済みです。 - + RPMからインストールした場合、postgresユーザがパスワードなしに + sudoを介してip/arpingを実行できるように設定済みです。 + postgres ALL=NOPASSWD: /sbin/ip postgres ALL=NOPASSWD: /usr/sbin/arping - + ここでは、sudoを介して実行するように設定します。 - + if_up_cmd = '/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev enp0s8 label enp0s8:0' if_down_cmd = '/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev enp0s8' arping_cmd = '/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I enp0s8' - + - /etc/sudoersで「Defaults requiretty」を設定している場合は、pgpoolの起動ユーザがttyなしでif_up_cmd、 - if_down_cmd及びarping_cmdコマンドを実行できるように設定する必要があります。 + /etc/sudoersで「Defaults requiretty」を設定している場合は、 + Pgpool-IIの起動ユーザがttyなしで + if_up_cmd、if_down_cmd + 及びarping_cmdコマンドを実行できるように設定する必要があります。 - ipコマンドやarpingコマンドのパスがデフォルトのパスと異なる場合、環境に合わせてやを設定しておいてください。 - ただし、 if_up/down_cmd及びarping_cmdに指定したコマンドが"/"で始まる場合、 フルパスとみなしif_cmd_path及びarping_pathの設定を無視します。 + ipコマンドやarpingコマンドのパスがデフォルトのパスと異なる場合、 + 環境に合わせてやを設定しておいてください。 + ただし、if_up/down_cmd及びarping_cmdに指定したコマンドが"/"で始まる場合、 + フルパスとみなしif_cmd_path及びarping_pathの設定を無視します。 if_cmd_path = '/sbin' arping_path = '/usr/sbin' - 各watchdogが稼働するサーバ情報を設定しておきます。pgpool_portXにはのportに設定されているポート番号を指定します。 + 各Watchdogが稼働するサーバ情報を設定しておきます。 + pgpool_portXにはの + portに設定されているポート番号を指定します。 hostname0 = 'server1' @@ -841,7 +959,8 @@ pgpool_port2 = 9999 - Watchdog死活監視の設定では、死活監視の方法を指定する、 + Watchdog死活監視の設定では、 + 死活監視の方法を指定する、 監視間隔(秒)を指定するを設定します。 この設定例では、死活監視の方法はhearbeatを用います。 @@ -896,8 +1015,10 @@ wd_heartbeat_deadtime = 30 # (change requires restart) - Watchdog プロセスが異常終了した場合に、旧アクティブ機に仮想IPが残ったまま、新アクティブ機で同じ仮想IPを起動してしまう可能性があります。 - それを防ぐためにに、新アクティブ機以外のPgpool-IIノードの仮想IPを停止させるスクリプトを設定します。 + Watchdogプロセスが異常終了した場合に、 + 旧アクティブ機に仮想IPが残ったまま、新アクティブ機で同じ仮想IPを起動してしまう可能性があります。 + それを防ぐためにに、新アクティブ機以外の + Pgpool-IIノードの仮想IPを停止させるスクリプトを設定します。 wd_escalation_command = '/etc/pgpool-II/escalation.sh' @@ -905,7 +1026,8 @@ wd_escalation_command = '/etc/pgpool-II/escalation.sh' # (change requires restart)   - サンプルスクリプト escalation.sh は /etc/pgpool-II/配下にインストールされています。 + サンプルスクリプトescalation.shは + /etc/pgpool-II/配下にインストールされています。 [全サーバ]# cp -p /etc/pgpool-II/escalation.sh{.sample,} @@ -915,23 +1037,25 @@ wd_escalation_command = '/etc/pgpool-II/escalation.sh' サーバのホスト名、仮想IP、仮想IPを設定するネットワークインターフェース名を環境に合わせて変更してください。 - + [全サーバ]# vi /etc/pgpool-II/escalation.sh ... PGPOOLS=(server1 server2 server3) VIP=192.168.137.150 DEVICE=enp0s8 ... - + - Watchdogノードの数が偶数の場合は、パラメータをonにする必要があります。 + Watchdogノードの数が偶数の場合は、 + パラメータをonにする必要があります。 - use_watchdog = onの場合は、pgpoolノード番号をpgpool_node_idに設定する必要があります。 + use_watchdog = onの場合は、Pgpool-IIノード番号を + pgpool_node_idに設定する必要yu-があります。 詳細はを参照ください。 @@ -941,7 +1065,7 @@ DEVICE=enp0s8 ログの設定 Pgpool-II 4.2以降、ログ収集プロセスが追加されました。 - ここでは、ログ収集プロセス(logging_collector)を有効にします。 + ここでは、ログ収集プロセス(logging_collector)を有効にします。 log_destination = 'stderr' @@ -961,8 +1085,9 @@ log_rotation_size = 10MB - ここで、server1のpgpool.confの設定は完了です。 - server1のpgpool.confを他のノード(server2、server3)にコピーします。 + ここで、server1のpgpool.confの設定は完了です。 + server1のpgpool.confを + 他のノード(server2、server3)にコピーします。 [server1]# scp -p /etc/pgpool-II/pgpool.conf root@server2:/etc/pgpool-II/pgpool.conf @@ -974,8 +1099,11 @@ log_rotation_size = 10MB /etc/sysconfig/pgpoolの設定 - Pgpool-II起動時にpgpool_statusファイルが存在する場合、Pgpool-IIはpgpool_statusファイルからバックエンドの状態(up/down)を読み取ります。 - Pgpool-II起動時にpgpool_statusファイルを無視させたい場合、/etc/sysconfig/pgpoolの起動オプションOPTSに「-D」を追加します。 + Pgpool-II起動時にpgpool_statusファイルが存在する場合、 + Pgpool-IIはpgpool_statusファイルから + バックエンドの状態(up/down)を読み取ります。 + Pgpool-II起動時にpgpool_statusファイルを無視させたい場合、 + /etc/sysconfig/pgpoolの起動オプションOPTSに「-D」を追加します。 [全サーバ]# vi /etc/sysconfig/pgpool @@ -987,7 +1115,12 @@ OPTS=" -D -n" システムの起動と停止 - Pgpool-IIの設定が完了したら、次にPgpool-IIを起動します。Pgpool-IIを起動する前に、バックエンドのPostgreSQLをあらかじめ起動する必要があります。また、PostgreSQLを停止する場合、Pgpool-IIを先に停止する必要があります。 + Pgpool-IIの設定が完了したら、 + 次にPgpool-IIを起動します。 + Pgpool-IIを起動する前に、 + バックエンドのPostgreSQLをあらかじめ起動する必要があります。 + また、PostgreSQLを停止する場合、 + Pgpool-IIを先に停止する必要があります。 @@ -995,7 +1128,9 @@ OPTS=" -D -n" Pgpool-IIの起動 - 前述の事前設定の章でPgpool-IIの自動起動が設定済なので、ここでシステム全体を再起動するか、以下のコマンドを実行してください。 + 前述の事前設定の章で + Pgpool-IIの自動起動が設定済なので、 + ここでシステム全体を再起動するか、以下のコマンドを実行してください。 # systemctl start pgpool.service @@ -1006,7 +1141,7 @@ OPTS=" -D -n" Pgpool-IIの停止 - # systemctl stop pgpool.service +# systemctl stop pgpool.service @@ -1015,16 +1150,22 @@ OPTS=" -D -n" 動作確認 - これから、動作確認を行います。まず、server1、server2、server3で以下のコマンドでPgpool-IIを起動します。 + これから、動作確認を行います。 + まず、server1、server2、server3で + 以下のコマンドでPgpool-IIを起動します。 - # systemctl start pgpool.service +# systemctl start pgpool.service PostgreSQL スタンバイサーバを構築 - まず、Pgpool-IIのオンラインリカバリ機能を利用し、スタンバイサーバを構築します。pcp_recovery_nodeコマンドで実行されるrecovery_1st_stage_commandパラメータに指定したrecovery_1st_stageとpgpool_remote_startスプリクトが実行されるので、この 2つのスクリプトが現在稼働中のプライマリサーバserver1のデータベースクラスタの下に存在することを確認します。 + まず、Pgpool-IIのオンラインリカバリ機能を利用し、スタンバイサーバを構築します。 + pcp_recovery_nodeコマンドで実行されるrecovery_1st_stage_command + パラメータに指定したrecovery_1st_stageとpgpool_remote_start + スプリクトが実行されるので、この2つのスクリプトが現在稼働中のプライマリサーバserver1の + データベースクラスタの下に存在することを確認します。 # pcp_recovery_node -h 192.168.137.150 -p 9898 -U pgpool -n 1 @@ -1036,24 +1177,27 @@ Password: pcp_recovery_node -- Command Successful - server2とserver3のPostgreSQLがスタンバイとして起動されていることを確認します。 + server2とserver3のPostgreSQLが + スタンバイとして起動されていることを確認します。 # psql -h 192.168.137.150 -p 9999 -U pgpool postgres -c "show pool_nodes" Password for user pgpool: -node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change ----------+----------+------+--------+-----------+---------+------------+-------------------+-------------------+-------------------+------------------------+--------------------- -0 | server1 | 5432 | up | 0.333333 | primary | 0 | false | 0 | | | 2019-08-06 11:13:17 -1 | server2 | 5432 | up | 0.333333 | standby | 0 | true | 0 | streaming | async | 2019-08-06 11:13:25 -2 | server3 | 5432 | up | 0.333333 | standby | 0 | false | 0 | streaming | async | 2019-08-06 11:14:20 + node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change +---------+----------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+--------------------- + 0 | server1 | 5432 | up | up | 0.333333 | primary | primary | 0 | false | 0 | | | 2021-10-19 07:00:57 + 1 | server2 | 5432 | up | up | 0.333333 | standby | standby | 0 | true | 0 | streaming | async | 2021-10-19 07:00:57 + 2 | server3 | 5432 | up | up | 0.333333 | standby | standby | 0 | false | 0 | streaming | async | 2021-10-19 07:00:57 (3 rows) - watchdogアクティブ/スタンバイの切り替え + Watchdogアクティブ/スタンバイの切り替え - pcp_watchdog_infoでPgpool-IIのwatchdogの情報を確認します。最初に起動したPgpool-IIが「LEADER」になります。 + pcp_watchdog_infoでPgpool-II + のWatchdogの情報を確認します。 + 最初に起動したPgpool-IIが「LEADER」になります。 # pcp_watchdog_info -h 192.168.137.150 -p 9898 -U pgpool @@ -1065,7 +1209,11 @@ server2:9999 Linux server2 server2 9999 9000 7 STANDBY #スタンバイとして server3:9999 Linux server3 server3 9999 9000 7 STANDBY #スタンバイとして稼働 - アクティブであるserver1のPgpool-IIを停止し、server2またはserver3がスタンバイからアクティブに昇格することを確認します。server1を停止する方法はPgpool-IIを停止する、またはマシンをシャットダウンします。ここでは、Pgpool-IIを停止します。 + アクティブであるserver1のPgpool-II + を停止し、server2またはserver3が + スタンバイからアクティブに昇格することを確認します。 + server1を停止する方法はPgpool-IIを停止する、 + またはマシンをシャットダウンします。ここでは、Pgpool-IIを停止します。 [server1]# systemctl stop pgpool.service @@ -1102,30 +1250,32 @@ server3:9999 Linux server3 server3 9999 9000 7 STANDBY # psql -h 192.168.137.150 -p 9999 -U pgpool postgres -c "show pool_nodes" Password for user pgpool: -node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change ----------+----------+------+--------+-----------+---------+------------+-------------------+-------------------+-------------------+------------------------+--------------------- -0 | server1 | 5432 | up | 0.333333 | primary | 0 | false | 0 | | | 2019-08-06 11:13:17 -1 | server2 | 5432 | up | 0.333333 | standby | 0 | true | 0 | streaming | async | 2019-08-06 11:13:25 -2 | server3 | 5432 | up | 0.333333 | standby | 0 | false | 0 | streaming | async | 2019-08-06 11:14:20 + node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change +---------+----------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+--------------------- + 0 | server1 | 5432 | up | up | 0.333333 | primary | primary | 0 | false | 0 | | | 2021-10-19 07:08:14 + 1 | server2 | 5432 | up | up | 0.333333 | standby | standby | 0 | false | 0 | streaming | async | 2021-10-19 07:08:14 + 2 | server3 | 5432 | up | up | 0.333333 | standby | standby | 0 | true | 0 | streaming | async | 2021-10-19 07:08:14 (3 rows) - 次にプライマリであるserver1のPostgreSQLを停止し、フェイルオーバするかどうか確認してみます。 + 次にプライマリであるserver1のPostgreSQLを停止し、 + フェイルオーバするかどうか確認してみます。 -[server1]$ pg_ctl -D /var/lib/pgsql/13/data -m immediate stop +[server1]$ pg_ctl -D /var/lib/pgsql/14/data -m immediate stop - ノード1を停止後、フェイルオーバが発生し、server2がプライマリに昇格したことを確認します。 + ノード1を停止後、フェイルオーバが発生し、server2が + プライマリに昇格したことを確認します。 # psql -h 192.168.137.150 -p 9999 -U pgpool postgres -c "show pool_nodes" Password for user pgpool: -node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change ----------+----------+------+--------+-----------+---------+------------+-------------------+-------------------+-------------------+------------------------+--------------------- -0 | server1 | 5432 | down | 0.333333 | standby | 0 | false | 0 | | | 2019-08-06 11:36:03 -1 | server2 | 5432 | up | 0.333333 | primary | 0 | true | 0 | | | 2019-08-06 11:36:03 -2 | server3 | 5432 | up | 0.333333 | standby | 0 | false | 0 | streaming | async | 2019-08-06 11:36:15 + node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change +---------+----------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+--------------------- + 0 | server1 | 5432 | down | down | 0.333333 | standby | unknown | 0 | false | 0 | | | 2021-10-19 07:10:01 + 1 | server2 | 5432 | up | up | 0.333333 | primary | primary | 0 | false | 0 | | | 2021-10-19 07:10:01 + 2 | server3 | 5432 | up | up | 0.333333 | standby | standby | 0 | true | 0 | streaming | async | 2021-10-19 07:10:03 (3 rows) @@ -1146,33 +1296,37 @@ f [server2]# psql -h server2 -p 5432 -U pgpool postgres -c "select * from pg_stat_replication" -x -[ RECORD 1 ]----+------------------------------ -pid | 11059 -usesysid | 16392 +pid | 7198 +usesysid | 16385 usename | repl application_name | server3 client_addr | 192.168.137.103 client_hostname | -client_port | 48694 -backend_start | 2019-08-06 11:36:07.479161+09 +client_port | 40916 +backend_start | 2021-10-19 07:10:03.067241+00 backend_xmin | state | streaming -sent_lsn | 0/75000148 -write_lsn | 0/75000148 -flush_lsn | 0/75000148 -replay_lsn | 0/75000148 +sent_lsn | 0/12000260 +write_lsn | 0/12000260 +flush_lsn | 0/12000260 +replay_lsn | 0/12000260 write_lag | flush_lag | replay_lag | sync_priority | 0 sync_state | async -reply_time | 2019-08-06 11:42:59.823961+09 +reply_time | 2021-10-19 07:11:53.886477+00 オンラインリカバリ - 次に、Pgpool-IIのオンラインリカバリ機能を利用し、先ほど停止した旧プライマリサーバをスタンバイとして復旧させます。pcp_recovery_nodeコマンドで実行されるrecovery_1st_stage_commandパラメータに指定したrecovery_1st_stageとpgpool_remote_startスプリクトが現在稼働中のプライマリサーバserver2のデータベースクラスタの下に存在することを確認します。 + 次に、Pgpool-IIのオンラインリカバリ機能を利用し、 + 先ほど停止した旧プライマリサーバをスタンバイとして復旧させます。 + pcp_recovery_nodeコマンドで実行されるrecovery_1st_stage_command + パラメータに指定したrecovery_1st_stageとpgpool_remote_startスプリクトが + 現在稼働中のプライマリサーバserver2のデータベースクラスタの下に存在することを確認します。 # pcp_recovery_node -h 192.168.137.150 -p 9898 -U pgpool -n 0 @@ -1185,11 +1339,11 @@ pcp_recovery_node -- Command Successful # psql -h 192.168.137.150 -p 9999 -U pgpool postgres -c "show pool_nodes" Password for user pgpool: -node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change ----------+----------+------+--------+-----------+---------+------------+-------------------+-------------------+-------------------+------------------------+--------------------- -0 | server1 | 5432 | up | 0.333333 | standby | 0 | false | 0 | streaming | async | 2019-08-06 11:48:05 -1 | server2 | 5432 | up | 0.333333 | primary | 0 | false | 0 | | | 2019-08-06 11:36:03 -2 | server3 | 5432 | up | 0.333333 | standby | 0 | true | 0 | streaming | async | 2019-08-06 11:36:15 + node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change +---------+----------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+--------------------- + 0 | server1 | 5432 | up | up | 0.333333 | standby | standby | 0 | true | 0 | streaming | async | 2021-10-19 07:14:06 + 1 | server2 | 5432 | up | up | 0.333333 | primary | primary | 0 | false | 0 | | | 2021-10-19 07:10:01 + 2 | server3 | 5432 | up | up | 0.333333 | standby | standby | 0 | false | 0 | streaming | async | 2021-10-19 07:10:03 (3 rows) diff --git a/src/sample/scripts/failover.sh.sample b/src/sample/scripts/failover.sh.sample index 949cd401e..b9fac7dc5 100755 --- a/src/sample/scripts/failover.sh.sample +++ b/src/sample/scripts/failover.sh.sample @@ -31,7 +31,7 @@ NEW_MAIN_NODE_PGDATA="${10}" OLD_PRIMARY_NODE_HOST="${11}" OLD_PRIMARY_NODE_PORT="${12}" -PGHOME=/usr/pgsql-13 +PGHOME=/usr/pgsql-14 REPL_SLOT_NAME=${FAILED_NODE_HOST//[-.]/_} diff --git a/src/sample/scripts/follow_primary.sh.sample b/src/sample/scripts/follow_primary.sh.sample index c9a453b9b..a632fc5d7 100755 --- a/src/sample/scripts/follow_primary.sh.sample +++ b/src/sample/scripts/follow_primary.sh.sample @@ -30,7 +30,7 @@ OLD_PRIMARY_NODE_ID="$8" NEW_PRIMARY_NODE_PORT="$9" NEW_PRIMARY_NODE_PGDATA="${10}" -PGHOME=/usr/pgsql-13 +PGHOME=/usr/pgsql-14 ARCHIVEDIR=/var/lib/pgsql/archivedir REPLUSER=repl PCP_USER=pgpool diff --git a/src/sample/scripts/pgpool_remote_start.sample b/src/sample/scripts/pgpool_remote_start.sample index 365241f9a..67a1b968c 100755 --- a/src/sample/scripts/pgpool_remote_start.sample +++ b/src/sample/scripts/pgpool_remote_start.sample @@ -6,7 +6,7 @@ set -o xtrace DEST_NODE_HOST="$1" DEST_NODE_PGDATA="$2" -PGHOME=/usr/pgsql-13 +PGHOME=/usr/pgsql-14 echo pgpool_remote_start: start: remote start Standby node $DEST_NODE_HOST diff --git a/src/sample/scripts/recovery_1st_stage.sample b/src/sample/scripts/recovery_1st_stage.sample index ca4e60e91..c93fdb47e 100755 --- a/src/sample/scripts/recovery_1st_stage.sample +++ b/src/sample/scripts/recovery_1st_stage.sample @@ -9,9 +9,9 @@ DEST_NODE_PGDATA="$3" PRIMARY_NODE_PORT="$4" DEST_NODE_ID="$5" DEST_NODE_PORT="$6" +PRIMARY_NODE_HOST="$7" -PRIMARY_NODE_HOST=$(hostname) -PGHOME=/usr/pgsql-13 +PGHOME=/usr/pgsql-14 ARCHIVEDIR=/var/lib/pgsql/archivedir REPLUSER=repl REPL_SLOT_NAME=${DEST_NODE_HOST//[-.]/_} -- 2.39.5