Ошибка журнала Pgpool: Первичному 0 принадлежит только 0 резервных серверов из 1 - PullRequest
0 голосов
/ 23 февраля 2019

У меня 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

Есть идеи, чего мне здесь не хватает?

1 Ответ

0 голосов
/ 23 февраля 2019

OK.Я наконец смог это исправить.Проблема в том, что у пользователя sr_check_user= 'pgpool' нет прав на просмотр pg_stat_wal_receiver.Это стало очевидным после передачи имени пользователя pgpool в SELECT:

$ psql -x -h [standby.db.node.ip] -U pgpool -d postgres -c "SELECT status, conninfo FROM pg_stat_wal_receiver";

Проблема может быть исправлена ​​с помощью включения пользователя pgpool в роль "pg_monitor`:

GRANT pg_monitor to pgpool;

Я спросилсопровождающие pgpool обновляют эти документы: http://www.pgpool.net/docs/latest/en/html/example-cluster.html

...