Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
Параметры стенда
Параметры сети
- Сеть сеть 192.168.23.0/24;
- Адрес адрес маршрутизатора (шлюза) сети 192.168.23.1;
- Предполагаетсяпредполагается, что в сети отсутствует служба DNS, поэтому адреса узлов задаются с помощью файла /etc/hosts.
Структура стенда
Для стенда используется два компьютера:
- В качестве IP-адреса кластера использован адрес 192.168.23.100.
Для развертывания кластера используются два подсоединенных к сети компьютера с установленной ОС Astra Linux. Каждый из этих компьютеров будет выполнять роль узла кластера, поэтому далее они будут называться Узел 1 и Узел 2
:
Параметр Узел 1 Узел 2 Имя узла pcmk-1 pcmk-2 Статический IP-адрес узла 192.168.23.101 192.168.23.102
Настройка стенда
Настройка сетевых подключений
Узлам рекомендуется присвоить статические адреса. Если на узлах кластера для управления сетевыми подключениями используется NetworkManager настройку Network Manager, то настройку статических адресов можно выполнить с помощью графического инструмента или из командной строки командами:
Узел 1 | Узел 2 | ||||
---|---|---|---|---|---|
Присвоить узлу статический IP-адрес 192.168.23.101:
| Присвоить узлу статический IP-адрес 192.168.23.102:
|
В качестве IP-адреса сервера DNS (параметр ipv4.dns) для примера указан адрес сервера Яндекс (77.88.8.8), который можно заменить на любой удобный адрес. Подробнее про настройку сетевых подключений см. Настройка сетевых подключений в Astra Linux.
Настройка разрешения имен узлов с помощью /etc/hosts
Записать имена узлов На всех узлах кластера внести изменения в файл /etc/hosts и удалить строку :
- Удалить строки, начинающуюся с 127.0.1.1.
Внести строки с IP-адресами и именами узлов:
Блок кода 192.168.23.101 pcmk-1 192.168.23.102 pcmk-2
- Исключить указание имен узлов в строках с адресами локальной петли (127.0.0.1).
Пример команд для внесения изменений.1:
Command |
---|
sudo sed -i '$a 192.168.23.101\tpcmk-1' /etc/hosts sudo sed -i '$a 192.168.23.102\tpcmk-2' /etc/hosts sudo sed -i 's/^127\.0\.0\.1\s.*/127.0.0.1\tlocalhost/' /etc/hosts sudo sed -i '/^127\.0\.1\.1/d' /etc/hosts |
Установка пакетов кластерного ПО
Информация |
---|
Установка пакетов кластерного ПО выполняется на каждом узле кластера. |
Установить пакеты кластерного ПО и СУБД:
Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3) и для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным обновлением БЮЛЛЕТЕНЬ № 20221220SE16 (оперативное обновление 12):
Command sudo apt install pacemaker pcs astra-resource-agents Использование пакета astra-resource-agents позволяет использовать в качестве кластерной службы программное обеспечение, поддерживающее мандатное управление доступом (МРД).
Для более ранних обновлений или в случаях, когда поддержка МРД в кластерных службах не требуется:
Command sudo apt install pacemaker
pcs
После установки пакетов назначить пользователю hacluster пароль:
Command |
---|
sudo passwd hacluster |
Инициализация кластера
Информация |
---|
Инициализация кластера выполняется однократно на любом узле из узлов кластера. |
Инициализировать кластерУдалить все существующие файлы конфигурации кластера с помощью команды::
Command |
---|
sudo pcs cluster destroy |
Собрать кластер (для примера используется имя кластера astracluster):
Для Astra Linux Special Edition x.7:
Command 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:
Command sudo pcs cluster auth pcmk-1 pcmk-2 -u hacluster -p <пароль>
sudo pcs cluster setup --name astracluster pcmk-1 pcmk-2 --forceЗапустить кластер:
Command sudo pcs cluster start --all Убедиться, что кластер полностью запустился:
Command while ! sudo pcs status ; do sleep 1 ; done
В целях тестирования отключить технологию STONITH.
Предупреждение На кластерах находящихся в эксплуатации STONITH обязательно должен быть настроен и включен для предотвращения событий, приводящих к повреждению данных. Раскрыть title Подробнее про STONITH Отключить технологию STONITH:
info
STONITH (Shoot The Other Node In The Head) - технология, отвечающая за физическое устранение узла из кластера, и обеспечивающая полное обесточивание неисправных узлов, чтобы исключить повреждение данных. Поскольку в тесте устройства управления электропитанием не задействованы, эту возможность удобнее отключить, иначе будет постоянно выдаваться предупреждение, что STONITH не сконфигурирован
На кластерах находящихся в эксплуатации STONITH обязательно должен быть настроен и включен для предотвращения событий, приводящих к повреждению данных.Предупреждение Команда для отключения:
Command sudo pcs property set stonith-enabled=false
Информация |
---|
Процедура добавления узла в кластер занимает некоторое время, обычно не более 1 минуты. |
Посмотреть Проверить состояние узлов кластера можно командой:
Command |
---|
sudo pcs status |
Если кластер успешно стартовал, то состояние узлов кластера в выводе команды pcs status будет таким:
Блок кода |
---|
Online: [ pcmk-1 pcmk-2 ] |
Проверить правильность конфигурации кластера можно командой:
Command |
---|
sudo crm_verify -L |
Если конфигурация кластера содержит ошибки, утилита crm_verify о них сообщит.
Предупреждение | ||
---|---|---|
Если узел кластера выключался/перезагружался, то считается, что узел работает нештатно, и решение о возможности его повторного включения в кластер может принять только человек. Автоматическое включение узлов в кластер не применяется. Для возврата узла в кластер требуется повторно добавить его в кластер, выполнив на нем команду:
|
Настроить поведение ресурсов:
Задать значение глобального таймаута на операции со всеми ресурсами:
Предупреждение На рабочем кластере не рекомендуется использовать глобальный таймаут, следует задавать таймауты для каждой операции у каждого ресурса кластера, исходя из реальных значений временных интервалов, полученных на конкретной аппаратной платформе. Command sudo pcs resource op defaults timeout=240s Если при выполнении этой команды возникает ошибка:
Блок кода Error: Could not map name=... to a UUID
то команду следует выполнить повторно.
Добавить IP-адрес кластера 192.168.23.100 как ресурс ClusterIP:
Command 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:
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 |
Подготовка данных для тестирования
Перейти в каталог /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.
Информация Параметры команды, задающиеся колючем op (в примере выше - параметр op monitor interval=30s) должны указываться последними.
Информация |
---|
Если узел кластера выключался/перезагружался, требуется повторно добавить его |
Подключение ресурса
Добавить службу PostgreSQL как ресурс Database:
Command |
---|
sudo pcs resource create Database ocf:heartbeat:pgsql \ |
Где <номер_версии> - 9.6, 11 или 14 в зависимости от используемой версии PostgreSQL.
Установить ограничения:
"Database должен работать на узле, где размещен ClusterIP":
Command |
---|
sudo pcs constraint colocation add Database with ClusterIP INFINITY |
"Сначала запускается ClusterIP, затем Database":
Command |
---|
sudo pcs constraint order ClusterIP then Database |
Тестирование
Тестирование должно продемонстрировать отказоустойчивость двухузлового кластера Active/Passive.
Подготовка теста
Установить клиентский пакет PostgreSQL:
Command |
---|
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 |
Установить созданному файлу сценария права на исполнение
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 |
в кластер, выполнив на нем команду:
|