Keepalived

Материал из ALT Linux Wiki
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

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