Настройка 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

КритерийVRRPBGP
СетьТолько в пределах одного 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

ХарактеристикаVRRPv2VRRPv3
IPv6НетДа
Дробный advert_intervalНет (только целые секунды)Да (от 0.01 сек)
Минимальный интервал анонсов1 секунда0.01 секунды
АутентификацияПоддерживается (текст, MD5)Отсутствует
ПротоколIP proto 112IP 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»).

Создание группы

  1. Перейдите в раздел управления кластером.

  2. Откройте вкладку VRRP-группы.

  3. Нажмите Создать группу.

  4. Заполните параметры:

    • Название — уникальное имя группы (обязательно).
    • Тип — всегда 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 после восстановления (предотвращает «качание»).
    • Порядок агентов — таблица приоритетов (drag-n-drop). Каждая строка содержит:
      • Агент (имя узла балансировки)
      • Состояние в группе (MASTER / BACKUP / ОШИБКА — отображается автоматически)
      • Приоритет (от 1 до 255, чем выше, тем больше шансов стать MASTER). Для Active-Active создайте несколько групп с разным распределением приоритетов.
    • Слайдер выключения — ввод агента в «Режим обслуживания» при отключении. В этом режиме preempt не срабатывает, VIP не перехватываются.
  5. Нажмите Создать.

После создания группа появится в списке. Для привязки 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 ID
  • vips — список 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-группы

  1. Убедитесь, что ни один VIP не использует эту группу.
  2. Перейдите в раздел VRRP-группы.
  3. Нажмите Удалить напротив нужной группы.
  4. Подтвердите удаление.

При удалении группы система удалит соответствующую секцию vrrp_instance из конфигурации keepalived на всех агентах.