Блокировка трафика в процессе обновления
Во время автоматизированного обновления реализована блокировка трафика путем настройки pg_hba
. Под настройкой pg_hba
понимается удаление всех правил подключения к БД для всех пользовательских учетных записей. Данные изменения раздела pg_hba
применяются только на время процесса обновления СУБД, после которого pg_hba
принимает исходные пользовательские настройки, которые были до обновления.
Настройка правил pg_hba
применяется как для файла pg_hba.conf
так и для соответствующего поля в конфигурационном файле postgres.yml
(в случае кластерной конфигурации), который определяет правила аутентификации клиентов к СУБД Pangolin.
Точки блокировки трафика соответствуют тому же временному промежутку, что и период блокировки трафика посредством межсетевого экрана.
Данная функциональность позволяет устранить возможность пользовательских подключений к БД во время обновления СУБД Pangolin. Это необходимо, чтобы исключить возможность какого-либо постороннего вмешательства в процесс обновления СУБД.
Ограничения
Блокировка подключения к БД для пользовательских УЗ с помощью правил pg_hba
- не затрагивает такие УЗ, как postgres и patroni (при наличии). Данные учетные записи являются служебными.
Реализация
Перед началом процесса обновления СУБД Pangolin выполняются следующие действия:
-
На узлах СУБД происходит бэкап конфигурационного файла
pg_hba.conf
.В том числе, в случае кластерной конфигурации, происходит бэкап конфигурационного файла
postgres.yml
. -
Происходит редактирование раздела
pg_hba
, в котором остаются правила подключения только для служебных УЗ: postgres и patroni (в случае кластерной конфигурации). -
Выполняется перечитывание конфигурации:
- в случае standalone конфигурации:
pg_ctl reload
; - в случае кластерной конфигурации (наличие компонента Pangolin Manager/Patroni):
pangolin-manager-ctl reload
/patroni-ctl reload
.
- в случае standalone конфигурации:
-
После применения новых правил для
pg_hba
, завершаются все существующие пользовательские сессии с помощью SQL-запроса, который выполняется на узлах СУБД:SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid() AND backend_type='client backend'
Результат: пользовательские подключения в pg_hba
заблокированы.
После окончания процесса обновления СУБД Pangolin:
-
На узлах СУБД происходит восстановление конфигурационного файла
pg_hba.conf
до исходного состояния.В том числе, в случае кластерной конфигурации, происходит восстановление конфигурационного файла
postgres.yml
. -
Выполняется перечитывание конфигурации:
- в случае standalone конфигурации:
pg_ctl reload
; - в случае кластерной конфигурации:
pangolin-manager-ctl reload
.
- в случае standalone конфигурации:
Результат: пользовательские подключения в pg_hba
разблокированы.