Кластер PostgreSQL
В этой инструкции рассматривается развёртывание отказоустойчивого кластера PostgreSQL средствами, включёнными в состав дистрибутива Геном.
Пропустите этот шаг, если отказоустойчивость СУБД не требуется, либо для подсистемы мониторинга будет использоваться внешний сервер.
Доступ к мастеру PostgreSQL выполняется через VIP. Для автоматического переназначения VIP на узлах кластера развёртываются службы vip-manager и etcd.
Для отслеживания состояния узлов кластера и автоматического выбора нового мастера используется Patroni.
| В Patroni мастер PostgreSQL называется лидером. |
Системные требования
Для развёртывания отказоустойчивого кластера PostgreSQL требуются минимум три узла с характеристиками не ниже указанных:
| Параметр | Значение |
|---|---|
Количество ядер CPU |
4 |
Объём оперативной памяти, ГБ |
16 |
Дисковое пространство, ГБ |
100 |
Скорость работы сетевого интерфейса, ГБит/с |
1 |
Операционные системы
Узлы для развёртывания на них PostgreSQL должны работать под управлением одной из ОС:
-
Альт Сервер c10f1;
-
Альт Сервер c10f2.
Сеть
Для корректной работы кластера должны быть открыты соответствующие сетевые порты. Список портов и протоколов приводятся в описании компонентов подсистемы мониторинга:
Подготовка узлов кластера
Для развёртывания кластера PostgreSQL понадобятся три узла. Чтобы подготовить их к работе:
-
Убедитесь, что настройки
sudoразрешают группеwheelвыполнение любых команд.Как правило, достаточно выполнить команду
visudoи в конце файла раскомментировать строку:WHEEL_USERS ALL=(ALL:ALL) ALL -
Убедитесь, что пользователь
rootсостоит в группеwheel. -
Убедитесь, что настройки сервера SSH на узлах разрешают подключение с авторизацией по ключам.
-
Убедитесь, что необходимые репозитории пакетов подключены и актуальны.
Установка
После подготовительных работ переходите к установке:
-
Загрузите на один из узлов будущего кластера архив
ansible-ha-pg-cluster-2025-12-12.tar.gz. Этот узел будет использоваться в качестве установочного. Приведённые ниже команды выполняйте на нём. -
Распакуйте загруженный архив:
tar xf ansible-ha-pg-cluster-2025-12-12.tar.gz -
Если виртуальное окружение Python
/opt/skala-r/vision/server/vision_venv/существует, активируйте его:source /opt/skala-r/vision/server/vision_venv/bin/activateОб успешной активации свидетельствует изменившееся приглашение интерпретатора командной строки, например:
(vision_venv) [root@server /tmp]# -
Если виртуальное окружение Python
/opt/skala-r/vision/server/vision_venv/не существует:-
Загрузите на узел архив
ansible-ha-victoria-cluster-37.tar.gz. -
Распакуйте загруженный архив:
tar xf ansible-ha-victoria-cluster-37.tar.gz -
Запустите скрипт создания и активации виртуального окружения:
sh ansible-ha-victoria-cluster-37/venv/activate_venv.sh
-
-
Заполните инвентарь Ansible
inventory.yml, например:all: hosts: pg-1.example.com: ansible_host: 192.168.0.21 hostname: pg-1.example.com pg-2.example.com: ansible_host: 192.168.0.22 hostname: pg-2.example.com pg-3.example.com: ansible_host: 192.168.0.23 hostname: pg-3.example.com vars: ansible_user: root ansible_ssh_pass: "<password>" cluster_name: patroni ip_master: 192.168.0.24/24 pgdata: /pgdata pgport: 5432 secrets: /root/patroni_secrets service_users: - name: admin password: "<admin_password>" flags: SUPERUSERВ значении переменной
service_usersукажите учётные данные администратора СУБД.Особое внимание обратите на то, что подключение к узлам выполняется от имени пользователя
root, а секреты Patroni хранятся в его домашнем каталоге. -
Если узлы кластера работают под управлением ОС Альт Сервер c10f1, добавьте в блок
varsдополнительную переменнуюpackages_to_install:--- # ... vars: # ... packages_to_install: - postgresql15-server - postgresql15-contrib - etcd - patroni - python3-module-psycopg2 -
Запустите плейбук развёртывания кластера PostgreSQL:
ansible-playbook -i inventory.yml ansible-ha-pg-cluster-2025-12-12/cluster.yml -
Деактивируйте виртуальное окружение:
deactivate
Инициализация
-
Используя VIP, подключитесь к мастеру кластера PostgreSQL через SSH.
-
Запустите интерпретатор PostgreSQL:
sudo -u postgres psql -
Создайте отдельные роли для подсистем управления и мониторинга:
CREATE ROLE <role_name> WITH LOGIN PASSWORD '<role_password>' CREATEDB SUPERUSER;Здесь:
-
<role_name>— название роли. Для подсистемы мониторинга рекомендуется использовать названиеvision. -
<role_password>— пароль роли.
-
-
Создайте базы данных для подсистем управления и мониторинга:
CREATE DATABASE <db_name> OWNER <db_owner> ENCODING 'UTF8' LC_COLLATE 'ru_RU.UTF-8' LC_CTYPE 'ru_RU.UTF-8' TEMPLATE template0;Здесь:
-
<db_name>— название базы данных. Для подсистемы мониторинга рекомендуется использовать названиеvision_db. -
<db_owner>— название роли владельца базы.
-
-
Завершите работу с интерпретатором:
\q -
Отключитесь от мастера PostgreSQL.
Проверка корректности
Проверьте корректность развёртывания кластера:
-
На любом узле кластера выполните команду:
patronictl -c /etc/patroni/config.yml topologyОжидаемый результат выполнения команды:
-
Один узел с ролью Leader.
-
Один узел с ролью Sync Standby.
-
Один узел с ролью Replica.
-
-
На лидере выполните команду:
ip -br aОжидаемый результат выполнения команды: VIP привязан к одному из сетевых интерфейсов.
-
Убедитесь в возможности подключения к кластеру с не входящих в него узлов:
psql -h <vip> -U <admin> -p 5432 -d postgresЗдесь:
-
<vip>— VIP лидера; -
<admin>— название учётной записи администратора СУБД.
Подключение должно быть успешным.
-
-
Выполните дополнительные проверки:
-
Убедитесь, что на лидере запрос возвращает значение
f:SELECT pg_is_in_recovery(); -
Получите список БД:
\l+ -
Убедитесь, что на лидере выводится информация о репликах:
SELECT * FROM pg_stat_replication \gx -
Проверьте значение настройки
archive_mode. По умолчанию её значение равноoff.SHOW archive_mode
-