Настройка кластера 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
Для корректной работы автоматического переключения с Replica на Master количество узлов должно быть нечетным.
В описанной конфигурации используется 3 сервера БД:
postgres-server1 с ролью master (Leader)
postgres-server2 с ролью slave (Replica)
postgres-server3 с ролью slave (Replica)
Установите etcd на все узлы:
Остановите etcd на всех узлах:
Удалите каталог данных:
Переместите конфигурационный файл по умолчанию:
Создайте и откройте для редактирования новый конфигурационный файл:
Добавьте пример конфигураций в файл для узла postgres-server1.your_domain:
Добавьте пример конфигураций в файл для узла postgres-server2.your_domain:
Добавьте пример конфигураций в файл для узла postgres-server3.your_domain:
Перезапустите etcd на всех узлах:
Проверьте состояние кластера.
Установка и настройка Patroni
Остановите PostgreSQL на всех узлах:
Удалите каталог данных на ноде postgres-server2.your_domain и других серверах, используемых в качестве slave:
Установите Patroni и PIP на все узлы:
Установите зависимости для работы Patroni на все узлы:
Создайте файл настроек:
В созданный файл /etc/patroni/config.yml поместите пример начальной конфигурации, изменив IP-адреса на свои на каждом узле кластера. Обратите внимание на комментарии в данном файле.
Сделайте пользователя postgres владельцем каталога настроек:
Запустите службу postgresql на всех узлах:
Запустите службу Patroni на узле postgres-server1.your_domain, а затем на узлах postgres-server2.your_domain и остальных серверах с ролью slave:
Проверьте состояние кластера:
Настройка балансировки PostgreSQL + HAProxy
Подключитесь к машине балансировщика и откройте для редактирования конфигурационный файл haproxy.cfg:
Добавьте в конец файла базовую конфигурацию postgresql:
Перезагрузите сервис haproxy:
Подключитесь к машине HOSTVM VDI Broker и отредактируйте файл настроек /var/server/server/settings.py, изменив в блоке DATABASES поля HOST и PORT:
Перезагрузите службы брокера HOSTVM VDI:
При отключении master-сервера роль master`а автоматически будет назначена одному из slave-серверов.
Примеры использования Patroni
Переключение Replica->Master в случае падения мастера:
Изменение лидера:
Просмотр истории переключений:
Отключение автоматического переключения Replica-Master:
Реинициализация кластера:
Реинициализация ноды:
Last updated
Was this helpful?