Настройка кластера PostgreSQL

Данное руководство описывает процесс создания отказоустойчивой конфигурации из балансировщика (HAProxy) и нечетного количества экземпляров (три и более) БД PostgreSQL, где один из узлов кластера выступает в качестве Leader, а остальные узлы в качестве Replica. Переключение ролей при утрате доступа к Leader-серверу может производиться как автоматически, так и вручную.

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

Действия перед настройкой

Подключитесь к консоли брокера VDI и остановите сервисы:

systemctl stop vdi.service vdiweb.service

Подключитесь к БД и создайте резервную копию, указав:

  • имя базы (по умолчанию udsdb)

  • имя файла резервной копии (в примере - udsdb.bak)

# su - postgres
$ pg_dump udsdb > /tmp/udsdb.bak
$ exit

Настройка PostgreSQL

Создайте роль replicator для работы с репликами и задайте пароль пользователю postgres:

su - postgres
psql -c "CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'engine'"
psql -c "ALTER ROLE postgres PASSWORD 'engine'"
exit

Данные пользователи и их пароли указываются в конфигурационном файле Patroni в блоках postgresql и pg_hba.conf

Выполните скрипт на сервере БД с ролью Leader:

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

В описанной конфигурации используется 3 сервера БД:

  • postgres-server1 с ролью master (Leader)

  • postgres-server2 с ролью slave (Replica)

  • postgres-server3 с ролью slave (Replica)

  1. Установите etcd на все узлы:

  1. Остановите etcd на всех узлах:

  1. Удалите каталог данных:

  1. Переместите конфигурационный файл по умолчанию:

  1. Создайте и откройте для редактирования новый конфигурационный файл:

  1. Добавьте пример конфигураций в файл для узла postgres-server1.your_domain:

  1. Добавьте пример конфигураций в файл для узла postgres-server2.your_domain:

  1. Добавьте пример конфигураций в файл для узла postgres-server3.your_domain:

  1. Перезапустите etcd на всех узлах:

  1. Проверьте состояние кластера.

Установка и настройка Patroni

  1. Остановите PostgreSQL на всех узлах:

  1. Удалите каталог данных на ноде postgres-server2.your_domain и других серверах, используемых в качестве slave:

  1. Установите Patroni и PIP на все узлы:

  1. Установите зависимости для работы Patroni на все узлы:

  1. Создайте файл настроек:

  1. В созданный файл /etc/patroni/config.yml поместите пример начальной конфигурации, изменив IP-адреса на свои на каждом узле кластера. Обратите внимание на комментарии в данном файле.

  1. Сделайте пользователя postgres владельцем каталога настроек:

  1. Запустите службу postgresql на всех узлах:

  1. Запустите службу Patroni на узле postgres-server1.your_domain, а затем на узлах postgres-server2.your_domain и остальных серверах с ролью slave:

  1. Проверьте состояние кластера:

Настройка балансировки PostgreSQL + HAProxy

  1. Подключитесь к машине балансировщика и откройте для редактирования конфигурационный файл haproxy.cfg:

  1. Добавьте в конец файла базовую конфигурацию postgresql:

  1. Перезагрузите сервис haproxy:

  1. Подключитесь к машине HOSTVM VDI Broker и отредактируйте файл настроек /var/server/server/settings.py, изменив в блоке DATABASES поля HOST и PORT:

  1. Перезагрузите службы брокера HOSTVM VDI:

При отключении master-сервера роль master`а автоматически будет назначена одному из slave-серверов.

Примеры использования Patroni

Переключение Replica->Master в случае падения мастера:

Изменение лидера:

Просмотр истории переключений:

Отключение автоматического переключения Replica-Master:

Реинициализация кластера:

Реинициализация ноды:

Last updated

Was this helpful?