Балансировка нагрузки 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 может быть немного излишним в любом случае.