PostgreSQL
В этой инструкции рассматривается развёртывание отказоустойчивого кластера PostgreSQL средствами платформы.
Визион может использовать для хранения служебной БД внешний сервер PostgreSQL. Если вы планируете использовать это решение, разверните Визион в конфигурации для одного узла, а затем выполните переключение, следуя инструкции Смена сервера PostgreSQL.
Доступ к мастеру кластера выполняется через VIP. Для автоматического переназначения VIP на узлах кластера развёртываются службы vip-manager и etcd.
Для отслеживания состояния узлов кластера и автоматического выбора нового мастера используется Patroni.
| В Patroni мастер PostgreSQL называется лидером. |
Системные требования
Плейбуки развёртывания PostgreSQL в кластерной конфигурации поддерживают ОС Альт Сервер c10f1 и Альт Сервер c10f2.
Сеть
Для корректной работы кластера должны быть открыты соответствующие сетевые порты. Список портов и протоколов приводятся в описании компонентов:
Подготовка узлов кластера
Чтобы подготовить узлы будущего кластера PostgreSQL:
-
Убедитесь, что настройки
sudoразрешают группеwheelвыполнение любых команд.Как правило, достаточно выполнить команду
visudoи в конце файла раскомментировать строку:WHEEL_USERS ALL=(ALL:ALL) ALL -
Убедитесь, что пользователь
rootсостоит в группеwheel. -
Убедитесь, что настройки сервера SSH на узлах разрешают подключение с авторизацией по ключам.
-
Убедитесь, что необходимые репозитории подключены и актуальны.
-
Заполните инвентарь 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
Виртуальное окружение
Для установки некоторых компонентов необходимы коллекции Ansible.
Они входят в состав виртуального окружения, включённого в архив ansible-ha-victoria-cluster-<version>.tar.gz.
Если виртуальное окружение /opt/skala-r/vision/server/vision_venv/ не существует:
-
Распакуйте архив:
tar -xf ansible-ha-victoria-cluster-<version>.tar.gz -
Запустите скрипт создания и активации виртуального окружения:
sh ansible-ha-victoria-cluster-<version>/venv/activate_venv.shЭтот скрипт создаст виртуальное окружение
/opt/skala-r/vision/server/vision_venv/и активирует его, о чём свидетельствует изменившееся приглашение интерпретатора командной строки, например:(vision_venv) [root@server /tmp]#
Установка
После подготовительных работ переходите к установке:
-
Активируйте виртуальное окружение:
source /opt/skala-r/vision/server/vision_venv/bin/activate -
Запустите плейбук:
ansible-playbook -i inventory.yml cluster.yml -
Деактивируйте виртуальное окружение:
deactivate
Инициализация
-
Используя VIP, подключитесь к мастеру кластера PostgreSQL через SSH.
-
Запустите интерпретатор PostgreSQL:
sudo -u postgres psql -
Создайте роль
vision:CREATE ROLE vision WITH LOGIN PASSWORD 'vision' CREATEDB SUPERUSER; -
Создайте базу
vision_db:CREATE DATABASE vision_db OWNER vision ENCODING 'UTF8' LC_COLLATE 'ru_RU.UTF-8' LC_CTYPE 'ru_RU.UTF-8' TEMPLATE template0; -
Завершите работу с интерпретатором:
\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
-