Настройка кластера Angie#
Это руководство описывает процесс создания отказоустойчивого кластера Angie с автоматической синхронизацией конфигурации и переключением виртуального IP-адреса.
Подготовка узлов кластера для синхронизации#
Первым шагом необходимо подготовить все узлы кластера,
настроив учетные записи пользователей
и обеспечив безопасный доступ между серверами. Создайте на всех узлах пользователя
(например, Задайте пароль при необходимости: Примечание В некоторых ОС (например, в Альт Линукс)
следует добавить пользователя в группу Для работы с Настройте sudo без пароля: На мастер-узле создайте SSH-ключи и скопируйте их на резервные узлы: Предупреждение Перед копированием SSH-ключей убедитесь, что в файле
После настройки доступа по ключу установите значение Примечание Для перекрестной синхронизации конфигурации Angie скопируйте ключи
пользователя на все узлы:Настройка пользователей и прав доступа#
angie-ha-sync) с правами sudo:$ sudo adduser angie-ha-sync
$ sudo passwd angie-ha-sync
wheel:$ sudo usermod -a -G wheel angie-ha-sync
rsync при включенном МКЦ в Astra Linux задайте
корректный уровень целостности:$ sudo pdpl-user -i 63 angie-ha-sync
$ echo "angie-ha-sync ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
$ su - angie-ha-sync
$ ssh-keygen -t rsa
$ ssh-copy-id angie-ha-sync@node2_hostname
/etc/ssh/sshd_config установлена опция:PasswordAuthentication yesno для повышения
безопасности.$ scp -p ~angie-ha-sync/.ssh/id_rsa angie-ha-sync@node2_hostname:.ssh/
Установка Angie и angie-ha-sync#
После подготовки узлов необходимо установить основные компоненты кластера: Angie и пакет для синхронизации конфигурации.
Настройте репозиторий на всех узлах по инструкции для пакетов вашей системы:
Установка angie-ha-sync#
Модуль синхронизации конфигурации доступен в следующих пакетах:
Angie:
angie-ha-syncAngie PRO:
angie-pro-ha-sync
Примечание
При установке этого пакета на чистую систему
по зависимостям будет установлен также соответствующий пакет
angie или angie-pro.
На всех узлах установите пакет с помощью пакетного менеджера вашей ОС, например:
$ sudo {apk|apt|pkg|yum|zypper} {add|install} angie-pro-ha-sync
Настройка синхронизации конфигурации#
Следующий этап — настройка автоматической синхронизации конфигурационных файлов между узлами кластера.
Примечание
Принцип работы синхронизации:
Синхронизация выполняется через
rsync.Происходит только при работающей службе Angie.
Выполняется вручную (команда
angiehasync -Sd).Работает в одном направлении: от мастер-узла к резервному.
rsyncзапущен в режиме демона (daemon-mode).
Настройка rsync#
Создайте конфигурацию rsync (/etc/rsyncd.conf) на узлах:
[angie] # Директория с конфигурацией Angie
path = /etc/angie
# Пользователь для синхронизации
uid = angie-ha-sync
# Группа пользователя
gid = angie-ha-sync
# 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#
Добавьте сервер для проверки работоспособности в блок http
конфигурации Angie. Если используется файл /etc/angie/angie.conf
из пакета, поместите этот сервер в отдельный файл в каталоге
/etc/angie/http.d/, например /etc/angie/http.d/healthcheck.conf,
так как блок http в файле /etc/angie/angie.conf из пакета
подключает /etc/angie/http.d/*.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, чтобы он загрузил новый файл (пакеты для Debian и Ubuntu запускают Angie при установке, поэтому он может уже работать):
$ sudo angie -t && sudo service angie restart
Запустите синхронизацию:
$ 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— скрипт проверки Angiestate 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 должен вернуться на мастер-узел.