Резервная доставка¶
Одна станция в мультикаст-группе — одна точка отказа: выключилась машина, лёг её сетевой интерфейс, завис процесс — и группа молчит, пока кто-нибудь не вмешается. Резервный пуш убирает эту точку без внешнего управления. Несколько станций принимают один и тот же сигнал и направляют его в одну и ту же группу. Вещает одна, остальные слушают группу и молчат. Затихла группа — одна из них начинает вещать сама.
Станции ничего друг другу не сообщают и друг о друге не знают. Каждая решает только по тому, что слышит в группе: поэтому схема работает между машинами, которые никак не связаны, — достаточно общей сети.
Включите резерв¶
На каждой станции — вкладка Исходящий поток, блок Пуши, пуш с протоколом 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.
- Никто не вещает, у всех Ждёт — в группе есть третий отправитель: другой пуш, другая машина. Его адрес станция пишет в свой лог при переходе в ожидание.
- Статус Ошибка у резервного пуша — станция не смогла вступить в группу на заданном интерфейсе; причина — в строке статистики.
Что дальше¶
- Доставка в сеть — адрес, порт, TTL и интерфейс пуша.
- Резервирование входов — когда отказывает не станция, а источник.
- Контроль доставки — счётчики и алерты.