UDP-трафик с Iperf для haproxy

Я работаю над своим личным проектом по «оценке производительности» Haproxy с использованием Docker Container. Я программирую на Python и использую iperf для генерации трафика.

Я создал несколько контейнеров Docker в качестве клиентов и серверов. Клиенты должны отправлять udp-трафик на серверы через контейнер Haproxy, который действует как балансировщик нагрузки.

Проблема в том, что когда я пытаюсь отправить udp-трафик от клиентов к серверам, Haproxy отклоняет соединения. Я не нашел в официальной документации, как привязать или прослушать порт UDP.

Спасибо заранее за ваш ответ.

Вот копия моего haproxy.cfg.

global quiet nbproc 4 daemon listen tcp_haproxy 172.17.4.230:5001 balance roundrobin server server0 172.17.4.227:5001 server server1 172.17.4.228:5001 server server2 172.17.4.229:5001


person user2567806    schedule 06.07.2015    source источник


Ответы (2)


Насколько я читал, этот вопрос больше касается балансировки нагрузки UDP, чем Docker. Не стесняйтесь поправлять меня, если я неправильно понял вопрос.

Вам, вероятно, не понравится этот ответ, но начнем. HAProxy не поддерживает UDP. На официальной домашней странице HAProxy явно описывается как TCP и HTTP прокси (косвенно это означает "нет UDP"). Есть также этот вопрос о ServerFault по теме балансировки нагрузки UDP, который также обсуждает и быстро отклоняет HAProxy.

Поскольку мне самому не нравится «это невозможно, разберитесь с этим», давайте посмотрим на альтернативы.

  1. Некоторые ресурсы, которые спрашивают о балансировке нагрузки UDP, в конечном итоге рекомендуют IPVS в качестве балансировщика нагрузки. Это часть ядра Linux, что делает его плохим решением, если вы ищете что-то на основе Docker. Если это не является для вас препятствием, есть короткий пример на странице Википедии, который может адаптироваться к вашему сценарию с тремя серверами UDP:

    ipvsadm -A -u 172.17.4.230:5001 -s rr
    ipvsadm -a -u 172.17.4.230:5001 -r 172.17.4.227:5001 -m
    ipvsadm -a -u 172.17.4.230:5001 -r 172.17.4.228:5001 -m
    ipvsadm -a -u 172.17.4.230:5001 -r 172.17.4.229:5001 -m
    
  2. Быстрый поиск в Google позволяет найти альтернативные решения с открытым исходным кодом, такие как Pen. Может, тоже стоит взглянуть?

  3. Уверены, что вместо этого нельзя использовать TCP? ;)

person helmbert    schedule 06.07.2015
comment
Да, речь идет о балансировке нагрузки UDP, чем о Docker. Я использовал контейнер Docker как альтернативу виртуальным машинам ... Все в порядке. Я ценю твой ответ. 1) Это просто оценка производительности между балансом и haproxy. 2) спасибо за ссылку. 3) Мне нужно сравнить баланс и haproxy в режимах TCP и UDP, так как haproxy не поддерживает балансировку нагрузки udp, это нормально. Еще раз спасибо - person user2567806; 07.07.2015
comment
@ user2567806, рад помочь. Если это ответило на ваш вопрос, не забудьте принять ответ. ;) - person helmbert; 07.07.2015

По состоянию на март 2016 года лучшим решением этой проблемы является Nginx> = 1.9.13:

https://www.nginx.com/blog/announcing-udp-load-balancing/

Вы можете настроить HA и проверки работоспособности для восходящих потоков UDP так же, как и для обратного TCP-прокси серверной части. Для моего проекта мы реализовали решение, используя настраиваемый контейнер из базового контейнера Nginx (который может иметь отношение к варианту использования докеров OP), который можно найти здесь:

https://hub.docker.com/_/nginx/

person MrPaws    schedule 29.04.2016