我有一个主摄取服务器和多个边缘节点,每个节点都从摄取服务器拉取数据。但现在我有 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 拉取流。有什么建议吗?谢谢
顺便说一句,我认为我不需要更多主服务器,只需升级带宽。对吗?谢谢
答案1
您可以将 DNS 记录解析为多个原始服务器 - 您不仅可以将其用于简单的 DNS 循环负载平衡,而且这也可以成为您从多个来源提取 nginx-rtmp 的方式。
在某个时间点之后,拥有多个采集服务器是有意义的。除了其他实际考虑之外,它还能提高可靠性。如果只有一台服务器,则会出现单点故障。
来源:https://groups.google.com/forum/#!topic/nginx-rtmp/B2QqkwXxASk
注意 1:NGINX 会缓存 DNS 解析,直到重新启动。如果您预计 IP 会发生变化(我使用的是 AWS ELB,因此 IP 变化很大),则需要调整 NGINX 中的 DNS 解析器,或者结合使用 exec_pull 指令和 ffmpeg。
注释 #2:所有被拉取的节点必须具有相同的流。它无法知道某个流是否存在于原点。它将使用第一个可用(连接方面)的原点。
如果您希望源站具有单独的流集(这对于扩展很有意义),则必须在您的终端进行管理。我已经解决了这个问题,使用一致性哈希算法将流映射到不同的视频群集,从而分散负载。例如:发布到源站“1”的流只能在从源站“1”拉动的边缘上播放。这种系统的实现应该在您的应用程序层中。