У меня есть один главный сервер приема и несколько граничных узлов, каждый из которых извлекает данные с сервера приема. Но теперь у меня есть 10000 камер, отправляющих потоки на главный сервер приема, я боюсь, что он не справится с этим. Поэтому я планирую добавить больше главного сервера приема (с LoadBalancer LVS, чтобы управлять тем, на какой главный сервер приема будут отправляться потоки с этих камер). Но с более чем одним главным сервером приема как граничные узлы вытягивают весь этот поток. Я также тестирую вариант вытягивания в граничном узле, как это
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. Любой совет ? Спасибо
Кстати, я думаю, мне не нужно больше главного сервера, просто увеличьте пропускную способность. Это правильно ? Спасибо
Вы можете разрешить DNS-запись для нескольких исходных серверов - вы можете не только использовать это для простой балансировки нагрузки с циклическим перебором DNS, но и таким образом вы получите nginx-rtmp из нескольких источников.
После определенного момента имеет смысл иметь более одного сервера приема. Помимо других практических соображений, это дает вам большую надежность. Имея всего один сервер, вы получаете единую точку отказа.
Источник: https://groups.google.com/forum/#!topic/nginx-rtmp/B2QqkwXxASk
ПРИМЕЧАНИЕ №1: NGINX кэширует разрешения DNS до перезапуска. Если вы ожидаете изменения IP-адресов (я использую AWS ELB, поэтому они сильно меняются), вам придется либо возиться с преобразователем DNS в NGINX, либо вместо этого использовать директиву exec_pull в сочетании с ffmpeg.
ПРИМЕЧАНИЕ №2: все извлекаемые узлы должны иметь одинаковые потоки. У него нет возможности узнать, существует ли определенный поток в источнике или нет. Он будет использовать первый доступный источник (с точки зрения подключения).
Если вы хотите иметь источники с отдельными наборами потоков (имеет смысл для масштабирования), вам придется управлять этим на своей стороне. Я решил эту проблему с помощью последовательного алгоритма хеширования для сопоставления потоков с различными видеокластерами, распределяя нагрузку вокруг. например: Потоки, опубликованные в источнике «1», могут воспроизводиться только на ребрах, вытянутых из источника «1». Реализация такой системы должна быть на уровне вашего приложения.