Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1 и 2
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)

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

Для развертывания кластера используются два подсоединённых к сети компьютера с установленной ОС Astra Linux. Каждый из этих компьютеров будет выполнять роль узла кластера, поэтому далее они будут называться Узел 1 и Узел 2.

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

  • Сеть 192.168.23.0/24;
  • Адрес маршрутизатора (шлюза) сети 192.168.23.1;
  • Предполагается, что в сети отстутствует служба DNS, поэтому адреса узлов задаются с помощью файла /etc/hosts.

Параметры узлов

ПараметрУзел 1Узел 2
Имя узлаtpcmk-1tpcmk-2
Статический IP-адрес узла192.168.23.101192.168.23.102

Дополнительно:

  • В качестве адреса кластера будет использован адрес 192.168.23.100;
  • Для тестирования отказоустойчивости используется рабочая станция, подключенная к той же сети;

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

Настройка сетевого соединения и имен узлов

Узел 1Узел 2

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

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:

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

Записать имена узлов в файл /etc/hosts:

sudo sed -i '$a 192.168.23.101\tpcmk-1' /etc/hosts
sudo sed -i '$a 192.168.23.102\tpcmk-2' /etc/hosts

Установить имя узла pcmk-1:

sudo hostnamectl set-hostname pcmk-1

Установить имя узла pcmk-2:

sudo hostnamectl set-hostname pcmk-2

Перезагрузить узел:

sudo reboot

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

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

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

sudo apt install -y pacemaker pcs
Назначить пользователю hacluster пароль (для примера использован пароль 123):
sudo chpasswd <<<'hacluster:123'

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

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

Инициализировать кластер:

sudo pcs cluster destroy
Собрать кластер (для примера используется имя кластера astracluster):
sudo pcs cluster auth pcmk-1 pcmk-2 -u hacluster -p 123
sudo pcs cluster setup --name astracluster pcmk-1 pcmk-2 --force
Запустить кластер:
sudo pcs cluster start --all
Отключить STONITH:

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

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


sudo pcs property set stonith-enabled=false

Процедура добавления узла в кластер занимает некоторое время, обычно не более 1 минуты.

Посмотреть состояние узлов кластера можно командой:

sudo pcs status
Если кластер успешно стартовал, то состояние узлов кластера в выводе команды pcs status будет таким:

Online: [ pcmk-1 pcmk-2 ]

Проверить правильность конфигурации кластера можно командой:

sudo crm_verify -L

Если конфигурация кластера содержит ошибки, утилита crm_verify о них сообщит.


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

sudo pcs cluster start

Подготовка HTTP-сервера Apache

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

Выполняется на каждом узле

Установить пакеты Apache:

sudo apt install -y apache2
Указать имя узла в конфигурации web-сайта Apache, используемой по умолчанию (файл /etc/apache2/sites-available/000-default.conf):
sudo sed -i "1i ServerName $(hostname)" /etc/apache2/sites-available/000-default.conf
Заменить содержимое индексного файла в пространстве документов Apache по умолчанию
echo "Test Site - $(hostname)" | sudo tee /var/www/html/index.html
Только для ОС Astra Linux 1.6 (Смоленск): отключить AstraMode в главной конфигурации Apache (файл /etc/apache2/apache2.conf):
sudo sed -i '/AstraMode/{s/on/off/;s/# //}' /etc/apache2/apache2.conf
Так как в дальнейшем работой сервиса будет управлять Corosync, следует исключить Apache из автоматической загрузки
sudo systemctl disable apache2
Перезапустить Apache:
sudo apachectl restart

Перейти в каталог /tmp:

cd /tmp
Установить пакеты PostgreSQL:
sudo apt install postgresql-astra
Создать базу данных cluster:
sudo -u postgres createdb cluster
Создать в базе данных таблицу info:
sudo -u postgres psql -d cluster -c "CREATE TABLE info (text varchar(80));"
Добавить в таблицу запись:
sudo -u postgres psql -d cluster -c "INSERT INTO info VALUES ('Test DB - $(hostname)');"
Задать пароль пользователю БД postgres:
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '123';"
Разрешить СУБД PostgreSQL принимать внешние подключения:
sudo sed -i '/^listen_addresses/s/localhost/*/' /etc/postgresql/9.6/main/postgresql.conf
Так как в дальнейшем работой сервиса будет управлять Corosync, следует исключить PostgreSQL из автоматической загрузки:
sudo systemctl disable postgresql
Перезапустить кластер БД main:
sudo pg_ctlcluster 9.6 main restart

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

