gladilov.org.ru gladilov.org.ua

Настройка высокой доступности через 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/
Перейти к оглавлению.

Популярное
Наверх