Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление


Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и РУСБ.10015-10, РУСБ.10015-17
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12


Параметры стенда

Для развертывания кластера используются два подсоединенных к сети компьютера с установленной ОС 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-1pcmk-2
    Статический IP-адрес узла192.168.23.101192.168.23.102
Дополнительно в качестве IP-адреса кластера будет использован адрес 192.168.23.100. IP-адрес станции для тестирования неважен.

Настройка стенда

Настройка сетевых подключений

Узлам рекомендуется присвоить статические адреса. Если на узлах кластера для управления сетевыми подключениями используется NetworkManager настройку Network Manager, то настройку статических адресов можно выполнить с помощью графического инструмента или из командной строки командами:

Узел 1Узел 2

Присвоить узлу статический IP-адрес 192.168.23.101:

Command
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.dns 77.88.8.8 
ipv4.method manual
sudo nmcli c u path 1


Присвоить узлу статический IP-адрес 192.168.23.102:

Command
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.dns 77.88.8.8
ipv4.method manual
sudo nmcli c u path 1


В качестве IP-адреса сервера DNS (параметр ipv4.dns) для примера указан адрес сервера Яндекс (77.88.8.8), который можно заменить на любой удобный адрес. Подробнее про настройку сетевых подключений см. Настройка сетевых подключений в Astra Linux.

Настройка разрешения имен узлов с помощью /etc/hosts

Записать имена узлов На всех узлах кластера внести изменения в файл /etc/hosts и удалить строку 127:

  1. Удалить строки, начинающуюся с 127.0.1.1.
  2. Внести строки с IP-адресами и именами узлов:

    Блок кода
    192.168.23.101 pcmk-1
    192.168.23.102  pcmk-2


  3. Исключить указание имен узлов в строках с адресами локальной петли (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

Установка пакетов кластерного ПО

Информация
Установка пакетов кластерного ПО выполняется на каждом узле кластера.

Установить пакеты кластерного ПО

и СУБД

:

  1. Для Astra Linux Special Edition

  2. x.7
  3. РУСБ.10015-01 (очередное обновление 1.7) с установленным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3) и для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным обновлением БЮЛЛЕТЕНЬ № 20221220SE16 (оперативное обновление 12):

    Command
    sudo apt install
  4. -y
  5. pacemaker pcs
  6. postgresql
  7. astra-resource-
  8. 11

    или, в зависимости от подключенных репозиториев и установленных оперативных обновлений:

    Command
    sudo apt install -y pacemaker pcs postgresql-14
    Для обновлений Astra Linux Special Edition до x.7 и Astra Linux Common Edition
  9. agents

    Использование пакета astra-resource-agents позволяет использовать в качестве кластерной службы программное обеспечение, поддерживающее мандатное управление доступом (МРД).

  10. Для более ранних обновлений или в случаях, когда поддержка МРД в кластерных службах не требуется:

    Command
    sudo apt install
  11. -y
  12. pacemaker pcs
  13. postgresql-astra

После установки пакетов назначить пользователю hacluster пароль:

Command
sudo passwd hacluster
Заданный на этом шаге пароль далее в примерах обозначается как <пароль>.

Инициализация кластера

Информация
Инициализация кластера выполняется однократно на любом узле из узлов кластера.

Инициализировать кластерУдалить все существующие файлы конфигурации кластера с помощью команды::

Command
sudo pcs cluster destroy

Собрать кластер (для примера используется имя кластера astracluster):

  1. Для 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


  2. Для обновлений 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


  3. Запустить кластер:

    Command
    sudo pcs cluster start --all
Проверить

  1. Убедиться, что кластер полностью запустился:

    Command

    while ! sudo pcs status ; do sleep 1 ; done

Отключить STONITH:


  1. В целях тестирования отключить технологию STONITH.

    Предупреждение
    На кластерах находящихся в эксплуатации  STONITH обязательно должен быть настроен и включен для предотвращения событий, приводящих к повреждению данных.


    Раскрыть
    titleПодробнее про STONITH
infoНа кластерах находящихся в эксплуатации  STONITH обязательно должен быть настроен и включен для предотвращения событий, приводящих к повреждению данных.
  1. STONITH (Shoot The Other Node In The Head) - технология, отвечающая за физическое устранение узла из кластера, и обеспечивающая полное обесточивание неисправных узлов, чтобы исключить повреждение данных. Поскольку в тесте устройства управления электропитанием не задействованы, эту возможность удобнее отключить, иначе будет постоянно выдаваться предупреждение, что STONITH не сконфигурирован

Предупреждение
  1. Команда для отключения:

    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 cluster start

Подготовка сервера PostgreSQL

Информация
Выполняется на каждом узле

Перейти в каталог /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/{9.6,11,14}/main/postgresql.conf

Так как в дальнейшем работой сервиса будет управлять Corosync, следует исключить PostgreSQL из автоматической загрузки:

Command
sudo systemctl disable postgresql

Перезапустить кластер СУБД main:

Command
sudo pg_ctlcluster <номер_версии> main restart

Где <номер_версии> - 9.6, 11 или 14 в зависимости от используемой версии PostgreSQL.

Подключение ресурсов и настройка их поведения

Информация
Выполняется на любом узле


Настроить поведение ресурсов:

  1. Задать

Задать
  1. значение глобального таймаута на операции со всеми ресурсами:

    Предупреждение
    На рабочем кластере не рекомендуется использовать глобальный таймаут, следует задавать таймауты для каждой операции у каждого ресурса кластера, исходя из реальных значений временных интервалов, полученных на конкретной аппаратной платформе.


    Command
    sudo pcs resource op defaults timeout=240s

    Если при выполнении этой команды возникает ошибка:

    Блок кода
    Error: Could not map name=... to a UUID

    то команду следует выполнить повторно.

  2. Добавить 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 \
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 constraint colocation add Database with ClusterIP INFINITY

  1. Информация
    Параметры команды, задающиеся колючем op (в примере выше - параметр op monitor interval=30s) должны указываться последними.



Информация

Если узел кластера выключался/перезагружался, требуется повторно добавить его

"Сначала запускается ClusterIP, затем Database":

Command
sudo pcs constraint order ClusterIP then Database

Тестирование

Тестирование должно продемонстрировать отказоустойчивость двухузлового кластера Active/Passive.

Подготовка теста

Установить клиентский пакет PostgreSQL:

Command
sudo apt install postgresql-client

На рабочей станции, находящейся в одной сети с кластером, создать сценарий test-request.sh следующего содержания:

Блок кода
languagebash
#!/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



Установка и подключение кластерных служб

Кластерная служба apache2 для кластера pacemaker

Кластерная служба postgresql для кластера pacemaker