公式のPGPOOL冗長化手順(CentOS8使用)で発生したエラーについてご教授お願いします。
Q&A
Closed
解決したいこと
公式のpgpool冗長化手順(https://www.pgpool.net/docs/latest/ja/html/example-cluster.html)を
「8.2.9. 動作確認」の項目まで実施しました。
続く「8.2.9.1. PostgreSQL スタンバイサーバを構築」のpcp_recovery_node コマンドを実行しましたが、何もレスポンスがない状態のままになってしまいます。
公式手順との差分
- OSはCentOS8を使用(vagrant+virtualboxで実験しています。 CentOSのダウンロード先https://app.vagrantup.com/bento/boxes/centos-8)
- 手動viで編集している箇所はansibleによる編集後ファイルの上書きでのコピー
- postgres13をインストールしたあと、「su - postgres -c '/usr/pgsql-13/bin/initdb -E UTF8 --locale=C -A scram-sha-256 -W'」を実行。
発生している問題・エラー
[root@server1 ~]# pcp_recovery_node -h 192.168.137.150 -p 9898 -U pgpool -n 1
Password:
※pgpoolのパスワードを入力してENTERを押した後、何も進まなくなります。
自分で試したこと
- バックエンドの情報を確認するコマンドが続く手順に書いてあったので実行
コマンド結果から他のサーバの情報は見えていますが、statusがダウン状態と表示されていました。
[root@server1 ~]# 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 | true | 0 | | | 2021-05-30 12:23:49
1 | server2 | 5432 | down | 0.333333 | standby | 0 | false | 0 | | | 2021-05-30 11:59:47
2 | server3 | 5432 | down | 0.333333 | standby | 0 | false | 0 | | | 2021-05-30 11:59:47
(3 rows)
[root@server1 ~]#
- /var/lib/pgsql/13/data/recovery_1st_stage の内容を手動実行
[root@server1 ~]# vi /var/lib/pgsql/13/data/recovery_1st_stage
〜中略〜
45 ## Execute pg_basebackup to recovery Standby node
46 ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null postgres@$DEST_NODE_HOST -i ~/.ssh/id_rsa_pgpool "
47
48 set -o errexit
49 touch /tmp/asdf.txt ←/tmpにゴミファイルが作成されるか実験。
50 rm -rf $DEST_NODE_PGDATA
51 rm -rf $ARCHIVEDIR/*
52
53 ${PGHOME}/bin/pg_basebackup -h $PRIMARY_NODE_HOST -U $REPLUSER -p $PRIMARY_NODE_PORT -D $DEST_NODE_PGDATA -X stream
〜中略〜
※「pcp_recovery_node -h 192.168.137.150 -p 9898 -U pgpool -n 1」コマンドを実行後、server2の/tmpにゴミファイルが作成されていることを確認
[root@server2 ~]# ll /tmp
total 4
-rw-rw-r-- 1 postgres postgres 0 May 30 12:29 asdf.txt
-rw-r--r-- 1 postgres postgres 13 May 30 12:29 pgpool_status
drwx------ 3 root root 17 May 30 02:33 systemd-private-4476dc2f056a45869c4c192818fd8310-chronyd.service-H8MVhI
drwxr-xr-x. 3 vagrant root 23 May 30 10:51 vagrant-ansible
確認用に追加したtouchコマンドが動いていたため、後続の下記コマンドが動いていないのではないかと思い、手動実行しました。
${PGHOME}/bin/pg_basebackup -h $PRIMARY_NODE_HOST -U $REPLUSER -p $PRIMARY_NODE_PORT -D $DEST_NODE_PGDATA -X stream
手動実行結果後、正常にserver1からデータをコピーすることができました(初回投稿時はコマンドが間違っていました。)
※なお、replユーザーがpool_passwdに存在しないというエラーが出たため、pg_enc -m -k ~/.pgpoolkey -u repl -pを各サーバで実行しました。
[root@server2 ~]# sudo -u postgres /usr/pgsql-13/bin/pg_basebackup -h server1 -U repl -p 5432 -D $PGDATA -X stream
could not change directory to "/root": Permission denied
Password:
[root@server2 ~]#
[root@server2 ~]# ll $PGDATA
total 204
-rw------- 1 postgres postgres 3 May 30 17:54 PG_VERSION
-rw------- 1 postgres postgres 224 May 30 17:54 backup_label
〜略〜
pg_basebackupコマンドが失敗しているか、何かの接続を待ち受け状態に移行してそのまま固まってしまっているのではないかと思っています。
またserver2のpgpoolのログからはpcp_recovery_node -h 192.168.137.150 -p 9898 -U pgpool -n 1を実行した時間帯に下記出力がありましたが、調べても手がかりは掴めずでした。
2021-05-30 12:51:30: pid 10458: ERROR: failed to make persistent db connection
他に見るべきログやアクションなど、お手数ですが、どなたかご教授お願いします。