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

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

Ключ

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

Оглавление


Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1
  • Astra Linux Common Edition 2.12


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

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

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

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

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

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

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

В

в качестве адреса кластера будет использован адрес 192.168.23.100;

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

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

    Узел 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


    Записать имена узлов в файл /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


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

    Command
    sudo hostnamectl set-hostname pcmk-1


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

    Command
    sudo hostnamectl set-hostname pcmk-2


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

    Command
    sudo reboot


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

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

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

    Command
    sudo apt install -y pacemaker pcs

    Назначить пользователю hacluster пароль (для примера использован пароль 123):

    Command
    sudo chpasswd <<<'hacluster:123'

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

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

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

    Command
    sudo pcs cluster destroy

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

    Command
    sudo pcs cluster auth pcmk-1 pcmk-2 -u hacluster -p 123
    sudo pcs cluster setup --name astracluster pcmk-1 pcmk-2 --force

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

    Command
    sudo pcs cluster start --all

    Отключить 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


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

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

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

    Command
    cd /tmp

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

    Command
    sudo apt install postgresql-astra

    Создать базу данных 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)');"

    Задать пароль пользователю БД postgresСУБД PostgreSQL:

    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/main/postgresql.conf

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

    Command
    sudo systemctl disable postgresql

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

    Command
    sudo pg_ctlcluster 9.6 main restart


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

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

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

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


    Command
    sudo pcs resource op defaults timeout=240s

    Добавить 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/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":

      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