Описание
При запуске служба 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