У меня есть такая конфигурация с pgpool: "Host-1" master и "Host-2" slave, если "Host-1" выключается, pgpool правильно продвигает "Host-2" в качестве главного; но затем, если "Host-1" возвращается, pgpool не знает об этом, и, если "Host-2" выключается, pgpool не продвигает "Host-1" в качестве главного, даже если "Host-1" онлайн. Я включил health_check, но это кажется совершенно бесполезным, потому что состояние «Host-1» (после того, как он становится активным) всегда равно 3 = «Node is down».
Это результат выполнения команды "show pool_nodes" во время событий:
-> Исходная ситуация: «Хост-1» UP (мастер), «Host-2» UP (подчиненный)
node_id | hostname | port | status | lb_weight | role
---------+----------+------+--------+-----------+--------
0 | Host-1 | 5432 | 2 | nan | master
1 | Host-2 | 5432 | 1 | nan | slave
-> узел 0 отключается: «Узел-1» ВНИЗ, «Узел-2» ВВЕРХ
node_id | hostname | port | status | lb_weight | role
---------+----------+------+--------+-----------+--------
0 | Host-1 | 5432 | 3 | nan | slave
1 | Host-2 | 5432 | 2 | nan | master
-> узел 0 возвращает: "Хост-1" ВВЕРХ, "Хост-2" ВВЕРХ
node_id | hostname | port | status | lb_weight | role
---------+----------+------+--------+-----------+--------
0 | Host-1 | 5432 | 3 | nan | slave
1 | Host-2 | 5432 | 2 | nan | master
обратите внимание, что статус «Host-1» равен 3, что означает «Node is down».
-> узел 1 отключается: "Host-1" UP, "Host-2" DOWN: в этот момент я не могу подключиться к базе данных, даже если узел 0 запущен и работает!
Что мне нужно сделать, чтобы разрешить pgpool повысить роль ведущего узла 0 в другой раз? Если это может быть полезно, это разделы «Настройки подключения к бэкэнду» и «ПРОВЕРКА ЗДОРОВЬЯ» моего pgpool.conf:
# - Backend Connection Settings -
backend_hostname0 = 'Host-1'
# Host name or IP address to connect to for backend 0
backend_port0 = 5432
# Port number for backend 0
#backend_weight0 = 1
# Weight for backend 0 (only in load balancing mode)
#backend_data_directory0 = '/data'
# Data directory for backend 0
backend_flag0 = 'ALLOW_TO_FAILOVER'
# Controls various backend behavior
# ALLOW_TO_FAILOVER or DISALLOW_TO_FAILOVER
backend_hostname1 = 'Host-2'
# Host name or IP address to connect to for backend 0
backend_port1 = 5432
# Port number for backend 0
#backend_weight1 = 1
# Weight for backend 0 (only in load balancing mode)
#backend_data_directory1 = '/data'
# Data directory for backend 0
backend_flag1 = 'ALLOW_TO_FAILOVER'
# Controls various backend behavior
# ALLOW_TO_FAILOVER or DISALLOW_TO_FAILOVER
#------------------------------------------------------------------------------
# HEALTH CHECK
#------------------------------------------------------------------------------
health_check_period = 10
# Health check period
# Disabled (0) by default
health_check_timeout = 20
# Health check timeout
# 0 means no timeout
health_check_user = 'admin'
# Health check user
health_check_password = '12345'
# Password for health check user
health_check_max_retries = 10
# Maximum number of times to retry a failed health check before giving up.
health_check_retry_delay = 1
# Amount of time to wait (in seconds) between retries.