ap2=# SHOW POOL_NODES ; node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay | last_ status_change ---------+----------------+------+--------+-----------+---------+------------+-------------------+-------------------+------ --------------- 0 | localhost | 5433 | up | 0.500000 | standby | 3 | true | 0 | 2018- 12-16 22:53:53 1 | 192.168.86.135 | 5433 | up | 0.500000 | standby | 4 | false | 0 | 2018- 12-16 22:53:53 (2 rows)
pgpoolはpostgresqlサーバーがprimaryなのかstandbyなのかをSELECT pg_is_in_recovery()の結果で判断しています。
SELECT pg_is_in_recovery()を実行するユーザーとそのユーザーのパスワードとデータベースは、pgpool.confで指定します。
ユーザー名は「sr_check_user」、パスワードは「sr_check_password」、データベースは「sr_check_database」で指定します。
pgpool.confのデフォルト設定は以下のとおりです。
参考 : FAQ - pgpool Wiki
sr_check_user = 'nobody sr_check_password = '' sr_check_database = 'postgres'この設定の場合、nobodyでパスワードなしでデータベースpostgresにアクセスできないと、SELECT pg_is_in_recovery()が実行できません。
実行できるように、pgpool.confだったり、pg_hda.confだったり、データベースpostgresqlにユーザーnobodyを追加したりします。
実行できるようにすると、以下のように正しくroleが表示されます。
ap2=# SHOW POOL_NODES ; node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay | last_ status_change ---------+----------------+------+--------+-----------+---------+------------+-------------------+-------------------+------ --------------- 0 | localhost | 5433 | up | 0.500000 | primary | 0 | true | 0 | 2018- 12-16 23:12:16 1 | 192.168.86.135 | 5433 | up | 0.500000 | standby | 0 | false | 0 | 2018- 12-16 23:12:16 (2 rows)