Данная статья является частью статьи: Развертывание двухузлового кластера pacemaker и применима в рамках указанной статьи.
Установка пакетов
Установить пакеты:
Для Astra Linux Special Edition x.7:
sudo apt install postgresql-11или, в зависимости от подключенных репозиториев и установленных оперативных обновлений и при отсутствии необходимости использовать МРД:sudo apt install postgresql-14Для обновлений Astra Linux Special Edition до x.7 и Astra Linux Common Edition:
sudo apt install postgresql-astra
Подготовка данных для тестирования
Подготовка данных для тестирования выполняется на каждом узле кластера.
Перейти в каталог /tmp:
cd /tmpСоздать базу данных cluster:
sudo -u postgres createdb clusterСоздать в базе данных таблицу info:
sudo -u postgres psql -d cluster -c "CREATE TABLE info (text varchar(80));"Добавить в таблицу запись, содержащую имя сервера:
sudo -u postgres psql -d cluster -c "INSERT INTO info VALUES ('Test DB - $(hostname)');"Задать пароль пользователю СУБД PostgreSQL (для примера использован пароль 123):
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '123';"Разрешить СУБД PostgreSQL принимать внешние подключения:
sudo sed -i '/^listen_addresses/s/localhost/*/' /etc/postgresql/<номер_версии>/main/postgresql.confТак как в дальнейшем работой сервиса будет управлять Corosync, следует исключить агента из автоматической загрузки:
sudo systemctl disable postgresqlПерезапустить кластер СУБД main:
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):
sudo pcs resource create Database ocf:astra:pgsql pgversion=$psql_version op monitor interval=1minДля более ранних обновлений или в случаях, когда поддержка МРД в кластерных службах не требуется:
sudo pcs resource create Database ocf:heartbeat:pgsql \Где <номер_версии> - 9.6, 11 или 14 в зависимости от используемой версии PostgreSQL;
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
- Установить ограничения:
"Ресурс Database должен работать на узле, где размещен ClusterIP":
sudo pcs constraint colocation add Database with ClusterIP INFINITY"Сначала запускается ClusterIP, затем Database":
sudo pcs constraint order ClusterIP then Database
Тестирование
Тестирование должно продемонстрировать отказоустойчивость созданного кластера. Тестирование работы МРД не рассматривается.
Подготовка теста
На клиентской машине, предназначенной для тестирования:
Установить клиентский пакет СУБД PostgreSQL:
sudo apt install postgresql-clientСоздать сценарий test-request.sh следующего содержания:
#!/bin/sh while true ; do psql postgresql://postgres:123@192.168.23.100/cluster -tc "SELECT text FROM info;" | xargs echo sleep 1s done
Установить созданному файлу сценария права на исполнение
chmod +x test-request.shЗапустить сценарий:
./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
Отключение узла кластера от сети
Найти узел кластера, на котором размещены ресурсы, выполнив команду на любом узле:
sudo pcs status resourcesНа узле с кластерными ресурсами отключить сетевое соединение:
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
Включить сетевое соединение на отключенном от сети узле:
sudo nmcli c u path 1Дождаться возвращение узла в кластер. После возвращения узла в кластер выполненная на любом из узлов команда
sudo pcs statusдолжна вывести:Online: [ pcmk-1 pcmk-2 ]
Если вывод команды на разных узлах различается - значит узел еще не вернулся в кластер.
Полное выключение узла кластера
Найти узел кластера, на котором размещены ресурсы, выполнив команду на любом узле:
sudo pcs status resourcesВыключить узел с кластерными ресурсами, перезагрузив его:
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
Когда выключенный узел загрузится вернуть его в кластер, выполнив на нем команду:
sudo pcs cluster start