Настройка высокой доступности через keepalived в Debian
Keepalived — системный демон на Linux-системах, позволяющий организовать отказоустойчивость сервиса и балансировку нагрузки. Отказоустойчивость достигается за счет «плавающего» IP-адреса, который переключается на резервный сервер в случае отказа основного. Для автоматического переключения IP-адреса между серверами keepalived используется протокол VRRP (Virtual Router Redundancy Protocol), стандартизированный в RFC 2338 (https://www.ietf.org/rfc/rfc2338.txt).
Показать
Оглавление
Принципы работы протокола VRRP
Общий алгоритм работы
Установка и настройка keepalived
Результат
Источники
Принципы работы протокола VRRP
Теория и основные определения протокола VRRP:
VIP — Virtual IP, виртуальный IP адрес, который может автоматически переключаться между серверами в случае сбоев;
Master — сервер, на котором в данный момент активен VIP;
Backup — серверы, на которые переключится VIP в случае сбоя мастера;
VRID — Virtual Router ID, серверы, объединённые общим виртуальным IP (VIP), образуют так называемый виртуальный роутер, уникальный идентификатор которого, принимает значения от 1 до 255. Сервер может одновременно состоять в нескольких VRID, при этом для каждого VRID должны использоваться уникальные виртуальные IP-адреса;
Virtual MAC — виртуальный MAC-адрес (0000.5E00.01xx, где xx — номер группы VRRP).
Перейти к оглавлению.
Общий алгоритм работы:
Master-сервер с заданным интервалом отправляет VRRP пакеты на зарезервированный адрес multicast (многоадресной, когда отправитель один, а получателей может быть много) рассылки 224.0.0.18, а все backup-серверы слушают этот адрес.
Если backup-сервер не получает пакеты VRRP, то он начинает процедуру выбора master и, если он переходит в состояние master по приоритету, то активирует VIP и отравляет gratuitous ARP (особый вид ARP ответа, который обновляет MAC таблицу на подключенных коммутаторах, чтобы проинформировать о смене владельца виртуального IP адреса и MAC-адреса для перенаправления трафика).
Установка и настройка keepalived
Установку и настройку я провёл на однотипных серверах в виде виртуальных машин Virtualbox d1 и d2 с установленной системой Debian версии 11.1.0. В качестве IP-адресов серверов используются 10.9.1.16/24 — для сервера d1, 10.9.1.61/24 — для сервера d2. В качестве виртуального IP-адреса, который будет автоматически переключаться между серверами в случае сбоев, используется адрес 10.9.1.6/24.
N. B. Символ комментария в конфигурационном файле keepalived — это ВОСКЛИЦАТЕЛЬНЫЙ ЗНАК (!).
N. B. 2 <интерфейс> — сетевой интерфейс хостов d1 и d2.
N. B. 3 В примере приведена конфигурация без дополнительных проверок статусов каких-либо служб d1 и d2.
На машинах d1 и d2:
1 — на сетевом интерфейсе <интерфейс> настраиваю IP-адрес 10.9.1.16/24 на машине d1 и 10.9.1.61/24 на машине d2 соответственно;
2 — устанавливаю необходимые пакеты:
apt-get update d1 # apt-get install linux-headers-$(uname -r)
3 — устанавливаю Keepalived:
apt-get install keepalived
4 — настраиваю Keepalived:
на машине d1: Показать
cat <<EOF >>/etc/keepalived/keepalived.conf global_defs {} vrrp_instance d1 { state MASTER interface <интерфейс> virtual_router_id 101 priority 101 advert_int 1 virtual_ipaddress { 10.9.1.6/24 } } EOF
на машине d2: Показать
cat <<EOF >>/etc/keepalived/keepalived.conf global_defs {} vrrp_instance d2 { state BACKUP interface <интерфейс> virtual_router_id 101 priority 101 advert_int 1 virtual_ipaddress { 10.9.1.6/24 } } EOF
5 — запускаю демон keepalived:
systemctl start keepalived
N. B. 4 Если в системе используется брандмауэр, необходимо разрешить протокол VRRP в нём. На примере iptables — необходимо добавить в цепочки INPUT и OUTPUT следующие правила:
iptables -I INPUT -p vrrp -j ACCEPT iptables -I OUTPUT -p vrrp -j ACCEPT
N. B. 5 Для настройки записи лога службы keepalived в отдельный файл необходимо создать файл /etc/syslog.d/10-keepalived.conf с таким содержимым:
if $programname contains 'keepalived' then /var/log/keepalived.log if $programname contains 'keepalived' then stop
Затем перезагрузить rsyslog:
systemctl restart rsyslog
N. B. 6 Для ротации новых логов создать файл /etc/logrotate.d/keepalived с таким содержимым:
/var/log/keepalived.log { weekly rotate 8 compress delaycompress missingok notifempty }
N. B. 7 Включить автозапуск службы keepalive:
systemctl enable keepalived
Результат
На рисунке приведён результат отключения линка на сетевом интерфейсе на сервере d2 (до отключения функционировал в режиме master). Видно, что виртуальный IP-адрес 10.9.1.6 остаётся доступным: Показать
Источники
https://ru.wikipedia.org/wiki/VRRP
https://winitpro.ru/index.php/2019/09/09/keepalived-ha-balansirovka-plavayushhiy-ip-adres/
https://tecadmin.net/setup-ip-failover-on-ubuntu-with-keepalived/
Перейти к оглавлению.