Есть два сервера с операционной системой Ubuntu 20.04.4 LTS. Но обоих серверах развёрнут LDAP proxy сервер на базе Multifactor. По сути это обычные LDAPS сервера, которые неплохо было бы объединить в один отказоустойчивый кластер Master— Slave с плавающим виртуальным IP-адресом. Сделаем это с помощью keepalived.
keepalived — это open source программное обеспечение (написано на C), предназначенное для обеспечения функций высокой надежности (high availabilitty) и балансировки нагрузки (load-balancing) в кластерах Linux. За первую функцию отвечает реализация протокола VRRP, а вторая основывается на модуле ядра IPVS.
VRRP (Virtual Router Redundancy Protocol) — сетевой протокол, предназначенный для увеличения доступности маршрутизаторов, выполняющих роль шлюза по умолчанию. Это достигается путём объединения группы маршрутизаторов в один виртуальный маршрутизатор и назначения им общего IP-адреса, который и будет использоваться как шлюз по умолчанию для компьютеров в сети.
IPVS (IP Virtual Server) — модуль ядра Linux, реализующий балансировку нагрузки транспортного уровня, обычно называемую коммутацией уровня 4. L4-маршрутизатор.
Установка keepalived
В популярных ОС keepalived имеется в официальных репозиториях. Deb:
apt update
apt install keepalived
Rpm:
yum install keepalived
Настройка кластера
- На первом сервере настроен IP адрес: 10.12.49.150
- На первом сервере настроен IP адрес: 10.12.49.151
Выделяем новый IP адрес, который будет использоваться в качестве виртуального: 10.12.49.155.
Настраиваем конфигурационный файл /etc/keepalived/keepalived.conf на первом сервере:
cd /etc/keepalived
vim keepalived.conf
Содержимое:
vrrp_script chk_service {
script "/opt/multifactor-ldap.check.sh"
interval 3
weight 100
user mfa
}
vrrp_instance VI_mf_ldap {
interface ens160
state MASTER
priority 100
virtual_router_id 172
advert_int 1
unicast_src_ip 10.12.49.150
unicast_peer {
10.12.49.151
}
virtual_ipaddress {
10.12.49.155
}
track_script {
chk_service
}
}
Настраиваем конфигурационный файл /etc/keepalived/keepalived.conf на втором сервере:
cd /etc/keepalived
vim keepalived.conf
Содержимое:
vrrp_script chk_service {
script "/opt/multifactor-ldap.check.sh"
interval 3
weight 100
user mfa
}
vrrp_instance VI_mf_ldap {
interface ens160
state BACKUP
priority 50
virtual_router_id 172
advert_int 1
unicast_src_ip 10.12.49.151
unicast_peer {
10.12.49.152
}
virtual_ipaddress {
10.12.49.155
}
track_script {
chk_service
}
}
Давайте посмотрим, что у нас тут есть.
- vrrp_script — скрипт проверки сервиса,
chk_service — имя функции
script — скрипт может быть любым, он должен вернуть код ответа 0 если MultiFactor Ldap Adapter работает нормально, или любой другой ответ если не работает
interval — периодичность запуска скрипта проверки в секундах
weight — значение, на которое будет уменьшен приоритет сервера, в случае перехода в состояние FAULT
user — пользователь, под которым запускается скрипт, в данном случае mfa — пользователь MultiFactor Ldap Adapter - vrrp_instance — экземпляр сервиса, назовём VI_mf_ldap
interface — имя сетевого интерфейса
state — начальное состояние при запуске. На главном MASTER, на втором BACKUP
priority — приоритет выбора главного сервера
virtual_router_id — уникальный идентификатор VRRP экземпляра, должен быть одинаковым на всех серверах экземпляра VRRP
advert_int — периодичность оповещения мастером других нод время в секундах, если за данное время мастер не успеет отправить широковещательный сигнал, начнутся выборы другого мастера на основе priority
unicast_src_ip — адрес источник VRRP пакетов
unicast_peer — адреса получатели VRRP пакетов
virtual_ipaddress — блок виртуальных IP адресов, которые будут активны на мастере, должны совпадать на всех серверах экземпляра VRRP
track_script — мониторинг с использованием скрипта, который должен возвращать 0 если проверка завершилась успешно
Есть примеры с использованием опции authentication. Она устарела и была удалена из VRRPv2 в спецификации RFC3768 в 2004 году. Рекомендуется избегать использования этой опции.
Создадим скрипт /opt/multifactor-ldap.check.sh, он должен вернуть код ответа 0, если сервис MultiFactor Ldap Adapter работает нормально.
#!/bin/bash
systemctl is-active multifactor-ldap > /dev/null 2>&1
Дадим права на него пользователю mfa:
chown mfa: /opt/multifactor-ldap.check.sh
chmod 700 /opt/multifactor-ldap.check.sh
Запуск кластера
На мастере:
systemctl enable keepalived
systemctl start keepalived
systemctl status keepalived
ip a
Мы увидели второй виртуальный IP адрес 10.12.49.155.
На бэкапе:
systemctl enable keepalived
systemctl start keepalived
systemctl status keepalived
ip a
Проверяем на бэкапе работу VRRP:
Ловим VRRP пакеты с помощью tcpdump
tcpdump -i ens160 vrrp
Для проверки остановим на мастере службу multifactor-ldap.
systemctl stop multifactor-ldap
И виртуальный IP переехал на вторую ноду.
Источник:
Если вам понравилась статья, то ставьте 👍🏻 каналу. Пишите комментарии, задавайте вопросы, подписывайтесь.