Nginx-rtmp-module Как краевые узлы вытягивают потоки из нескольких мастер-узлов

У меня есть один главный сервер загрузки и несколько пограничных узлов, каждый из которых извлекает данные с сервера загрузки. Но теперь у меня есть 10000 камер для потокового вещания на мастер-сервер Inge, боюсь, он не справится. Поэтому я планирую добавить еще один мастер-сервер (с помощью LoadBalancer LVS для обработки того, на какой мастер-сервер эти камеры будут передавать поток). Но с несколькими мастер-серверами, как краевые узлы вытягивают весь этот поток. Я также тестирую опцию pull в граничном узле, как это

application live {
   notify_method get;
   idle_streams off;
   pull rtmp://master_server_1/live live=1;
   pull rtmp://master_server_2/live live=1;
}

Но это только тянуть поток из master_server_1. Любой совет? Спасибо

Кстати, я думаю, что мне не нужно больше главного сервера, просто обновить пропускную способность. Это правильно? Спасибо

1 ответ

Решение

У вас может быть разрешение записи DNS для нескольких серверов происхождения - вы можете не только использовать это для простой балансировки нагрузки циклического перебора DNS, но и получить nginx-rtmp из нескольких источников.

После определенного момента имеет смысл иметь более одного сервера загрузки. Помимо других практических соображений, это дает вам больше надежности. Только с одним сервером у вас есть единственная точка отказа.

Источник: https://groups.google.com/forum/

ПРИМЕЧАНИЕ #1: NGINX кэширует разрешения DNS до тех пор, пока он не будет перезапущен. Если вы ожидаете, что IP-адреса изменятся (я использую AWS ELB, поэтому они сильно меняются), вам придется либо связываться с преобразователем DNS в NGINX, либо использовать вместо этого директиву exec_pull в сочетании с ffmpeg.

ПРИМЕЧАНИЕ № 2: Все извлекаемые узлы должны иметь одинаковые потоки. У него нет возможности узнать, существует ли определенный источник в источнике или нет. Он будет использовать первое доступное (с точки зрения подключения) происхождение.

Если вы хотите иметь источники с отдельными наборами потоков (имеет смысл для масштабирования), вам придется управлять этим со своей стороны. Я решил это с помощью согласованного алгоритма хеширования, чтобы отобразить потоки в различные видеоблоки, распределяя нагрузку вокруг. Например: потоки, опубликованные для источника "1", могут воспроизводиться только на ребрах, извлекаемых из источника "1". Реализация такой системы должна быть на вашем прикладном уровне.

Другие вопросы по тегам