Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1
Astra Linux Common Edition 2.12
Параметры стенда
Параметры сети
- Сеть 192.168.23.0/24;
- Адрес маршрутизатора (шлюза) сети 192.168.23.1;
- Предполагается, что в сети отсутствует служба DNS, поэтому адреса узлов задаются с помощью файла /etc/hosts.
Параметры хостов
Для развертывания кластера используются два подсоединенных к сети компьютера с установленной ОС Astra Linux. Каждый из этих компьютеров будет выполнять роль узла кластера, поэтому далее они будут называться Узел 1 и Узел 2. Для тестирования отказоустойчивости используется рабочая станция, подключенная к той же сети.
Параметр | Узел 1 | Узел 2 |
---|---|---|
Имя узла | pcmk-1 | pcmk-2 |
Статический IP-адрес узла | 192.168.23.101 | 192.168.23.102 |
Дополнительно в качестве IP-адреса кластера будет использован адрес 192.168.23.100. IP-адрес рабочей станции, с помощью которой будет выполняться тестирование, неважен.
Настройка стенда
Настройка сетевых подключений
Узлам рекомендуется присвоить статические адреса. Если на узлах кластера для управления сетевыми подключениями используется NetworkManager настройку можно выполнить с помощью графического инструмента или из командной строки командами:
Узел 1 | Узел 2 |
---|---|
Присвоить узлу статический IP-адрес 192.168.23.101: sudo nmcli c d path 1 sudo nmcli c m path 1 ip4 192.168.23.101/24 gw4 192.168.23.1 sudo nmcli c m path 1 ipv4.method manual sudo nmcli c u path 1 | Присвоить узлу статический IP-адрес 192.168.23.102: sudo nmcli c d path 1 sudo nmcli c m path 1 ip4 192.168.23.102/24 gw4 192.168.23.1 sudo nmcli c m path 1 ipv4.method manual sudo nmcli c u path 1 |
Подробнее про настройку сетевых подключений см. Настройка сетевых подключений в Astra Linux.
Настройка /etc/hosts
Записать имена узлов в файл /etc/hosts и удалить строку 127.0.1.1:
sudo sed -i '$a 192.168.23.102\tpcmk-2' /etc/hosts
sudo sed -i '/^127\.0\.1\.1/d' /etc/hosts
Установка пакетов кластерного ПО
Установить пакеты кластерного ПО и СУБД:
После установки пакетов назначить пользователю hacluster пароль:
Инициализация кластера
Инициализировать кластер:
Для Astra Linux Special Edition x.7:
sudo pcs host auth pcmk-1 pcmk-2 -u hacluster -p <пароль>
sudo pcs cluster setup astracluster pcmk-1 pcmk-2 --forceДля обновлений Astra Linux Special Edition до x.7 и Astra Linux Common Edition:
sudo pcs cluster auth pcmk-1 pcmk-2 -u hacluster -p <пароль>
sudo pcs cluster setup --name astracluster pcmk-1 pcmk-2 --forceЗапустить кластер:
sudo pcs cluster start --allУбедиться, что кластер полностью запустился:
while ! sudo pcs status ; do sleep 1 ; doneОтключить технологию STONITH:
STONITH (Shoot The Other Node In The Head) - технология, отвечающая за физическое устранение узла из кластера, и обеспечивающая полное обесточивание неисправных узлов, чтобы исключить повреждение данных. Поскольку в тесте устройства управления электропитанием не задействованы, эту возможность удобнее отключить, иначе будет постоянно выдаваться предупреждение, что STONITH не сконфигурирован
На кластерах находящихся в эксплуатации STONITH обязательно должен быть настроен и включен для предотвращения событий, приводящих к повреждению данных.sudo pcs property set stonith-enabled=false
Посмотреть состояние узлов кластера можно командой:
Online: [ pcmk-1 pcmk-2 ]
Проверить правильность конфигурации кластера можно командой:
sudo crm_verify -L
Если узел кластера выключался/перезагружался, то считается, что узел работает нештатно, и решение о возможности его повторного включения в кластер может принять только человек. Автоматическое включение узлов в кластер не применяется. Для возврата узла в кластер требуется повторно добавить его в кластер, выполнив на нем команду:
Настроить поведение ресурсов:
Задать значение глобального таймаута на операции со всеми ресурсами:
На рабочем кластере не рекомендуется использовать глобальный таймаут, следует задавать таймауты для каждой операции у каждого ресурса кластера, исходя из реальных значений временных интервалов, полученных на конкретной аппаратной платформе.sudo pcs resource op defaults timeout=240sДобавить IP-адрес кластера 192.168.23.100 как ресурс ClusterIP:
sudo pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.23.100 cidr_netmask=32 op monitor interval=30s
Установка и подключение агентов
Подключение агентов выполняется однократно на любом узле.
Агент postgresql
Подготовка сервера postgresql
Установить пакеты:
Для 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:
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":
sudo pcs constraint colocation add Database with ClusterIP INFINITY
"Сначала запускается ClusterIP, затем Database":
sudo pcs constraint order ClusterIP then Database
Тестирование
Тестирование должно продемонстрировать отказоустойчивость двухузлового кластера Active/Passive.
Подготовка теста
Установить клиентский пакет PostgreSQL:
#!/bin/sh while true ; do psql postgresql://postgres:123@192.168.23.100/cluster -tc "SELECT text FROM info;" | xargs echo sleep 1s done
Установить созданному файлу сценария права на исполнение
Если в данный момент ресурс 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
Отключение от сети узла кластера
Найти узел кластера, на котором размещены ресурсы, выполнив команду на любом узле:
Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-2 Test DB - pcmk-2
Включить сетевое соединение на отключенном от сети узле:
должна вывести:
Online: [ pcmk-1 pcmk-2 ]
Если вывод команды на разных узлах различается - значит узел еще не вернулся в кластер.
Выключение узла кластера
Найти узел кластера, на котором размещены ресурсы, выполнив команду на любом узле:
Test DB - pcmk-2 Test DB - pcmk-2 Test DB - pcmk-2 Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-1
Когда выключенный узел загрузится вернуть его в кластер, выполнив на нем команду: