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

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

Ключ

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

Оглавление


Информация
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


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

Параметры сети

  • Сеть сеть 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 и удалить строку :

  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 РУСБ.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 позволяет использовать в качестве кластерной службы программное обеспечение, поддерживающее мандатное управление доступом (МРД).

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

    Command
    sudo apt install pacemaker
pcs 
  1. pcs


После установки пакетов назначить пользователю 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


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

    Command

    while ! sudo pcs status ; do sleep 1 ; done


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

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


    Раскрыть
    titleПодробнее про STONITH

    Отключить технологию STONITH:

    infoНа кластерах находящихся в эксплуатации  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 о них сообщит.

Предупреждение

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

Command
sudo pcs cluster start


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

  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

Подготовка сервера 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.


    1. Информация
      Параметры команды, задающиеся колючем op (в примере выше - параметр 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

    "Сначала запускается 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