Развёртывание отказоустойчивого кластера PostgreSQL

Установочный узел — узел под управлением ОС ALT Linux c10f2, на котором запускается плейбук Ansible для развёртывания кластера Patroni.

Для узлов кластера подготовьте три ВМ под управлением ОС ALT Linux c10f1 или ALT Linux C10f2.

Подготовка установочного узла

Подготовьте установочный узел к развёртыванию:

  1. Установите пакеты Ansible.

  2. Создайте пару ключей SSH.

  3. Разместите публичный ключ SSH на узлах кластера, например, с помощью команды:

    ssh-copy-id -i path/to/key.pub <user>@<host>

Подготовка узлов кластера

Подготовьте узлы кластера к развёртыванию:

  1. Убедитесь, что время на всех трёх узлах синхронизировано.

  2. Измените настройки сервера OpenSSH таким образом, чтобы он разрешал вход в систему с использованием ключей.

  3. Убедитесь, что настройки sudo разрешают группе wheel выполнение любых команд.

    Как правило, достаточно выполнить команду visudo и в конце файла раскомментировать строку:

    WHEEL_USERS ALL=(ALL:ALL) ALL
  4. Убедитесь, что пользователь root состоит в группе wheel.

  5. Убедитесь, что необходимые репозитории подключены и актуальны.

Установка

После подготовительных работ переходите к установке:

  1. Перейдите в директорию с плейбуком cluster.yml и инвентарём inventory.yml.

  2. Внесите изменения в конфигурационный файл inventory.yml:

    • Укажите параметры подключения к узлам кластера, в том числе путь к приватному ключу SSH.

      Используйте адреса сети, по которой узлы кластера будут взаимодействовать друг с другом.

    • Если узлы будущего кластера работают под управлением ОС ALT Linux c10f1, добавьте в блок vars дополнительную переменную packages_to_install:

      ---
      # ...
      vars:
        # ...
        packages_to_install:
          - postgresql15-server
          - postgresql15-contrib
          - etcd
          - patroni
          - python3-module-psycopg2
    • В значении переменной service_users укажите учётные данные администратора будущего кластера:

      ---
      # ...
      vars:
        # ...
        service_users:
          - name: <adminname>
            password: <password>
            flags: SUPERUSER
  3. Запустите развёртывание:

    ansible-playbook -i inventory.yml cluster.yml

Проверка корректности

Для проверки корректности развёртывания кластера выполните следующие действия:

  1. На любом узле кластера выполните команду:

    patronictl -c /etc/patroni/config.yml topology

    Ожидаемый результат выполнения команды:

    • Один узел находится в статусе Leader. Такой узел называется лидером.

    • Все остальные узлы находятся в статусе Replica. Такие узлы называются репликами.

  2. На лидере выполните команду:

    ip -br a

    Ожидаемый результат выполнения команды: виртуальный IP-адрес привязан к одному из сетевых интерфейсов.

  3. Убедитесь в возможности подключения к кластеру с не входящих в него узлов:

    psql -h <leader> -U <adminname> -p 5432 -d postgres

    Здесь:

    • <leader> — виртуальный IP-адрес лидера;

    • <adminname> — название учётной записи администратора кластера;

    Подключение должно быть успешным.

  4. Выполните дополнительные проверки:

    • Убедитесь, что на лидере запрос возвращает значение f:

      SELECT pg_is_in_recovery();
      • Получите список баз данных:

        \l+
    • Убедитесь, что на лидере выводится информация о репликах:

      SELECT * FROM pg_stat_replication \gx
    • Проверьте значение настройки archive_mode. По умолчанию её значение равно off:

      SHOW arhive_mode;