Keepalived
Keepalived - это программный комплекс обеспечивающий высокую доступность и балансировку нагрузки.
Тестовая конфигурация
Рассмотрим на примере почтового сервера dovecot.
- 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 { ! имя балансера lvs_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 сервера отличается только следующими параметрами:
lvs_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