Keepalived
Keepalived - это программный комплекс обеспечивающий высокую доступность и балансировку нагрузки.
Тестовая конфигурация
Рассмотрим на примере почтовых серверов dovecot с настроенной репликацией Dovecot\Replication
- balance01 - сервер балансировки №1 IP 192.168.135.235
- balance02 - сервер балансировки №2 IP 192.168.135.236
- dovecot01 - back-end сервер №1 IP 192.168.135.238
- dovecot02 - back-end сервер №2 IP 192.168.135.239
- 192.168.135.237 - виртуальный адрес по которому будут доступны back-end серверы
Предварительная настройка балансировочных серверов
Установим нужный пакет на обоих серверах балансировки:
# apt-get install keepalived
Изменим параметр ядра net.ipv4.ip_forward для этого в файле /etc/net/sysctl.conf добавим:
net.ipv4.ip_forward = 1
Для немедленного применения настроек выполним:
# sysctl -p
Настройка MASTER сервера
Создадим файл настройки:
# touch /etc/keepalived/keepalived.conf
Комментарии в файле настройки выделяются знаком "!"
Добавим блок global_defs:
global_defs {
! имя балансера
router_id LVS_1
}
Добавим блок vrrp_instance отвечающий за настройку виртуального роутера, для каждого сетевого интерфейса необходимо настроить, по крайне мере один блок vrrp_instance. Вы можете добавить необходимое количество блоков для каждой группы виртуальных IP:
vrrp_instance DOVECOT {
!Указывает на то что в каком состоянии стартует нода
state MASTER
!Интерфейс для виртуальных IP
interface ens18
!Интерфейс для обмена служебными пакетами между нодами
lvs_sync_daemon_inteface ens18
!Уникальное имя виртуального роутера
virtual_router_id 102
!Приоритет данной ноды относительно других, нода с наибольшим приоритетом переходит в состояние MASTER
priority 150
!Как часто происходит обновление состояния кластера
advert_int 1
!Аутентификация используется для синхронизации между нодами
authentication {
auth_type PASS
auth_pass 12345678
}
!Виртуальные адреса, которые настроит keealived
virtual_ipaddress {
192.168.135.237/24
}
}
Далее следует блок настройки виртуального сервера:
virtual_server 192.168.135.237 22 {
!Частота проверок
delay_loop 6
!Выбираем режим балансировки, для dovecot лучше выбрать Locality-Based Least-Connection
lb_algo lblc
!Выбираем метод перенаправления, в нашем случае Direct Routing
lb_kind DR
protocol TCP
!Описываем back-end серверы
real_server 192.168.135.238 143 {
!Задаем вес сервера
weight 1
!Настраиваем проверку на доступность
TCP_CHECK {
connect_timeout 3
connect_port 143
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.135.239 143 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 143
nb_get_retry 3
delay_before_retry 3
}
}
}
Запустим и добавим сервис keepalived в автозагрузку:
# systemctl enable keepalived # systemctl start keepalived
На MASTER ноде должен добавится виртуальный IP:
# ip a | grep ens18
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.135.235/24 brd 192.168.135.255 scope global ens18
inet 192.168.135.237/24 scope global secondary ens18
Настройка BACKUP сервера
Файл настройки BACKUP сервера отличается только следующими параметрами:
router_id LVS_2 state BACKUP priority 100
Настройка back-end серверов
Необходимо настроить виртуальный IP на обоих back-end серверах. Для этого в файл /etc/net/ifaces/ens18/ipv4address добавим наш виртуальный IP:
192.168.135.237/24
Только MASTER сервер балансировки должен отвечать ARP запросы виртуального IP адреса. Необходимо установить параметры ядра arp_ignore и arp_announce для сетевого интерфейса с виртуальным IP, для того чтобы они не реагировали на ARP запросы для виртуального IP адреса. Для этого для этого в файле /etc/net/sysctl.conf добавим:
net.ipv4.conf.ens18.arp_ignore = 1 net.ipv4.conf.ens18.arp_announce = 2
Для немедленного применения выполним:
# sysctl -p
На обоих back-end серверах должен появится виртуальный IP адрес:
# ip a |grep ens18
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.135.238/24 brd 192.168.135.255 scope global ens18
inet 192.168.135.237/24 scope global secondary ens18