Pull to refresh

Comments 25

Выглядит многообещающим! Всегда пользовался nginx для проксирования, сейчас вот задумался…
а напомните: он чем-то архитектурно внутри от nginx отличается?
Он делает активные проверки, которые в Nginx поддерживаются только в платной версии.
Можете, пожалуйста, привести пример платных проверок?
Почти все фичи ngx_http_upstream_module относятся к платной версии. Ещё в бесплатной версии нет L4 прокси.
Спасибо за информацию, а есть планы по его включению в основную сборку?
В отличие от haproxy, nginx имеет мастер-процесс и непривелигированные рабочие процессы, что позволяет ему перезагружать конфигурацию и обновляться на новую версию без потери соединений.
HAProxy тоже вполне себе перезагружается без потери соединений, просто несколько иначе:
1. Создаётся новый процесс и слушающий коннекты сокет переходит к нему
2. Новые соединения уходят в новый процесс
3. Старый процесс живёт до тех пор, пока все старые соединения не завершатся
UFO just landed and posted this here
Правильно, речь о том, что в haproxy отсутствует возможность перезагрузки без потери соединений.
У haproxy очень развесистая и настраеваемая архитектура в месте взаимодействия процессов системы между собой.
И с помощью правильно подобранных значений параметров: process, bind-process и nbproc ( www.haproxy.org/download/1.6/doc/management.txt, www.haproxy.org/download/1.6/doc/configuration.txt) можно добиться того же поведения, что используется в логике nginx.
Использование же параметра сокета SO_REUSEPORT, о которой говорится в статье от yelp, с одной стороны позволяет получить уменьшение лейтенси ответа и улучшения среднеквадратического отклонения, а с другой по понятным причинам создаёт почву для фейлов запросов. Около ~0.01% по данным haproxy:
Typically observed failure rates are around
1 failure during a reload operation every 10000 new connections per second,
which means that a heavily loaded site running at 30000 new connections per
second may see about 3 failed connection upon every reload.

В официальном блоге nginx про это тоже есть статья, описывающая полезность SO_REUSEPORT: www.nginx.com/blog/socket-sharding-nginx-release-1-9-1
Так подскажите, как настроить haproxy, чтобы он не потерял новые входящие соединения под высокой нагрузкой?

Ещё раз повторюсь, nginx не теряет входящие соединения, вне зависимости от того, включен был SO_REUSEPORT или выключен.
К слову, чтобы обновить nginx на новую версию его всё равно придётся перезапускать — мастер процесс то форкает детей из себя. И если его не перезапустить — версия будет старой.
В какой-то момент просто работает два мастера и два поколения рабочих процессов. После того, как вы убедились, что всё впорядке, вы можете плавно завершить старые рабочие процессы. Процедура подробно описана в документации, nginx при этом не потеряет ни одного соединения. В отличие от haproxy, он не использует SO_REUSEPORT для этой цели.
без потери входящих или без разрыва открытых?
Ни одного входящего соединения не будет потеряно. Открытые будут продолжать обслуживаться до тех пор, пока их нельзя будет безболезненно закрыть.
Уважаемые господа!!!
Полелитесь опытом, нужно настроить балансировку СП Tomcat, который работает по проприетарному протоколу поверх tcp.

http mode не подходит, с tcp mode работает, но Проблема в сохранении реального ip клиента, что очень важно. Как быть?
Спасибо, почитаю.

Все жду возможности использовать PROXY protocol для Tomcat, а не только Nginx
Очень и очень объемно! Спасибо.
По поводу lua прикольно. Nginx прикалывается по поводу JS, а haproxy внедряет lua.
Честно говоря js ближе.
Вопрос только как скажется на производительности добавление lua?
Sign up to leave a comment.

Articles