У меня есть немного проблемы для решения:
Я должен найти способ загрузить баланс, мудрый пропускной способностью, поступление потоки RTMP на моих серверах.
У меня есть 2 сервера RTMP (nginx-rtmp), давайте назовем их S1 и S2.
Серверы RTMP слушают на порте 1936 года с HAProxy на той же машине как S1 к балансу загрузки потоки, и по состоянию на момент это работает хорошо, за исключением того, что это использует пропускную способность на ОБОИХ серверах.
С текущей конфигурацией клиент отправляет поток RTMP, HAProxy на S1 получает ее и выбирает S2 в качестве сервера получения и наконец перенаправляет поток к ней. Так, для потока на 1 Мбит/с S1 использует 1Mbbs для получения потока и 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, Передача любому из узлов, записи SRV DNS (которые являются большими, только если они использовались...), но это не кажется столь же эффективным как HAProxy (никакие веса, проверки состояния, макс. соединения...), как это очень близко к конечному результату, поскольку существует "только" проблема пропускной способности.
То, что вы ищете, называется 'Прямое возвращение сервера', или DSR для краткости.
Вы не можете делать DSR с помощью HAProxy, но LVS или другие балансировщики нагрузки уровня 4 могут делать это. Если вы просто делали 4 уровень, то HAPproxy все равно может быть немного перегружен
.