Настройка кластера Angie#

Это руководство описывает процесс создания отказоустойчивого кластера Angie с автоматической синхронизацией конфигурации и переключением виртуального IP-адреса.

Подготовка узлов кластера для синхронизации#

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

Настройка пользователей и прав доступа#

Создайте на всех узлах пользователя (например, user) с правами sudo:

$ sudo adduser user

Задайте пароль при необходимости:

$ sudo passwd user

Примечание

В некоторых ОС (например, в Альт Линукс) следует добавить пользователя в группу wheel:

$ sudo usermod -a -G wheel user

Для работы с rsync при включенном МКЦ в Astra Linux задайте корректный уровень целостности:

$ sudo pdpl-user -i 63 user

Настройте sudo без пароля:

$ echo "user ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

На мастер-узле создайте SSH-ключи и скопируйте их на резервные узлы:

$ su - user
$ ssh-keygen -t rsa
$ ssh-copy-id user@node2_hostname

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

Перед копированием SSH-ключей убедитесь, что в файле /etc/ssh/sshd_config установлена опция:

PasswordAuthentication yes

После настройки доступа по ключу установите значение no для повышения безопасности.

Примечание

Для перекрестной синхронизации конфигурации Angie скопируйте ключи пользователя на все узлы:

$ scp -p .ssh/id_rsa* user@node2_hostname:.ssh/

Установка Angie PRO и angie-ha-sync#

После подготовки узлов необходимо установить основные компоненты кластера: Angie PRO и пакет для синхронизации конфигурации.

Настройте репозиторий на всех узлах по инструкции для пакетов вашей системы.

Установка angie-ha-sync#

Примечание

При установке пакета angie-ha-sync на чистую систему по зависимостям будет установлен также пакет angie.

На всех узлах установите пакет с помощью пакетного менеджера вашей ОС:

$ sudo {apk|apt|pkg|yum|zypper} {add|install} angie-ha-sync

Настройка синхронизации конфигурации#

Следующий этап — настройка автоматической синхронизации конфигурационных файлов между узлами кластера.

Примечание

Принцип работы синхронизации:

  • Синхронизация выполняется через rsync.

  • Происходит только при работающей службе Angie.

  • Выполняется вручную (команда angiehasync -Sd).

  • Работает в одном направлении: от мастер-узла к резервному.

  • rsync запущен в режиме демона (daemon-mode).

Настройка rsync#

Создайте конфигурацию rsync (/etc/rsyncd.conf) на узлах:

[angie] # Директория с конфигурацией Angie
    path = /etc/angie
# Пользователь для синхронизации
    uid = user
# Группа пользователя
    gid = user
# IP или подсеть, с которой разрешено подключение
    hosts allow = 10.21.8.0/24
# Запретить все остальные
    hosts deny = *

В зависимости от ОС запустите демон:

$ sudo service rsyncd start # или $ sudo service rsync start

Примечание

Для некоторых систем есть готовые инструкции:

Настройка файла синхронизации#

Отредактируйте /etc/angiehasync/angiehasync.conf:

M_NODE="<node1_hostname>"            # Имя хоста или IP данной ноды
TARGET_HOSTS="<node2_hostname>"      # Список хостов/IP для синхронизации (через пробел).
                                     # На резервных узлах можно не указывать.
SSH_USER="user"                      # Пользователь для синхронизации (с правами администратора)
SSH_ID="/home/$SSH_USER/.ssh/id_rsa" # Путь к приватному ключу

Примечание

Для перекрестной синхронизации заполните список TARGET_HOSTS на всех узлах; при этом не следует включать в список текущий узел, на котором в данный момент идет настройка.

Настройка проверок работоспособности для Angie#

Добавьте блок проверки работоспособности в конфигурацию Angie (/etc/angie/angie.conf):

server {

    listen unix:/tmp/angie_hcheck.sock; # Unix-сокет для проверки
    access_log off;
    error_log /dev/null;
    default_type text/plain;
    return 200 'ok\n';
}

Запустите Angie:

$ sudo angie -t && sudo service angie start

Запустите синхронизацию:

$ sudo angiehasync -Sd

Примечание

