Описание


При запуске служба pgvip (модуль pgvip.c) загружает параметры из конфигурационного файла pgvip.conf в глобальные переменные (global.h,global.c), на основе шаблонов с переменными формирует финальные команды операционной системы, запускает нити. Всем параметрам конфигурационного файла и финальным командам соответствуют одноименные глобальные переменные с префиксом g_.

Нити проверок с интервалом {time_check_interval} выполняют команды {command_db_state},{command_vip_state} и результат записывают в глобальную переменную g_status. В журнал собщений выводятся только команды выполненные с ошибкой.

Нить действий с интервалом {time_command_ssh_timeout_int+time_check_interval_int+1} последовательно выполняет действия из списка (массив процедур), которые при успешной проверке условия из переменной g_status выполняют команды ОС (как правило, одну). Результаты действий не анализируются, они будут получены проверками на всех web-серверах.
В журнал сообщений выводится:


Нити

Нить Назначение Модуль Функция
CHECKER_MASTER_DB проверка состояния базы данных master checker.c checker_master_db_thread
CHECKER_STANDBY_DB проверка состояния базы данных standby checker.c checker_standby_db_thread
CHECKER_MASTER_VIP проверка виртуального IP адреса на master checker.c checker_master_vip_thread
CHECKER_STANDBY_VIP проверка виртуального IP адреса на standby checker.c checker_standby_vip_thread
ACTION_EXECUTOR выполнение действий action.c action_executor_thread
MONITORING отправка метрики в систему мониторинга, оповещение monitoring.c monitoring_thread
LOGGER ротация лога, проверка обновлений util_log.c _log_thread
ADMINISTRATION обработка команд status, stop и show util_admin.c _admin_thread


Действия

Таблица действий сгенерирована из модуля action.c
Для получения текста команды по названию переменной в командной строке нужно выполнить
pgvip show config | grep [var]

Действие (процедура) Условие (if) Команды (переменные)
action_master_vip_auto_down_execute status.master_vip_auto_down==G_VIP_AUTO_DOWN_NOT_EXECUTING command_master_vip_auto_down_execute
action_master_vip_up status.standby_db_state!=G_DB_STATE_READ_WRITE &&
status.master_db_state==G_DB_STATE_READ_WRITE &&
status.master_vip_state==G_VIP_STATE_DOWN &&
status.master_vip_auto_down==G_VIP_AUTO_DOWN_EXECUTING
command_master_vip_up
action_master_vip_down status.master_vip_state==G_VIP_STATE_UP &&
(status.master_db_state!=G_DB_STATE_READ_WRITE ||
status.standby_db_state==G_DB_STATE_READ_WRITE)
command_master_vip_down
action_standby_vip_auto_down_execute status.standby_vip_auto_down==G_VIP_AUTO_DOWN_NOT_EXECUTING command_standby_vip_auto_down_execute
action_standby_vip_up status.master_vip_state!=G_VIP_STATE_UP &&
status.standby_db_state==G_DB_STATE_READ_WRITE &&
status.standby_vip_state==G_VIP_STATE_DOWN &&
status.standby_vip_auto_down==G_VIP_AUTO_DOWN_EXECUTING
command_standby_vip_up
action_standby_vip_down status.standby_vip_state==G_VIP_STATE_UP &&
status.standby_db_state!=G_DB_STATE_READ_WRITE
command_standby_vip_down
action_standby_db_promote status.master_db_state!=G_DB_STATE_READ_WRITE &&
status.standby_db_state==G_DB_STATE_IN_RECOVERY &&
(time_now()-status.value_time)>g_time_standby_promote_delay_int &&
status.standby_db_lag<=g_time_standby_allowable_lag_int
command_master_vip_down
command_standby_db_promote
command_standby_vip_up
action_master_db_break status.master_db_state==G_DB_STATE_READ_WRITE &&
status.standby_db_state==G_DB_STATE_READ_WRITE
command_master_db_break


Командная строка

Параметры командной строки (после установки их можно посмотреть запустив pgvip --help)
[root@web-server ~]# pgvip --help
PGVIP is a PostgreSQL master-standby auto failover service via a virtual IP address
version 25.1.1, linux 64 bits

All parameters (IP addresses, OS commands, timings) in the configuration file /etc/pgsuite/pgvip.conf

Usage:
  pgvip {COMMAND}

Commands:
  start        start execution in another process
  execute      execute in current process
  status       show status
  stop         stop execution
  show config  show runtime configuration
  help|man     print this help

Examples:
  pgvip execute
  pgvip status
  pgvip show config