Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
Параметры стенда
Для развертывания кластера используются два подсоединённых к сети компьютера с установленной ОС Astra Linux. Каждый из этих компьютеров будет выполнять роль узла кластера, поэтому далее они будут называться Узел 1 и Узел 2.
Параметры сети
:- Сеть сеть 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
Дополнительно:
- В качестве адреса кластера будет использован адрес 192.168.23.100;
- Для тестирования отказоустойчивости используется рабочая станция, подключенная к той же сети;
Настройка стенда
Настройка сетевого соединения и имен узлов
Настройка стенда
Настройка сетевых подключений
Узлам рекомендуется присвоить статические адреса. Если на узлах кластера для управления сетевыми подключениями используется 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:
- Удалить строки, начинающуюся с 127.0.1.1.
Внести строки с IP-адресами и именами узлов:
Блок кода 192.168.23.101 pcmk-1 192.168.23.102 pcmk-2
- Исключить указание имен узлов в строках с адресами локальной петли (127.0.0.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 |
Установить имя узла pcmk-1:
Command |
---|
sudo hostnamectl set-hostname pcmk-1 |
sudo sed -i '/^127\.0\.1\.1/d' /etc/hosts |
Установка пакетов
Установить имя узла pcmk-2:
Command |
---|
sudo hostnamectl set-hostname pcmk-2 |
Перезагрузить узел:
Command |
---|
sudo reboot |
кластерного ПО
Информация |
---|
Установка пакетов кластерного ПО выполняется на каждом узле кластера. |
Установить пакеты кластерного ПО:
Для 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 парольНазначить пользователю hacluster пароль (для примера использован пароль 123):
Command |
---|
sudo chpasswd <<<'hacluster:123'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
Отключить STONITH:
Убедиться, что кластер полностью запустился:
Command while ! sudo pcs status ; do sleep 1 ; done
В целях тестирования отключить технологию STONITH.
Предупреждение На кластерах находящихся в эксплуатации STONITH обязательно должен быть настроен и включен для предотвращения событий, приводящих к повреждению данных. Раскрыть title Подробнее про STONITH
STONITH (Shoot The Other Node In The Head) - технология, отвечающая за физическое устранение узла из кластера, и обеспечивающая полное обесточивание
неисправных узлов, чтобы исключить повреждение данных. Поскольку в тесте устройства управления электропитанием не
задействованы, эту возможность удобнее отключить, иначе будет постоянно выдаваться предупреждение, что 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 о них сообщит.
Предупреждение | ||
---|---|---|
Если узел кластера выключался/перезагружался, то считается, что узел работает нештатно, и решение о возможности его повторного включения в кластер может принять только человек. Автоматическое включение узлов в кластер не применяется. Для возврата узла в кластер требуется повторно добавить его в кластер, выполнив на нём нем команду:
|
Подготовка сервера PostgreSQL
Информация |
---|
Выполняется на каждом узле |
Command |
---|
cd /tmp |
Command |
---|
sudo apt install postgresql-astra |
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)');" |
Задать пароль пользователю БД postgres:
Command |
---|
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '123';" |
Разрешить СУБД PostgreSQL принимать внешние подключения:
Command |
---|
sudo sed -i '/^listen_addresses/s/localhost/*/' /etc/postgresql/9.6/main/postgresql.conf |
Так как в дальнейшем работой сервиса будет управлять Corosync, следует исключить PostgreSQL из автоматической загрузки:
Command |
---|
sudo systemctl disable postgresql |
Перезапустить кластер БД main:
Command |
---|
sudo pg_ctlcluster 9.6 main restart |
Подключение ресурсов и настройка их поведения
Настроить поведение ресурсов:
Задать значение глобального таймаута на операции со всеми ресурсами:
Предупреждение На рабочем кластере не рекомендуется использовать глобальный таймаут, следует задавать таймауты для каждой операции у каждого ресурса кластера, исходя из реальных значений временных интервалов, полученных на конкретной аппаратной платформе. 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 как ресурс Database:
Command |
---|
sudo pcs resource create Database ocf:heartbeat:pgsql \ |
Установить ограничения:
"Database должен работать на узле, где размещён ClusterIP":
Command |
---|
sudo pcs constraint colocation add Database with ClusterIP INFINITY |
Информация Параметры команды, задающиеся колючем op (в примере выше - параметр op monitor interval=30s) должны указываться последними.
Информация | ||
---|---|---|
Если узел кластера выключался/перезагружался, требуется повторно добавить его в кластер, выполнив на нем команду:
|
Установка и подключение кластерных служб
Кластерная служба apache2 для кластера pacemaker
Кластерная служба postgresql для кластера pacemaker
"Сначала запускается 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 |
Когда выключенный узел загрузится вернуть его в кластер, выполнив на нём команду: