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

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

Версия 1 Следующий »

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

  • 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

  • Нет меток