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

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

Ключ

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

Оглавление


Информация
titleДанная статья применима к:
  • 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-1pcmk-2
Статический IP-адрес узла192.168.23.101192.168.23.102

Дополнительно в качестве IP-адреса кластера будет использован адрес 192.168.23.100. IP-адрес рабочей станции, с помощью которой будет выполняться тестирование, неважен.

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

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

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

Узел 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.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.method manual
sudo nmcli c u path 1


Подробнее про настройку сетевых подключений см. Настройка сетевых подключений в Astra Linux.

Настройка /etc/hosts

Записать имена узлов в файл /etc/hosts и удалить строку 127.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 '/^127\.0\.1\.1/d' /etc/hosts

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

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

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

Command
sudo apt install pacemaker 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 (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 cluster start


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

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

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


    Command
    sudo pcs resource op defaults timeout=240s


  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.

  • Подключение ресурса

    Добавить службу 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

    Когда выключенный узел загрузится вернуть его в кластер, выполнив на нем команду:

    Commandsudo pcs cluster start

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