У меня pgpool-II v4.0.2, запущенный на сервере приложений, который управляет двумя узлами базы данных PostgreSQL 11.2 (0 - основной и 1 - резервный).Команда psql -c 'show pool_nodes' показывает работоспособность обоих узлов:
$ psql -c 'show pool_nodes'
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay | last_status_change
---------+-----------+------+--------+-----------+---------+------------+-------------------+-------------------+---------------------
0 | 10.1.1.20 | 5432 | up | 0.500000 | primary | 0 | true | 0 | 2019-02-22 21:37:55
1 | 10.1.3.20 | 5432 | up | 0.500000 | standby | 0 | false | 0 | 2019-02-22 21:44:49
Однако сегодня я начал видеть эту ошибку, записываемую в журнал каждые 10 секунд после тестирования оперативного восстановления и резервных процессов:
$ sudo -u postgres pgpool -n
---
2019-02-22 22:15:47: pid 22204: LOG: Setting up socket for 0.0.0.0:5432
2019-02-22 22:15:47: pid 22204: LOG: Setting up socket for :::5432
2019-02-22 22:15:47: pid 22204: LOG: find_primary_node_repeatedly: waiting for finding a primary node
2019-02-22 22:15:47: pid 22204: LOG: verify_backend_node_status: primary 0 owns only 0 standbys out of 1
2019-02-22 22:15:47: pid 22204: LOG: find_primary_node: primary node is 0
2019-02-22 22:15:47: pid 22204: LOG: find_primary_node: standby node is 1
2019-02-22 22:15:47: pid 22204: LOG: pgpool-II successfully started. version 4.0.2 (torokiboshi)
2019-02-22 22:15:47: pid 22204: LOG: node status[0]: 1
2019-02-22 22:15:47: pid 22204: LOG: node status[1]: 2
2019-02-22 22:15:47: pid 22238: LOG: verify_backend_node_status: primary 0 owns only 0 standbys out of 1
2019-02-22 22:15:57: pid 22238: LOG: verify_backend_node_status: primary 0 owns only 0 standbys out of 1
...
(repeats each 10 seconds)
Я не могу понять, что это значит и как это исправить.Потоковая репликация PostgreSQL работает нормально.То есть, когда я создаю и заполняю тестовую таблицу на первичном сервере, я вижу, что то же самое происходит в режиме ожидания.
Есть идеи, где я могу искать?Спасибо.
Обновление 23.02.19:
Я немного сузил его.Похоже, что, хотя мой внутренний сервер работает в потоковой репликации, следующий запрос возвращает NULL (https://github.com/beocommedia/pgpool-II/blob/4.0.2/src/main/pgpool_main.c#L3265-L3268):
2019-02-23 15:32:32: pid 17383: DEBUG: verify_backend_node_status: pg_stat_wal_receiver status for standby 1 is NULL
2019-02-23 15:32:32: pid 17383: LOCATION: pgpool_main.c:3271
Если я запрашиваю тот же резервный узел через pgpool, я получаю статус обратно:
$ psql -x -h 10.1.3.20 -c "SELECT status, conninfo FROM pg_stat_wal_receiver";
-[ RECORD 1 ]----------------------------------------------------------------
status | streaming
conninfo | user=repl passfile=/var/lib/postgresql/.pgpass dbname=replication
host=10.1.1.20 port=5432 fallback_application_name=walreceiver
sslmode=prefer sslcompression=0 krbsrvname=postgres
target_session_attrs=any
Есть идеи, чего мне здесь не хватает?