Настройка VRRP-групп (Virtual Router Redundancy Protocol)
Введение
VRRP (Virtual Router Redundancy Protocol) — протокол, позволяющий объединить несколько физических маршрутизаторов (в нашем случае — агентов балансировки) в один виртуальный маршрутизатор с общим VIP-адресом. В любой момент времени активен только один агент (MASTER), который обрабатывает трафик, приходящий на VIP. Остальные агенты (BACKUP) находятся в режиме ожидания и берут на себя нагрузку только при отказе MASTER.
VRRP в системе «Балансировщик 5А» реализован через keepalived и является альтернативой BGP для обеспечения высокой доступности (HA) VIP-адресов. Выбор между VRRP и BGP зависит от топологии сети и требований к отказоустойчивости.
Когда выбирать VRRP, а когда BGP
| Критерий | VRRP | BGP |
|---|---|---|
| Сеть | Только в пределах одного L2-сегмента (одна подсеть, коммутаторы) | Работает через L3, подходит для геораспределённых кластеров |
| Облачные среды | Требует unicast-режима (multicast часто заблокирован) | Не требует multicast, работает через BGP-пиры |
| Failover | Быстрый (секунды, можно настроить < 1 сек с VRRPv3) | Зависит от таймеров BGP (обычно несколько секунд) |
| Активность нод | Active-Passive или Active-Active (через несколько групп) | Active-Active с балансировкой трафика |
| Сложность настройки | Низкая (конфигурация через UI) | Высокая (требует настройки BGP-соседей) |
Ограничения VRRP:
- Работает только в пределах одного L2-сегмента (нельзя разносить агенты в разные дата-центры).
- Не подходит для гео-распределённых кластеров.
- В облачных средах обычно требуется режим Unicast, так как multicast часто заблокирован.
- При использовании VRRPv2 возможны проблемы с аутентификацией в некоторых сетях.
Режимы работы VRRP
Active-Passive (одна VRRP-группа)
Одна группа VIP-адресов, один MASTER, остальные — BACKUP. Весь трафик идёт через MASTER, при его отказе один из BACKUP становится MASTER.
Active-Active (несколько VRRP-групп)
Создаётся несколько VRRP-групп с разными наборами VIP и разными приоритетами на агентах. Например:
- Группа 1: VIP
10.0.0.99— MASTER на агенте 1, BACKUP на агенте 2. - Группа 2: VIP
10.0.0.100— MASTER на агенте 2, BACKUP на агенте 1.
В нормальном режиме нагрузка распределяется между двумя агентами. При отказе одного агента все VIP переходят на оставшийся.
Unicast vs Multicast
| Режим | Описание | Когда использовать |
|---|---|---|
| Multicast (по умолчанию) | VRRP-пакеты отправляются на групповой адрес 224.0.0.18 (VRRPv2) или ff02::12 (VRRPv3). | В классических L2-сетях, где multicast разрешён и работает надёжно. |
| Unicast | Каждый агент явно указывает IP-адреса соседей, VRRP-пакеты идут только на них. | В облачных средах, где multicast заблокирован, или при использовании VRRP через VPN. |
В системе «Балансировщик 5А» режим обнаружения соседей выбирается при создании VRRP-группы.
VRRPv2 vs VRRPv3
| Характеристика | VRRPv2 | VRRPv3 |
|---|---|---|
| IPv6 | Нет | Да |
| Дробный advert_interval | Нет (только целые секунды) | Да (от 0.01 сек) |
| Минимальный интервал анонсов | 1 секунда | 0.01 секунды |
| Аутентификация | Поддерживается (текст, MD5) | Отсутствует |
| Протокол | IP proto 112 | IP proto 112 |
Для использования VRRPv3 с дробным интервалом анонсов и unicast-режимом требуется keepalived версии 2.2.0 или новее. Старые версии могут работать некорректно.
Установка keepalived (обязательное требование)
Перед настройкой VRRP необходимо установить keepalived на каждый агент балансировки. Эта процедура выполняется на этапе подготовки серверов (см. раздел Подготовка серверов).
Минимальная версия: keepalived ≥ 2.2
Проверка версии:
keepalived --version
# Ожидается: 2.2.x или новееУстановка (Ubuntu/Debian):
sudo apt update
sudo apt install -y keepalivedСервис keepalived не нужно запускать или включать в автозагрузку вручную. Его конфигурацией и жизненным циклом управляет агент системы «Балансировщик 5А».
Настройка VRRP-группы через UI
VRRP-группа создаётся в контексте кластера балансировки и связывается с существующими VIP-адресами (IP/VIP, созданными через раздел «Добавление IP/VIP»).
Создание группы
-
Перейдите в раздел управления кластером.
-
Откройте вкладку VRRP-группы.
-
Нажмите Создать группу.
-
Заполните параметры:
- Название — уникальное имя группы (обязательно).
- Тип — всегда
VRRP(в интерфейсе отображается как «VRPP»).
- Режим обнаружения соседей (выпадающий список:
Unicast,Multicast):Multicast— стандартный режим.Unicast— требуется указать список IP-адресов агентов-соседей.
- Автоанонс VIP (RHI) — если включено, то при доступности сервисов агент автоматически анонсирует VIP через BGP (при условии, что BGP уже настроен).
- Группы VIP — одна или несколько записей. Каждая запись содержит:
- VIP-адреса — один или несколько IP-адресов (например,
10.0.0.99/24,10.0.0.100/24). Можно добавлять новые VIP в группу и удалять их.
- Интервал анонсов (
advert_interval) — как часто MASTER отправляет VRRP-пакеты. Для VRRPv2 — целое число секунд, для VRRPv3 — дробное (например,0.5).
- Задержка восстановления (
recovery_delay) — время в секундах перед тем, как отказавший MASTER снова станет MASTER после восстановления (предотвращает «качание»).
- VIP-адреса — один или несколько IP-адресов (например,
- Порядок агентов — таблица приоритетов (drag-n-drop). Каждая строка содержит:
- Агент (имя узла балансировки)
- Состояние в группе (MASTER / BACKUP / ОШИБКА — отображается автоматически)
- Приоритет (от 1 до 255, чем выше, тем больше шансов стать MASTER). Для Active-Active создайте несколько групп с разным распределением приоритетов.
- Слайдер выключения — ввод агента в «Режим обслуживания» при отключении. В этом режиме preempt не срабатывает, VIP не перехватываются.
-
Нажмите Создать.
После создания группа появится в списке. Для привязки VIP к группе необходимо отредактировать соответствующую запись IP/VIP и выбрать созданную VRRP-группу.
Применение VRRP-группы к VIP
После создания группы необходимо связать её с VIP-адресами. Для каждого VIP (или подсети) в разделе «Добавление IP/VIP»:
- Выберите созданную VRRP-группу в поле «Отказоустойчивость».
- Укажите, должен ли агент автоматически анонсировать этот VIP через BGP (если включена опция RHI).
После сохранения конфигурации агенты перезагрузят keepalived и начнут работать по протоколу VRRP.
Маршрутизация и взаимодействие с BGP
VRRP сам по себе не анонсирует VIP во внешние сети. Для распространения маршрута до VIP за пределы L2-сегмента необходимо:
- Использовать BGP (настроенный в разделе «Добавление соседа»).
- Включить Автоанонс VIP (RHI) при создании VRRP-группы или в настройках IP/VIP.
При включённом RHI агент, являющийся MASTER для данной VRRP-группы, будет анонсировать VIP через BGP. При переключении MASTER новый активный агент возьмёт на себя анонс.
Мониторинг VRRP-статуса (API)
Для получения текущего состояния VRRP-групп в системе предусмотрен API-метод (только чтение). Он позволяет узнать, какой агент является MASTER для каждой группы, приоритеты, статус демона keepalived и возможные ошибки.
Запрос:
GET /api/v1/clusters/{clusterId}/services/{serviceId}/vrrp_statusОтвет содержит для каждой VRRP-группы:
vrid— Virtual Router IDvips— список VIP-адресов группыmaster_agent_uuid— UUID текущего MASTER (пусто, если MASTER отсутствует)agents— статусы агентов:daemon_status(running/stopped/unknown),status(MASTER/BACKUP/FAULT),priority,error(если есть),updated_at
Этот API удобно использовать для интеграции с системами мониторинга.
Ограничения и рекомендации
- Версия keepalived — строго не ниже 2.2.0. Более старые версии не поддерживают дробные интервалы, unicast и корректную работу
nopreempt. - Синхронизация времени — на всех агентах должна быть настроена NTP, иначе возможны ложные переключения.
- Не используйте VRRP для гео-распределения — протокол чувствителен к задержкам и работает только в одном широковещательном домене.
- В облачных средах всегда выбирайте Unicast и явно перечисляйте IP-адреса агентов.
- Для Active-Active создавайте несколько групп с пересекающимися наборами VIP. Каждая группа должна иметь свой
virtual_router_id(автоматически генерируется системой). - Мониторинг — состояние VRRP (кто MASTER) отображается в интерфейсе агентов (столбец «Состояние»). При возникновении ошибки (например, недоступен
keepalived) агент помечается как ОШИБКА.
Удаление VRRP-группы
- Убедитесь, что ни один VIP не использует эту группу.
- Перейдите в раздел VRRP-группы.
- Нажмите Удалить напротив нужной группы.
- Подтвердите удаление.
При удалении группы система удалит соответствующую секцию vrrp_instance из конфигурации keepalived на всех агентах.