Развёртывание отказоустойчивого кластера PostgreSQL
Установочный узел — узел под управлением ОС ALT Linux c10f2, на котором запускается плейбук Ansible для развёртывания кластера Patroni.
Для узлов кластера подготовьте три ВМ под управлением ОС ALT Linux c10f1 или ALT Linux C10f2.
Подготовка установочного узла
Подготовьте установочный узел к развёртыванию:
-
Установите пакеты Ansible.
-
Создайте пару ключей SSH.
-
Разместите публичный ключ SSH на узлах кластера, например, с помощью команды:
ssh-copy-id -i path/to/key.pub <user>@<host>
Подготовка узлов кластера
Подготовьте узлы кластера к развёртыванию:
-
Убедитесь, что время на всех трёх узлах синхронизировано.
-
Измените настройки сервера OpenSSH таким образом, чтобы он разрешал вход в систему с использованием ключей.
-
Убедитесь, что настройки
sudoразрешают группеwheelвыполнение любых команд.Как правило, достаточно выполнить команду
visudoи в конце файла раскомментировать строку:WHEEL_USERS ALL=(ALL:ALL) ALL -
Убедитесь, что пользователь
rootсостоит в группеwheel. -
Убедитесь, что необходимые репозитории подключены и актуальны.
Установка
После подготовительных работ переходите к установке:
-
Перейдите в директорию с плейбуком
cluster.ymlи инвентарёмinventory.yml. -
Внесите изменения в конфигурационный файл
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
-
-
Запустите развёртывание:
ansible-playbook -i inventory.yml cluster.yml
Проверка корректности
Для проверки корректности развёртывания кластера выполните следующие действия:
-
На любом узле кластера выполните команду:
patronictl -c /etc/patroni/config.yml topologyОжидаемый результат выполнения команды:
-
Один узел находится в статусе Leader. Такой узел называется лидером.
-
Все остальные узлы находятся в статусе Replica. Такие узлы называются репликами.
-
-
На лидере выполните команду:
ip -br aОжидаемый результат выполнения команды: виртуальный IP-адрес привязан к одному из сетевых интерфейсов.
-
Убедитесь в возможности подключения к кластеру с не входящих в него узлов:
psql -h <leader> -U <adminname> -p 5432 -d postgresЗдесь:
-
<leader>— виртуальный IP-адрес лидера; -
<adminname>— название учётной записи администратора кластера;
Подключение должно быть успешным.
-
-
Выполните дополнительные проверки:
-
Убедитесь, что на лидере запрос возвращает значение
f:SELECT pg_is_in_recovery();-
Получите список баз данных:
\l+
-
-
Убедитесь, что на лидере выводится информация о репликах:
SELECT * FROM pg_stat_replication \gx -
Проверьте значение настройки
archive_mode. По умолчанию её значение равноoff:SHOW arhive_mode;
-