Найти в Дзене

Keepalived для Postfix

Есть два сервера с операционной системой Ubuntu 20.04.4 LTS. Но обоих серверах развёрнут Postfix сервер. Почтовики работают только на отправку писем, на них всё уже настроено. Пришла задача объединить их в один отказоустойчивый кластер Master — Slave с плавающим виртуальным IP-адресом с помощью keepalived. Главная задача: принимать почту на один IP адрес и обеспечить резервирование postfix. keepalived — это open source программное обеспечение (написано на C), предназначенное для обеспечения функций высокой надежности (high availabilitty) и балансировки нагрузки (load-balancing) в кластерах Linux. За первую функцию отвечает реализация протокола VRRP, а вторая основывается на модуле ядра IPVS. VRRP (Virtual Router Redundancy Protocol) — сетевой протокол, предназначенный для увеличения доступности маршрутизаторов, выполняющих роль шлюза по умолчанию. Это достигается путём объединения группы маршрутизаторов в один виртуальный маршрутизатор и назначения им общего IP-адреса, который и будет
Оглавление

Есть два сервера с операционной системой Ubuntu 20.04.4 LTS. Но обоих серверах развёрнут Postfix сервер. Почтовики работают только на отправку писем, на них всё уже настроено. Пришла задача объединить их в один отказоустойчивый кластер Master — Slave с плавающим виртуальным IP-адресом с помощью keepalived. Главная задача: принимать почту на один IP адрес и обеспечить резервирование postfix.

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.35
  • На втором сервере настроен IP адрес: 10.12.49.36

Выделяем новый IP адрес, который будет использоваться в качестве виртуального: 10.12.49.37.

Настраиваем конфигурационный файл /etc/keepalived/keepalived.conf на первом сервере:

cd /etc/keepalived
vim keepalived.conf

Содержимое:

vrrp_script chk_service {
script "/opt/postfix.check.sh" interval 3 weight 100 user postfix
}

vrrp_instance VI_postfix {
interface ens160 state MASTER priority 100
virtual_router_id 173
advert_int 1
unicast_src_ip 10.12.49.35
unicast_peer { 10.12.49.36 }
virtual_ipaddress {
10.12.49.37 }
track_script {
chk_service
}
}

Настраиваем конфигурационный файл /etc/keepalived/keepalived.conf на втором сервере:

cd /etc/keepalived
vim keepalived.conf

Содержимое:

vrrp_script chk_service {
script "/opt/postfix.check.sh" interval 3 weight 100 user postfix
}

vrrp_instance VI_postfix {
interface ens160 state BACKUP priority 100
virtual_router_id 173
advert_int 1
unicast_src_ip 10.12.49.36
unicast_peer { 10.12.49.35 }
virtual_ipaddress {
10.12.49.37 }
track_script {
chk_service
}
}

Давайте посмотрим, что у нас тут есть.

  • vrrp_script — скрипт проверки сервиса, chk_service — имя функции
    script — скрипт может быть любым, он должен вернуть код ответа 0 если postfix работает нормально, или любой другой ответ если не работает
    interval — периодичность запуска скрипта проверки в секундах
    weight — значение, на которое будет уменьшен приоритет сервера, в случае перехода в состояние FAULT
    user — пользователь, под которым запускается скрипт, в данном случае postfix — пользователь postfix
  • vrrp_instance — экземпляр сервиса, назовём VI_postfix
    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/postfix.check.sh, он должен вернуть код ответа 0, если сервис MultiFactor Ldap Adapter работает нормально.

#!/bin/bash
systemctl is-active postfix > /dev/null 2>&1

Дадим права на него пользователю postfix:

chown postfix: /opt/postfix.check.sh
chmod 700 /opt/postfix.check.sh

Запуск кластера

На мастере:

systemctl enable keepalived
systemctl start keepalived
systemctl status keepalived
ip a
-2

Мы увидели второй виртуальный IP адрес 10.12.49.137.

На бэкапе:

systemctl enable keepalived
systemctl start keepalived
systemctl status keepalived
ip a
-3

Проверяем на бэкапе работу VRRP:

Ловим VRRP пакеты с помощью tcpdump

Для проверки keepalived остановим на мастере службу postfix.

systemctl stop postfix
-4

И виртуальный IP переехал на вторую ноду.

Ссылки

https://keepalived.org

Установка Postfix на Ubuntu 20.04 LTS в минимальной конфигурации

Источник:

Keepalived для Postfix | internet-lab.ru

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу. Пишите комментарии, задавайте вопросы, подписывайтесь.