IVA ДОКУМЕНТАЦИЯ ОБНОВЛЕНИЯ

Смена паролей доступа к базе данных

После первоначальной установки IVA CS настоятельно рекомендуется сменить пароли для всех пользователей базы данных (БД): postgres, replicator, rewind_user и ivasw. Использование паролей, установленных по умолчанию, небезопасно.

Данная процедура выполняется через изменение конфигурации Patroni и требует кратковременной остановки сервисов для предотвращения ошибок подключения компонентов IVA CS к базе данных

Общий план действий

  1. остановить все сервисы IVA CS:

    Остановка сервисов обязательна — компоненты IVA CS не должны обращаться в БД со старыми паролями.

    Пароли для replicator и rewind_user должны обновляться одновременно: изменить учетные данные только в PostgreSQL недостаточно — необходимо одновременно прописать их в конфигурации Patroni.

    Нарушение этого порядка приведет к разрыву репликации

    • на любом из хостов выполнить команду:

      sudo ivacs-ctl stop all
    • проверить остановку сервисов, выполнив на каждом хосте команду:

      sudo ivacs-ctl status
  2. определить текущий мастер-узел кластера БД

    Утилита patronictl возвращает данные по узлам. Искомая строка содержит маркер Leader.

    patronictl list ivacs
    Пример вывода
    Cluster: ivacs -----------+----+-----------+-----------------+
    | Member  | Host        | Role   | State   | Lag in MB |
    +---------+-----------------+--------+-----------+-----------+
    | node-01 | 10.10.10.11 | Leader | running |           |
    | node-02 | 10.10.10.12 | Replica| running | 0.0       |
    +---------+-----------------+--------+-----------+-----------+

    Мастер-узел — это нода со значением Leader в колонке Role. IP-адрес мастер-узла указан в колонке Host данной ноды

  3. сменить пароли на мастер-узле для пользователей postgres, replicator, rewind_user и ivasw

    • подключиться к СУБД (порт 5433) мастер-узла утилитой psql, используя текущий пароль пользователя postgres (по умолчанию — postgres)

      psql -h <IP_мастер_узла> -p 5433 -U postgres
    • ввести новый пароль для postgres, а затем последовательно сменить пароли:

      ALTER USER postgres    WITH PASSWORD '<NEW_PASSWORD_postgres>';
      ALTER USER replicator  WITH PASSWORD '<NEW_PASSWORD_replicator>';
      ALTER USER rewind_user WITH PASSWORD '<NEW_PASSWORD_rewind_user>';
      ALTER USER ivasw       WITH PASSWORD '<NEW_PASSWORD_ivasw>';

      где <NEW_PASSWORD_USER> — новый пароль для каждого пользователя

    • после ввода новых паролей необходимо убедиться, что каждая команда вернула ответ ALTER ROLE. Получив подтверждение, следует завершить сессию, выполнив:

      \q
  4. прописать новые пароли в конфигурационных файлах Patroni (/var/lib/postgresql/.config/patroni/patronictl.yaml) на всех узлах кластера БД:

    • на каждом физическом узле кластера необходимо отредактировать файл конфигурации Patroni — в секции postgresql.authentication заменить установленные значения password на значения, установленные на предыдущем шаге:

      Изменение пароля для пользователя ivasw в данной секции не предусмотрено
      Пример конфигурации
      postgresql:
        authentication:
          superuser:
            username: postgres
            password: <NEW_PASSWORD_postgres>
          replication:
            username: replicator
            password: <NEW_PASSWORD_replicator>
          rewind:
            username: rewind_user
            password: <NEW_PASSWORD_rewind_user>
    • убедиться, что файл конфигурации имеет права 640, принадлежит пользователю postgres и группе postgres, выполнив команды:

      sudo chown postgres:postgres /var/lib/postgresql/.config/patroni/patronictl.yaml
      sudo chmod 640 /var/lib/postgresql/.config/patroni/patronictl.yaml
  5. применить изменения в Patroni: перезагрузить конфигурацию и, при необходимости, последовательно перезапустить ноды кластера БД

    • перезагрузить конфигурацию Patroni, выполнив команду на любом из хостов:

      patronictl reload ivacs

      Выполнение команды reload может быть недостаточно, чтобы реплики начали использовать новый пароль для авторизации на мастер-узле — параметр primary_conninfo часто требует перезапуска управляемого PostgreSQL.

      Чтобы гарантированно активировать новые пароли для потоковой репликации, рекомендуется последовательно перезапустить все ноды кластера с помощью плавного перезапуска Patroni (без простоя мастер-узла), выполнив команду:

      patronictl restart ivacs
      Для перезапуска также можно использовать команду systemctl restart patroni
    • дождаться завершения операции и проверить состояние кластера после перезапуска:

      patronictl list ivacs

      Все узлы должны иметь статус running — репликация активна

  6. обновить строку подключения в конфигурации сервисов логики

    На каждом хосте открыть файл конфигурации /etc/ivasw/logic.yaml и в секции SWL прописать параметр для подключения к базе данных — DB_CONN_STRING, содержащий новый пароль ivasw и корректный IP-адрес хоста (IP-адрес сервера телефонии IVA CS):

    SWL:
      DB_CONN_STRING: "postgresql://ivasw:<NEW_PASSWORD_ivasw>@<IP_ADDRESS_IVA_CS>:<PORT>/ivasw"

    где,

    • <NEW_PASSWORD_ivasw> — новый пароль для пользователя ivasw

    • <IP_ADDRESS_IVA_CS> — IP-адрес сервера телефонии IVA CS

    • <PORT> — порт подключения к базе данным сервера телефонии IVA CS, по умолчанию 5432

      Строку подключения можно передать через переменную окружения SWL_DB_CONN_STRING, задав ее для пользователя ivasw с помощью systemctl
  7. запустить сервисы IVA CS и проверить статус их выполнения

    • запустить сервисы, выполнив на любом из хостов команду:

      sudo ivacs-ctl start all
    • проверить доступность и работоспособность сервисов стандартными средствами мониторинга или через веб-интерфейсы системы