Перейти к основному содержимому

Блокировка трафика в процессе обновления

Во время автоматизированного обновления реализована блокировка трафика путем настройки pg_hba. Под настройкой pg_hba понимается удаление всех правил подключения к БД для всех пользовательских учетных записей. Данные изменения раздела pg_hba применяются только на время процесса обновления СУБД, после которого pg_hba принимает исходные пользовательские настройки, которые были до обновления.

Настройка правил pg_hba применяется как для файла pg_hba.conf так и для соответствующего поля в конфигурационном файле postgres.yml (в случае кластерной конфигурации), который определяет правила аутентификации клиентов к СУБД Pangolin.

Подсказка

Точки блокировки трафика соответствуют тому же временному промежутку, что и период блокировки трафика посредством межсетевого экрана.

Данная функциональность позволяет устранить возможность пользовательских подключений к БД во время обновления СУБД Pangolin. Это необходимо, чтобы исключить возможность какого-либо постороннего вмешательства в процесс обновления СУБД.

Ограничения

Блокировка подключения к БД для пользовательских УЗ с помощью правил pg_hba - не затрагивает такие УЗ, как postgres и patroni (при наличии). Данные учетные записи являются служебными.

Реализация

Перед началом процесса обновления СУБД Pangolin выполняются следующие действия:

  1. На узлах СУБД происходит бэкап конфигурационного файла pg_hba.conf.

    В том числе, в случае кластерной конфигурации, происходит бэкап конфигурационного файла postgres.yml.

  2. Происходит редактирование раздела pg_hba, в котором остаются правила подключения только для служебных УЗ: postgres и patroni (в случае кластерной конфигурации).

  3. Выполняется перечитывание конфигурации:

    • в случае standalone конфигурации: pg_ctl reload;
    • в случае кластерной конфигурации (наличие компонента Pangolin Manager/Patroni): pangolin-manager-ctl reload/patroni-ctl reload.
  4. После применения новых правил для 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:

  1. На узлах СУБД происходит восстановление конфигурационного файла pg_hba.conf до исходного состояния.

    В том числе, в случае кластерной конфигурации, происходит восстановление конфигурационного файла postgres.yml.

  2. Выполняется перечитывание конфигурации:

    • в случае standalone конфигурации: pg_ctl reload;
    • в случае кластерной конфигурации: pangolin-manager-ctl reload.

Результат: пользовательские подключения в pg_hba разблокированы.