Оглавление |
---|
Информация |
---|
Данная статья является частью статьи: Развертывание двухузлового кластера pacemaker и применима в рамках указанной статьи. |
Предупреждение |
---|
Для работы в кластере с защищенной СУБД postgresql с использованием МРД (см. Уровень конфиденциальности, категории конфиденциальности и целостность: что есть что, и как с этим работать?) необходимо использовать специальный агент ocf:astra:pgsql. Этот агент входит в состав Astra Linux Special Edition x.7 начиная с оперативного обновления БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3). Для работы без использования МРД можно использовать обычный для Linux агент ocf:heartbeat:pgsql. |
Установка пакетов
Информация |
---|
Установка пакетов выполняется на каждом узле кластера. |
Установить пакеты:
Для Astra Linux Special Edition x.7:
Command sudo apt install postgresql-11 или, в зависимости от подключенных репозиториев и установленных оперативных обновлений и при отсутствии необходимости использовать МРД:
Command sudo apt install postgresql-14 Для обновлений Astra Linux Special Edition до x.7 и Astra Linux Common Edition:
Command sudo apt install postgresql-astra
Подготовка данных для тестирования
Информация |
---|
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3):Подготовка данных для тестирования выполняется на каждом узле кластера. |
Перейти в каталог /tmp:
Command cd /tmp Создать базу данных cluster:
Command sudo -u postgres createdb cluster Создать в базе данных таблицу info:
Command sudo -u postgres psql -d cluster -c "CREATE TABLE info (text varchar(80));" Добавить в таблицу запись, содержащую имя сервера:
Command sudo -u postgres psql -d cluster -c "INSERT INTO info VALUES ('Test DB - $(hostname)');" Задать пароль пользователю СУБД PostgreSQL (для примера использован пароль 123):
Command sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '123';" Разрешить СУБД PostgreSQL принимать внешние подключения:
Command sudo sed -i '/^listen_addresses/s/localhost/*/' /etc/postgresql/<номер_версии>/main/postgresql.conf Так как в дальнейшем работой сервиса будет управлять Corosync, следует исключить агента из автоматической загрузки:
Command sudo systemctl disable postgresql Перезапустить кластер СУБД main:
Command sudo pg_ctlcluster <номер_версии> main restart Где <номер_версии> - 9.6, 11 или 14 в зависимости от используемой версии PostgreSQL.
Подключение ресурса
Добавить службу PostgreSQL как ресурс с именем Database:
Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3):
Command sudo pcs resource create Database ocf:astra:pgsql pgversion=$psql_version op monitor interval=1min
Для более ранних обновлений или в случаях, когда поддержка МРД в кластерных службах не требуется:
Command sudo pcs resource create Database ocf:heartbeat:pgsql \
pgctl="/usr/lib/postgresql/<номер_версии>/bin/pg_ctl" \
pgdata="/var/lib/postgresql/<номер_версии>/main" \
config="/etc/postgresql/<номер_версии>/main/postgresql.conf" \
socketdir="/var/run/postgresql/" \
op monitor interval=1minГде <номер_версии> - 9.6, 11 или 14 в зависимости от используемой версии PostgreSQL;
- Установить ограничения:
"Ресурс Database должен работать на узле, где размещен ClusterIP":
Command sudo pcs resource master msPostgresql Database master-max=1 master-node-max=1 clone-max=3 clone-node-max=1 notify=true
Database with ClusterIP INFINITY
sudo pcs constraint colocation addClusterIP with master msPostgresql INFINITY
"Сначала запускается ClusterIP, затем Database":
Command sudo pcs constraint order promote msPostgresql then start ClusterIP
then Databasekind=Mandatory
sudo pcs constraint order start msPostgresql then start ClusterIP kind=Mandatory
Тестирование
Тестирование должно продемонстрировать отказоустойчивость созданного кластера. Настройка и тестирование аутентификации пользователей и работы МРД в данной статье не рассматривается и не тестируется.
Подготовка теста
На клиентской машине, предназначенной для тестирования:
Установить клиентский пакет СУБД PostgreSQL:
Command sudo apt install postgresql-client Создать сценарий test-request.sh следующего содержания:
Блок кода language bash #!/bin/sh while true ; do psql postgresql://postgres:123@192.168.23.100/cluster -tc "SELECT text FROM info;" | xargs echo sleep 1s done
Установить созданному файлу сценария права на исполнение
Command chmod +x test-request.sh Запустить сценарий:
Command ./test-request.sh После запуска сценарий будет отправлять запрос кластеру 1 раз в секунду и выводить полученное содержимое на экран.
Если в данный момент ресурс ClusterIP размещен на узле 1, то вывод сценарий будет таким:Блок кода Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-1
Отключение узла кластера от сети
Найти узел кластера, на котором размещены ресурсы, выполнив команду на любом узле:
Command sudo pcs status resources На узле с кластерными ресурсами отключить сетевое соединение:
Command sudo nmcli c d path 1 Кластерные ресурсы мигрируют на другой узел кластера и вывод сценария test-request.sh изменится. Например, если кластерные ресурсы располагались на узле 1, то после отключения узла 1 от сети, ресурсы переместятся на узел 2.
Блок кода Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-2 Test DB - pcmk-2
Включить сетевое соединение на отключенном от сети узле:
Command sudo nmcli c u path 1 Дождаться возвращение узла в кластер. После возвращения узла в кластер выполненная на любом из узлов команда
Command sudo pcs status должна вывести:
Блок кода Online: [ pcmk-1 pcmk-2 ]
Если вывод команды на разных узлах различается - значит узел еще не вернулся в кластер.
Полное выключение узла кластера
Найти узел кластера, на котором размещены ресурсы, выполнив команду на любом узле:
Command sudo pcs status resources Выключить узел с кластерными ресурсами, перезагрузив его:
Command sudo reboot Кластерные ресурсы мигрируют на другой узел кластера и вывод сценария test-request.sh изменится. Если кластерные ресурсы располагались на узле 2, то после выключения узла 2 ресурсы переместятся на узел 1.
Блок кода Test DB - pcmk-2 Test DB - pcmk-2 Test DB - pcmk-2 Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-1
Когда выключенный узел загрузится вернуть его в кластер, выполнив на нем команду:
Command sudo pcs cluster start