Балансировка нагрузки RTMP через HAProxy

У меня есть небольшая проблема, чтобы решить:

Мне нужно найти способ сбалансировать нагрузку по полосе пропускания входящих RTMP-потоков на моих серверах.

У меня есть 2 RTMP-сервера (nginx-rtmp), назовем их S1 и S2.

RTMP-серверы прослушивают порт 1936 с HAProxy на том же компьютере, что и S1, для балансировки нагрузки потоков, и на данный момент он работает хорошо, за исключением того, что он использует пропускную способность на ОБАХ серверах.

При текущей конфигурации клиент отправляет поток RTMP, HAProxy на S1 принимает его и выбирает S2 в качестве принимающего сервера, и, наконец, перенаправляет поток на него. Таким образом, для потока 1 Мбит / с S1 использует 1 Мбит / с для получения потока и 1 Мбит / с для пересылки его на второй сервер, который также использует 1 Мбит / с на S2.

Вот конфигурация 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

Мне нужно найти способ передавать запросы непосредственно на сервер, выбранный балансировщиком нагрузки, без использования пропускной способности балансировщика нагрузки.

Я знаю, что он называется HAProxy, но я надеялся, что это будет возможно, поэтому я также искал другие решения, такие как DNS round-robin, Anycast, записи SRV DNS (которые хороши, только если они использовались...), но он не так эффективен, как HAProxy (без весов, проверок работоспособности, макс. подключений...), так как он очень близок к конечному результату, поскольку существует "только" проблема пропускной способности.

1 ответ

Решение

То, что вы ищете, называется "Direct Server Return", или, для краткости, DSR.

Вы не можете сделать DSR с HAProxy, но LVS или другие балансировщики нагрузки уровня 4 могут сделать это. Если вы только делаете слой 4, то HAPproxy может быть немного излишним в любом случае.

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