Скрипт автоматически проверит конфигурацию, выполнит синхронизацию со всеми узлами и применит ее.

Настройка Keepalived#

Для автоматического переключения между узлами кластера используется Keepalived — служба управления виртуальными IP-адресами (VIP).

Примечание

Если пакет keepalived не установлен — установите его:

$ sudo {apk|apt|pkg|yum|zypper} {add|install} keepalived

Для связывания процессов с нелокальными IP-адресами разрешите системе соответствующие действия:

$ sudo sysctl -w net.ipv4.ip_nonlocal_bind=1

Подробнее: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt#ip_nonlocal_bind

Допустим, VIP 10.21.11.230 назначается либо на мастер-узел (10.21.8.26), либо на резервный (10.21.8.27).

Если Angie слушает этот VIP (listen 10.21.11.230:80;), но адрес пока не назначен, Angie не сможет стартовать без параметра ip_nonlocal_bind.

Конфигурация Keepalived#

На мастер-узле (/etc/keepalived/keepalived.conf):

global_defs {
    enable_script_security
}

vrrp_script angie_check {
    script "/usr/bin/curl -s --connect-timeout 5 -A 'angie_hcheck_script'
    --no-buffer -XGET --unix-socket /tmp/angie_hcheck.sock http://hcheck/"
    interval 5 user angie
}

vrrp_instance angie {
    state MASTER interface enp0s2 virtual_router_id 254 priority 100
    advert_int 2 unicast_src_ip 10.21.8.26

    unicast_peer {
        10.21.8.27
    }

    virtual_ipaddress {
        10.21.11.230
    } track_script {
        angie_check
    }
}

На резервном узле:

global_defs {
    enable_script_security
}

vrrp_script angie_check {
    script "/usr/bin/curl -s --connect-timeout 5 -A 'angie_hcheck_script'
    --no-buffer -XGET --unix-socket /tmp/angie_hcheck.sock http://hcheck/"
    interval 5 user angie
}

vrrp_instance angie {
    state MASTER interface enp0s2 virtual_router_id 254 priority 99
    advert_int 2 unicast_src_ip 10.21.8.27

    unicast_peer {
        10.21.8.26
    }

    virtual_ipaddress {
        10.21.11.230
    } track_script {
        angie_check
    }
}

Примечание

В разделе vrrp_instance angie задайте следующие значения:

  • unicast_src_ip — IP текущего узла

  • unicast_peer — IP соседних узлов

  • virtual_ipaddress — виртуальный IP (VIP)

  • interface — сетевой интерфейс

Запустите службу:

$ sudo keepalived -t && sudo service keepalived start

Разбор конфигурации Keepalived#

Рассмотрим подробнее основные элементы конфигурации Keepalived для понимания принципов работы кластера.

Конфигурация включает две части:

  • global_defs — глобальные настройки

  • vrrp_instance — параметры VRRP (переключение VIP)

Основные элементы:

  • enable_script_security — разрешает выполнение скриптов проверки работоспособности

  • vrrp_script — скрипт проверки Angie

  • state MASTER — начальное состояние узла

  • priority — приоритет (роль MASTER назначается наибольшему)

  • advert_int — интервал VRRP-обновлений

  • unicast_src_ip — IP текущего узла

  • unicast_peer — IP соседей

  • virtual_ipaddress — VIP-адрес

  • track_script — контроль доступности через скрипты проверки работоспособности

Примечание

Если исходный мастер-узел восстановится, он снова получит роль MASTER (приоритет выше). Чтобы отключить возврат, используйте параметр nopreempt:

vrrp_instance angie {
    ... nopreempt
}

Проверка работы кластера#

После завершения настройки необходимо протестировать работу кластера и убедиться в корректном переключении между узлами.

Проверьте статус VIP:

$ ip addr show enp0s2 | grep "10.21.11.230"

Протестируйте отказоустойчивость:

Остановите Angie на мастер-узле:

$ sudo service angie stop

Проверьте переход VIP на резервный узел:

$ ip addr show enp0s2 | grep "10.21.11.230"

Запустите Angie на мастер-узле снова:

$ sudo service angie start

После этого VIP должен вернуться на мастер-узел.