Выполняется на любом узле

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

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

sudo pcs resource op defaults timeout=240s
Добавить IP-адрес кластра 192.168.23.100 как ресурс ClusterIP:
sudo pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.23.100 cidr_netmask=32 op monitor interval=30s

Добавить службу Apache как ресурс WebSite:Добавить службу PostgreSQL как ресурс Database:

sudo pcs resource create WebSite ocf:heartbeat:apache \
configfile=/etc/apache2/apache2.conf \
statusurl="http://localhost/server-status" \
op monitor interval=1min
Установить ограничения:

  • “WebSite должен работать на узле, где размещён ClusterIP”:

    sudo pcs constraint colocation add WebSite with ClusterIP INFINITY

  • “Сначала запускается ClusterIP, затем WebSite”:

    sudo pcs constraint order ClusterIP then WebSite


sudo pcs resource create Database ocf:heartbeat:pgsql \
pgctl="/usr/lib/postgresql/9.6/bin/pg_ctl" \
pgdata="/var/lib/postgresql/9.6/main" \
config="/etc/postgresql/9.6/main/postgresql.conf" \
socketdir="/var/run/postgresql/" \
op monitor interval=1min

Установить ограничения:

  • "Database должен работать на узле, где размещён ClusterIP":

    sudo pcs constraint colocation add Database with ClusterIP INFINITY

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

    sudo pcs constraint order ClusterIP then Database

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

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

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

ApachePostgreSQL

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

sudo apt install postgresql-client

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

#!/bin/sh
while true ; do
    wget --no-cache -qO- http://192.168.23.100/index.html
    sleep 1s
done


#!/bin/sh
while true ; do
    psql postgresql://postgres:123@192.168.23.100/cluster -tc "SELECT text FROM info;"
    sleep 1s
done

Установить созданному файлу сценария права на исполнение

chmod +x test-request.sh
Запустить сценарий:
./test-request.sh
Сценарий будет отправлять запрос кластеру 1 раз в секунду и выводить полученное содержимое на экран.

Если в данный момент ресурс ClusterIP размещён на узле 1, то вывод сценарий будет таким:

Test Site - pcmk-1
Test Site - pcmk-1
Test Site - pcmk-1
Test Site - pcmk-1
Test Site - pcmk-1
Test Site - pcmk-1

Отключение от сети узла кластера

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

sudo pcs status resources
На узле с кластерными ресурсами отключить сетевое соединение
sudo nmcli c d path 1
Кластерные ресурсы мигрируют на другой узел кластера и вывод скрипта test-request.sh изменится. Например, если кластерные ресурсы располагались на узле 1, то после отключения узла 1 от сети, ресурсы переместятся на узел 2.

Test Site - pcmk-1
Test Site - pcmk-1
Test Site - pcmk-1
Test Site - pcmk-2
Test Site - pcmk-2
Test Site - pcmk-2

Включить сетевое соединение на отключённом от сети узле:

sudo nmcli c u path 1
и дождаться его возвращение в кластер. После возвращения узла в кластер команда;
pcs status

должна вывести:

Online: [ pcmk-1 pcmk-2 ]

Выключение узла кластера

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

sudo pcs status resources
Выключить узел с кластерными ресурсами, перезагрузив его:
sudo reboot
Кластерные ресурсы мигрируют на другой узел кластера и вывод скрипта test-request.sh изменится.

Если кластерные ресурсы располагались на узле 2, то после выключения узла 2 ресурсы переместятся на узел 1.

Test Site - pcmk-2
Test Site - pcmk-2
Test Site - pcmk-2
Test Site - pcmk-1
Test Site - pcmk-1
Test Site - pcmk-1

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

sudo pcs cluster start

  • No labels