通过 HAProxy 实现 RTMP 负载平衡

通过 HAProxy 实现 RTMP 负载平衡

我有一个小问题需要解决:

我需要找到一种方法来对我的服务器上传入的 RTMP 流进行带宽负载平衡。

我有 2 个 RTMP 服务器(nginx-rtmp),我们将它们称为 S1 和 S2。

RTMP 服务器正在监听1936港口,HAProxy在与 S1 相同的机器上对流进行负载平衡,目前它运行良好,只是它使用了两个都服务器。

使用当前配置,客户端发送 RTMP 流,S1 上的 HAProxy 接收该流并选择 S2 作为接收服务器,最后将流重定向到该服务器。因此,对于 1Mbps 流,S1 使用 1Mbbs 接收流,并使用 1Mbps 将其转发到第二台服务器,该服务器在 S2 上也使用 1Mbps。

以下是 HAProxy 的配置:

global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        #user haproxy
        #group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        contimeout 5000
        clitimeout 50000
        srvtimeout 50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

frontend ft_rtpm
 bind :1935
 mode tcp
 maxconn 400
 default_backend bk_rtmp

backend bk_rtmp
 mode tcp
 server media01 127.0.0.1:1936 check maxconn 200 weight 1
 server media02 ip.address.of.S2:1936 check maxconn 200 weight 1

我需要找到一种方法将请求直接传递到负载均衡器选择的服务器,而不使用负载均衡器的带宽。

我知道它叫 HA代理人但我希望这是可能的,所以与此同时我也搜索了其他解决方案,如DNS循环,Anycast,DNS的SRV记录(这些解决方案都很棒,但前提是它们被使用过...),但它似乎不如HAProxy那么有效(没有权重,健康检查,最大连接数...),因为它非常接近最终结果,因为“只有”带宽问题。

答案1

您正在寻找的是“直接服务器返回”,简称 DSR。

您无法使用 HAProxy 进行 DSR,但 LVS 或其他第 4 层负载均衡器可以做到。如果您只进行第 4 层,那么 HAPproxy 可能有点过头了。

相关内容