Назад | Перейти на главную страницу

Балансировка нагрузки 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

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

Я знаю, это называется HAПрокси но я надеялся, что это возможно, поэтому тем временем я также искал другие решения, такие как циклический перебор DNS, Anycast, записи DNS SRV (которые великолепны, только если они использовались ...), но это не похоже так же эффективен, как HAProxy (без весов, проверок работоспособности, максимального количества подключений ...), так как он очень близок к окончательному результату, поскольку есть «только» проблема с пропускной способностью.

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

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