Описание
При запуске служба 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-серверах.
В журнал сообщений выводится:
- название действия: реальное название процедуры (__func__)
- первоначальное состояние: pgvip status
- выполненное условие: реальный фрагмент кода Си (#define action_condition_text(condition) #condition)
- команды операционной системы: текст команды, вывод stdout/stderr, код завершения
| Нить | Назначение | Модуль | Функция |
|---|---|---|---|
| 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