Skip to content

Резервная доставка

Одна станция в мультикаст-группе — одна точка отказа: выключилась машина, лёг её сетевой интерфейс, завис процесс — и группа молчит, пока кто-нибудь не вмешается. Резервный пуш убирает эту точку без внешнего управления. Несколько станций принимают один и тот же сигнал и направляют его в одну и ту же группу. Вещает одна, остальные слушают группу и молчат. Затихла группа — одна из них начинает вещать сама.

Станции ничего друг другу не сообщают и друг о друге не знают. Каждая решает только по тому, что слышит в группе: поэтому схема работает между машинами, которые никак не связаны, — достаточно общей сети.

Включите резерв

На каждой станции — вкладка Исходящий поток, блок Пуши, пуш с протоколом MPEG-TS/UDP или MPEG-TS/RTP на адрес группы (как его завести — на странице Доставка в сеть).

Поле Что задаёт Умолчание
Резервный пуш пуш вещает в группу, только пока в ней нет другого отправителя выключен
Окно перехвата, мс сколько группа должна молчать, чтобы пуш начал вещать 1000

Два резервных пуша в одну группу: один вещает, второй ждёт

Переключатель Резервный пуш появляется, только когда в поле Хост записан адрес мультикаст-группы — IPv4 от 224.0.0.0 до 239.255.255.255 или IPv6, начинающийся с ff. У юникаст-адреса общей группы нет, слушать нечего, и резерв там невозможен. Имя хоста вместо адреса тоже не подходит: нужен сам адрес.

Во всём остальном это обычный пуш: те же TTL мультикаста, Исходящий интерфейс, выходные таблицы и строка статистики.

Как станция решает, вещать ли

Правило одно на всех:

  • в группе слышен другой отправитель — пуш молчит;
  • группа молчит дольше окна перехвата — пуш начинает вещать;
  • вещая, пуш услышал другого отправителя — пуш замолкает, и группа остаётся тому, кто слышен.

Свои пакеты станция от чужих отличает сама: пакет, вернувшийся к ней из группы, она не принимает за другого отправителя. Второй пуш той же станции в ту же группу — уже другой отправитель, как и соседняя машина.

После запуска — старта станции, правки пуша, включения — пуш сначала молчит одно окно: если рядом уже вещает другая станция, новая не вклинится в группу раньше, чем её услышит.

Молчащий пуш продолжает готовить поток, поэтому перехват не ждёт ключевого кадра и служебных таблиц: первые же пакеты после окна — полноценный поток.

Какое окно ставить

Окно — это и время реакции, и единственное, чем задаётся старшинство станций.

  • Фриз у зрителя при отказе примерно равен окну перехвата: столько группа молчит, прежде чем её подхватит резерв. Умолчание 1000 мс: живой поток — сотни пакетов в секунду, и секунда тишины — это отказ, а не джиттер сети. Окно короче 200–300 мс начнёт срабатывать на подвисаниях вещающей станции.
  • Короткое окно выигрывает. Если станции стартуют одновременно или обе замолчали, первой начнёт вещать та, у которой окно короче; остальные её услышат и останутся в резерве.
  • Разным станциям — разные окна. При одинаковых окнах станции, поднявшиеся одновременно, могут несколько раз перекинуть группу друг другу, прежде чем одна закрепится. Основной станции ставят окно короче, резервной — длиннее, например 500 и 2000 мс.

Две схемы

  • Резерв на всех станциях. Вернувшаяся после отказа станция слышит, что группа занята, и ждёт: группа не перекидывается обратно, лишнего фриза нет. Главной станция становится только тогда, когда вещающая откажет.
  • Основная без резерва, остальные с резервом. Основная станция вещает всегда. Пока она жива, резервные молчат; когда она возвращается после отказа, резервная слышит её и замолкает — группа возвращается к основной. Каждое возвращение — ещё одно переключение для зрителя.

Резерв на всех станциях — выбор по умолчанию: переключение бывает только при отказе.

Что нужно от сети

Станции должны слышать группу, в которую вещают.

  • Один сегмент или маршрут мультикаста. Каждая станция вступает в группу на том же интерфейсе, с которого шлёт; пакеты другой станции должны до неё доходить. Задайте у всех станций Исходящий интерфейс в медиасеть явно.
  • IGMP snooping. Станция подписывается на группу так же, как приёмник, и коммутатор с IGMP snooping доставит ей пакеты соседа. Без подписки — например, на порту, где мультикаст режется фильтром, — станция соседа не услышит.
  • TTL должен довести пакеты одной станции до другой, если между ними есть маршрутизаторы.
  • Один и тот же сигнал на входе. Резерв подменяет отправителя, а не содержимое: станции принимают одинаковый источник и отдают одинаковые выходные таблицы, иначе приёмник после переключения увидит другой поток.

Что проверять

У резервного пуша в строке живой статистики рядом с общим статусом стоит статус резерва:

  • Вещает — пуш сейчас шлёт в группу;
  • Ждёт — в группе слышен другой отправитель, пуш молчит.

Молчание в резерве — не ошибка: общий статус остаётся Отдаёт, реконнекты не растут. Скорость у ждущего пуша нулевая — пакеты, которые не ушли в сеть, не считаются отправленными; по скорости и счётчику байтов видно, какая станция вещала. Разбор счётчиков — на странице Контроль доставки.

Здоровая группа — ровно одна станция со статусом Вещает.

  • Вещают обе дольше окна — станции друг друга не слышат: проверьте Исходящий интерфейс, IGMP snooping и фильтры на портах, TTL.
  • Никто не вещает, у всех Ждёт — в группе есть третий отправитель: другой пуш, другая машина. Его адрес станция пишет в свой лог при переходе в ожидание.
  • Статус Ошибка у резервного пуша — станция не смогла вступить в группу на заданном интерфейсе; причина — в строке статистики.

Что дальше