После шестнадцати месяцев разработки увидел свет (http://marc.info/?l=haproxy&m=144476286029747) HTTP/TCP-балансировщик нагрузки HAProxy 1.6 (http://www.haproxy.com).
Ключевые особенности выпуска:
- Поддержка написания скриптов-расширений на языке Lua, которые выполняются в неблокирующем режиме и могут применяться для реализации дополнительных функций в элементах Service, Action, Sample-fetch и Converter. Загрузка скрипта осуществляется в файле конфигурации при помощи директивы "lua-load скрипт.lua";
- Возможность экранирования строк кавычками в файле конфигурации;
- Поддержка сохранения данных для использования на разных изолированных стадиях, что, например, позволяет получить доступ к заголовку запроса на стадии обработки ответа.- Возможность установки в логе меток для дальнейшей классификации по процессам, фронтэндам и бэкендам;
- Новые переменные форматирования лога, в том числе определяющие HTTP-метод (GET/POST), cтроку запроса (?bar=baz) и URI (/foo?bar=baz);
- Поддержка разрешения определённых в конфигурации имён серверов на лету в асинхронном режиме, что полезно при балансировки запросов к серверам с непостоянным IP, например, запускаемым при помощи Docker или Amazon Web Service;
- Возможность определения переменных в кофигурации;
- Поддержка отправки уведомлений по электронной почте в случае нештатных ситуаций, например, при изменении состояния сервера;
- Средства обработки тела HTTP-запроса (раньше можно было разбирать только заголовки). Например, после включения "option http-buffer-request" для блокирования конструкций SELECT в теле запроса можно использовать 'http-request deny if { req.body -m reg "SELECT \\\\*" }';
- Многочисленные улучшения поддержки TLS.URL: http://blog.haproxy.com/2015/10/14/whats-new-in-haproxy-1-6/
Новость: http://www.opennet.me/opennews/art.shtml?num=43142
Годнота, конечно, но для проксирования/балансировки HTTP nginx как-то лучше подходит.
Чем же?
HAproxy не умеет https, вроде бы это основной его недостаток.
https там с версии 1.5 полностью реализован
умеет же уже, причем похоже с 1.5 без stunnel
> Чем же?обычная версия haproxy по сравнению с обычным nginx более функциональней и богат возможностями:
- resolver
- sticky sessions
- удобный мониторинг(status)
- tcp-check
- external cheker
- ...кратко говоря, если рассматривать как балансировщик(так как nginx может выступать в роле веб сервера):
1- если нужна простая и обычная балансировка, нет денег = nginx бесплатный
2- если нужна более функциональней балансировка, нет денег = haproxy
3- если ты баран и постоянно твердишь что nginx лучший = nginx plus и живи со своим мнением
4- если ты баран и постоянно твердишь что haproxy лучший= HAProxy Enterprise Edition - HAPEE и живи со своим мнениемне вижу смысла мерить писульки у разных мальчиков :)
> sticky sessionshttp://nginx.org/en/docs/http/load_balancing.html#nginx_load...
>http://nginx.org/en/docs/http/load_balancing.html#nginx_load...Анонимы, которые никогда не пользователи nginx и им лишь бы ляпнуть. вы хоть сравнивали и пробовали в жизни использовать методы балансировки доступные в двух бесплатных продуктах?
ip_hash это самое простое и примитивное решение для реализации sticky sessions в бесплатном nginx. вы хоть по своей ссылки дальше читали расширенные функции но: Эта директива доступна как часть коммерческой подписки.
haproxy методы балансировки: http://cbonte.github.io/haproxy-dconv/configuration-1.6.html...
proxy protocol забыли
> proxy protocol забылидля остального я оставил ... :)
> обычная версия haproxy по сравнению с обычным nginx более функциональней и богат возможностями:в nginx ещё и кэш есть
нет, серьёзно, в 21 веке кому-то нужна http-балансировка без кэширования?
>в nginx ещё и кэш естьсогласен
Для балансировки как раз нет, а вот всё остальное да.
для проксирования/балансировки HTTP, TCP, UDP - HAProxy самый лучший.
а где же аргументированое обоснование? почемему?
Откройте для себя ipvs. По скорости с ним мало кто сравнится. Haproxy клевый когда нужно что то на базе L7 делать. В остальных случаях он ничем не интереснее ipvs.
ipvs есть для kernel 4.2.x ?
Он с 2004 года в ядре, и никто его оттуда не выкидывал.
А я использую и то и другое совместно.
haproxy отлично отстреливает упавшие ноды (асинхронно) + позволяет лимитировать подключения к каждому бекенду, чего в nginx есть только в платном.
Внезапно, в платном ентепрайзном haproxy тоже есть web ui
не в интерпрайс версии haproxy есть Web UI намного лучшее чем status в бесплатном nginx
да я тоже использую одновременно haproxy и nginx, которые выполняют свою работу как надо отвечая за свою часть работы
Класс: тыкаешь в ссылку почитать про опенсорс версию - попадаешь на вырвиглазную вики, а ля 90-е. Рядом тыкаешь на ынтерпрайз версию - попадаешь на стильный сайтик.
и это замечательно
Это ты список рассылки назвал вики девяностых?
> попадаешь на вырвиглазную викиА чего там вырвиглазного? Там всех "стилей" то:
body { font-family:Arial, Helvetica, sans-serif; font-size:1.00em; }
pre { font-family: "courier new", courier, monospace; font-size:12pt; font-weight:600; }
т.е. жутковатые (спасибо продавцам яблок и окошкопроизводителям за патентирование всего и вся в отрисовке шрифтов) яблочно-МСшные шрифты.
Т.е. – все равно нужно настроить или браузер или сразу шрифты. Иначе примерно треть веба будут "вырвиглазными".
http2?
> http2?насколько мне известно поддерживается частично SPDY/HTTP2 через NPN и ALPN. полной поддержки http/2 в 1.6 не будет. скорее всего в 1.7
От использования одни восторги если умеешь его готовить, а то что теперь в стабильной версии тело запроса умеет обрабатывать - главное улучшение ИМХО
Для мульти просецессинга nginx годней имхо. У haproxy в этом режиме context switching зашкаливает.
>Для мульти просецессинга nginx годней имхо. У haproxy в этом режиме context switching зашкаливает.?
?
Так еще через 10 лет haproxy наконец научиться перезагружать конфигурацию и обновлять бинарник без потери соединений, как nginx. Тогда можно будет попробовать.
>Так еще через 10 лет haproxy наконец научиться перезагружать конфигурацию и обновлять >бинарник без потери соединений, как nginx. Тогда можно будет попробовать.не использовать service haproxy reload и запустить новый бинарник:
#haproxy -f /etc/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
А затем убить первый вместе со всеми соединениями, которые он должен обслужить?
>А затем убить первый вместе со всеми соединениями, которые он должен обслужить?согласен, без потери не проканает, в haproxy архитектуры процессов как в nginx master и slave нет...