Мне нужно решить небольшую проблему:
Мне нужно найти способ сбалансировать нагрузку с точки зрения пропускной способности входящих потоков 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 в любом случае может оказаться излишним.