Вопрос или проблема
У меня, похоже, есть проблема с auto_failback
, pgpool обнаруживает, что узел снова работает, но не прикрепляет его.
Я использую postgres 17 и pgpool2 4.5, вот конфигурация
listen_addresses="*"
port = 5432
backend_hostname0 = '192.168.1.232'
backend_port0 = 5432
backend_weight0 = 1
backend_flag0 = 'ALLOW_TO_FAILOVER'
backend_application_name0 = 'db232'
backend_hostname1 = '192.168.1.234'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/var/lib/postgresql/17/main/'
backend_flag1 = 'ALLOW_TO_FAILOVER'
backend_application_name1 = 'db234'
auth_type="md5" # Используйте pool_hba.conf для аутентификации клиента
pool_passwd = '/etc/pgpool2/pool_passwd'
allow_clear_text_frontend_auth = on
process_management_mode = dynamic
process_management_strategy = gentle
num_init_children = 200
min_spare_children = 5
max_spare_children = 10
max_pool = 4
log_destination = 'stderr'
log_error_verbosity = default # короткие, стандартные или подробные сообщения
client_min_messages = debug1 # значения в порядке убывания детализации:
log_min_messages = debug1 # значения в порядке убывания детализации:
logging_collector = off
connection_cache = on
load_balance_mode = on
sr_check_user="custom_user"
sr_check_password = 'password'
sr_check_database="postgres"
health_check_period = 10
health_check_timeout = 20
health_check_user="user"
health_check_password = 'password'
health_check_database="postgres"
failover_command = '/var/lib/postgresql/test %d %h %p %D %m %H %M %P %r %R %N %S failover'
failback_command = '/var/lib/postgresql/test %d %h %p %D %m %H %M %P %r %R %N %S failback'
failover_on_backend_error = on
failover_on_backend_shutdown = on
recovery_user="user"
recovery_password = 'password'
recovery_timeout = 0
auto_failback = on
auto_failback_interval = 10
это узлы пула, когда
- все работает,
- я останавливаю резервный сервер
- я перезапускаю резервный сервер
1.
node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change
---------+--------------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+---------------------
0 | 192.168.1.232 | 5432 | up | up | 0.500000 | primary | primary | 0 | false | 0 | | | 2024-11-11 19:34:10
1 | 192.168.1.234 | 5432 | up | up | 0.500000 | standby | standby | 0 | true | 58152 | | | 2024-11-11 19:34:10
2.
node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change
---------+--------------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+---------------------
0 | 192.168.1.232 | 5432 | up | up | 0.500000 | primary | primary | 0 | true | 0 | | | 2024-11-11 19:34:10
1 | 192.168.1.234 | 5432 | down | down | 0.500000 | standby | unknown | 0 | false | 0 | | | 2024-11-11 19:38:51
3.
node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change
---------+--------------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+---------------------
0 | 192.168.1.232 | 5432 | up | up | 0.500000 | primary | primary | 0 | true | 0 | | | 2024-11-11 19:34:10
1 | 192.168.1.234 | 5432 | down | up | 0.500000 | standby | standby | 0 | false | 0 | | | 2024-11-11 19:38:51
Я вижу, что pg_status отражает изменение, но статус все еще остается down.
Спасибо, ребята
Ответ или решение
Проблема с авто-восстановлением узлов в pgpool-II
Введение
Ваша проблема с автоматическим восстановлением узлов в pgpool-II может быть вызвана несколькими факторами. pgpool-II является промежуточным программным обеспечением, которое управляет многими клиентскими подключениями к PostgreSQL и обеспечивает функции, такие как балансировка нагрузки, автоматическое переключение при сбоях и мониторинг состояния узлов. Ваша конфигурация, включая использование auto_failback
, не срабатывает должным образом, и узлы не повторно подключаются автоматически после их перезапуска.
Анализ конфигурации
На основе предоставленной вами конфигурации отмечаем несколько ключевых моментов:
-
Настройки авто-восстановления:
- Параметр
auto_failback
включает автоматическое восстановление подключенных узлов. Проверьте, активен ли этот параметр. - Параметр
auto_failback_interval
установлен на 10 секунд, что означает, что pgpool будет проверять состояние узлов каждые 10 секунд.
- Параметр
-
Проверка состояния узлов:
- Из предоставленного вывода видно, что когда вы останавливаете резервный сервер, его состояние становится
down
. После перезапуска он поначалу отображается какup
, но статус остаетсяdown
, что указывает на проблему с восстановлением состояния.
- Из предоставленного вывода видно, что когда вы останавливаете резервный сервер, его состояние становится
Потенциальные причины проблемы
-
Проблемы с доступом: Убедитесь, что pgpool может подключаться к резервному серверу. Проверьте настройки firewall и доступ к сети.
-
Проблемы с конфигурацией проверки состояния:
- Вы используете параметры
health_check_user
,health_check_password
, иhealth_check_database
, которые могут не соответствовать вашим учетным данным PostgreSQL. Убедитесь, что указанные учетные данные имеют достаточно прав для выполнения проверки состояния.
- Вы используете параметры
-
Несоответствие версий: Убедитесь, что версии pgpool-II и PostgreSQL совместимы друг с другом. Вы используете PostgreSQL 17 и pgpool-II 4.5, что должно быть совместимо, но всегда хорошо перепроверить обновления и изменения в документации.
-
Проблемы с конфигурацией параметров репликации: Вы можете проверить, правильно ли настроены репликационные параметры на обоих серверах. Параметры
replication_delay
,replication_state
, иreplication_sync_state
показывают состояние синхронизации между узлами, и любые отклонения могут привести к тому, что pgpool-II не сможет восстановить узел автоматически. -
Логи и диагностика:
- Проверьте логи pgpool-II, чтобы найти дополнительные подсказки о том, почему узел не восстанавливается. Убедитесь, что уровень ведения журнала (
log_min_messages
иclient_min_messages
) установлен на достаточную детальность, чтобы захватить важные сообщения. - Убедитесь также, что у вас есть корректная обработка ошибок в ваших командных файлах
failover_command
иfailback_command
.
- Проверьте логи pgpool-II, чтобы найти дополнительные подсказки о том, почему узел не восстанавливается. Убедитесь, что уровень ведения журнала (
Решение проблемы
-
Проверка конфигурации и учетных данных: Проверьте и при необходимости обновите настройки вашего pgpool-II, особенно
health_check_*
параметры. Убедитесь, что все учетные данные корректны и действительны. -
Тестирование соединения: Попробуйте вручную подключиться к резервному серверу с использованием тех же учетных данных, которые указаны в
health_check_username
иhealth_check_password
. -
Тестирование состояния узлов: Настройте параметры состояния узлов и увеличьте интервал проверки, если это необходимо. Попробуйте временно установить
auto_failback
вoff
, чтобы убедиться, что узел можно вручную восстановить, прежде чем снова включать этот параметр. -
Проверка состояния репликации: Выявите возможные проблемы с репликацией, убедившись, что оба узла находятся в синхронизации.
Заключение
Ваша проблема с автоматическим восстановлением узлов в pgpool-II может быть решена путем более детального изучения конфигурации и взаимодействия между настройками проверки состояния и доступностью узлов. Следуя предложенным шагам и рекомендациям, вы сможете восстановить нормальную работу системы и обеспечить ее надежность.