The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Для nginx подготовлен балансировщик TCP-соединений

21.04.2015 12:31

Компания NGINX перенесла в кодовую базу свободного http-сервера nginx реализацию системы балансировки TCP-соединений, ранее поставляемой только в коммерческом продукте NGINX Plus. Новый балансировщик stream дополнил ранее доступные системы проксирования соединений с web- и почтовыми серверами.

Stream в nginx реализует похожие на HAproxy средства балансировки произвольных TCP-соединений, дающие возможность организовать проброс и распределение по нескольким узлам такого трафика, как обращения к СУБД, системам аутентификации, каталогам LDAP, RTMP-серверам, VoIP-системам или службам, применяющим SSL-шифрование. Предоставляется несколько методов балансировки: round-robin (круговой перебор, при котором соединения равномерно распределяются среди обработчиков), least-connections (соединение перенаправляется к серверу, у которого меньше активных соединений), least_time (перенаправление на сервер, демонстрирующий наиболее высокую отзывчивость) и hash (перенаправление на основе хэша от определённого пользователем параметра, например, IP). Для каждого сервера можно задавать максимальное число соединений и вес.

Кроме распределения нагрузки модуль stream также можно использовать для создания отказоусточивых конфигураций. Присутствуют средства обеспечения высокой доступности - nginx на лету оценивает статус сервера-обработчика и на какое-то время исключает его из работы в случае выявления проблем. Доступны как пассивные (оценка сбоев соединения), так и активные (периодическая отправка специальных проверочных запросов и оценка корректности ответов) механизмы проверки работы серверов. Для только что запущенных новых серверов предусмотрена возможность медленного старта, когда нагрузка наращивается постепенно, давая возможность прогреть кэш. Имеется возможность назначения запасных серверов, обращение к которым будут осуществляться только в случае проблем с основными серверами.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Выпуск HTTP/TCP балансировщика HAProxy 1.5
Лицензия: CC-BY
Тип: Программы
Ключевые слова: haproxy
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (63) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, mva (??), 12:52, 21/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Годнота
    // Осталось 1.7.13/1.8 дождаться :)
     
     
  • 2.33, shadow (??), 18:30, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    1.8 уже дождались http://mailman.nginx.org/pipermail/nginx-announce/2015/000156.html
     
  • 2.49, CSRedRat (ok), 08:05, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    В тот же день! https://www.opennet.ru/opennews/art.shtml?num=42082
     

  • 1.2, rachok (ok), 12:55, 21/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/

    Хорошая новость, нужно попробовать на тестовом кластере, а потом можна и в прод =)
     
     
  • 2.3, Andrey Mitrofanov (?), 13:14, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >на тестовом кластере, а потом можна и в прод =)

    Чем haproxy не устроил?

     
     
  • 3.4, Anonnn (?), 13:23, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Устроил. Но хочется коробочное решение из nginx.
     
     
  • 4.45, Аноним (-), 07:41, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > коробочное решение из nginx.

    Тогда купи слона^W nginx plus...

     
  • 3.57, rachok (ok), 13:25, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >>Чем haproxy не устроил?

    Он есть просто хочется уменьшить количество прослоек

     
     
  • 4.76, Аноним (-), 08:17, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем? unix way же!
     
     
  • 5.78, Andrey Mitrofanov (?), 10:50, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Зачем? unix way же!

    Администрировать клубок nginx 1.8+ _намного_ легче, чем два клубочка поменьше - haproxy + nginx 0.8.4. </Элементарно, Ватсон!>

     
     
  • 6.83, Аноним (-), 10:18, 24/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Администрировать клубок nginx 1.8+ _намного_ легче, чем два клубочка поменьше - haproxy
    > + nginx 0.8.4. </Элементарно, Ватсон!>

    Митрофанушка рассказывает нам почему один клубок системды скушает кучу клубочков поменьше типа инит скриптов в каждой дырке и прочая :)

     
     
  • 7.84, Andrey Mitrofanov (?), 10:45, 24/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> </Элементарно, Ватсон!>
    > Митрофанушка рассказывает нам почему один клубок системды скушает кучу клубочков поменьше типа инит скриптов в каждой дырке и прочая :)

    Обнови броузер, не модно это, тэг пропустил. Митрофанов [B]глумится[/B] над клубищами побольше и задравв-штаны-выбегабщими за ними и их разноцветными бусами. Над тобой тоже, вдруг ты не понял.

    Клубочки побольше все желающие могут наблюдать в соведних новостях: про броузеры и "движки", умирающие один за одним под собственным весом и не имеюшие никакой поддержки безопасности н ив одном уважающем себя дистрибутиве. Судьбы Мира, печалька...

     

  • 1.10, Crazy Alex (ok), 14:32, 21/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Я, конечно, от хайлоада последние пару лет далёк - но с каких пор этим стал заниматься веб-сервер?
     
     
  • 2.13, Аноним (-), 15:13, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > пор этим стал заниматься веб-сервер?

    Nginx всю жизнь был еще и реверс-прокси. В том числе и для почты, внезапно.

     
     
  • 3.30, Crazy Alex (ok), 17:11, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну так есть разница между проксёй и TCP-балансировщиком.
     
     
  • 4.32, csdoc (ok), 18:05, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Ну так есть разница между проксёй и TCP-балансировщиком.

    Nginx is an open source reverse proxy server for HTTP, HTTPS, SMTP, POP3, and IMAP
    protocols, as well as a load balancer, HTTP cache, and a web server (origin server).

    Теперь в список поддерживаемых добавится еще один протокол - TCP.

     
     
  • 5.38, Crazy Alex (ok), 20:59, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это, в общем-то, и из новости понятно. Непонятно на кой так чудить с TCP вместо DSR или хотя бы NAT-based решений. Ладно - HTTP - nginx его понимает и может много чего сделать. Но generic TCP?
     
     
  • 6.39, csdoc (ok), 21:35, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Непонятно на кой так чудить с TCP вместо DSR или хотя бы NAT-based решений.
    > Ладно - HTTP - nginx его понимает и может много чего сделать.
    > Но generic TCP?

    1) NAT-based решения не могут делать всего того, что умеет делать nginx:
    http://nginx.com/blog/nginx-plus-r6-released/#tcp-load-balancing

    2) Удобно использовать только nginx для всех задач,
    не добавляя при этом лишних сущностей в виде stunnel или haproxy.

     
     
  • 7.40, cmp (ok), 01:29, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > NAT-based решения не могут делать всего того, что умеет делать nginx

    Не уверен, что iptables слабее в части руления трафика.

    > Удобно использовать только nginx для всех задач

    Угу, только в комбайнах потом эпичные дыры находятся, даром чтоли openssl так резать активно начали.

    > Теперь в список поддерживаемых добавится еще один протокол - TCP.

    Еще один был бы ftp, а tcp это транспорт для всего перечисленного, то есть теперь обработка работает на другом уровне, и это рождает вполне закономерный вопрос - зачем http серверу функционал руления транспортным протоколом, таким макаром и до nginxOS можно дописаться.

    nginx хорош своей легковестностью, тяжелый и мутный апач уже существует, но не получится ли в итоге тяжелого и мутного nginx'a.

     
     
  • 8.41, csdoc (ok), 01:59, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А пойти по ссылке и почитать - лень или мешает незнание английского языка Готов... текст свёрнут, показать
     
     
  • 9.43, cmp (ok), 04:58, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Незачем, не собираюсь юзать, даже рассматривать теоритическую возможность такой ... текст свёрнут, показать
     
     
  • 10.44, csdoc (ok), 05:12, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    В таком случае, есть ли смысл давать разработчикам nginx ценные указания о том,... текст свёрнут, показать
     
     
  • 11.55, cmp (ok), 12:39, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да не было указаний, был намек на то, что нжинкс все меньше хттп сервер и все бо... текст свёрнут, показать
     
     
  • 12.61, csdoc (ok), 15:34, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Если что-то не понятно - есть документация http nginx org en docs HTTP серве... текст свёрнут, показать
     
     
  • 13.71, cmp (ok), 01:50, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Там и ru docs есть а fastcgi это что только не надо говорить, что прокся, есл... текст свёрнут, показать
     
     
  • 14.73, csdoc (ok), 02:24, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    В ru docs может быть устаревшая или не полная информация The ngx_http_fastcgi_... текст свёрнут, показать
     
     
  • 15.77, cmp (ok), 08:32, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я в курсе Если открыть любую википедию из числа дистрибутивных или почитать о... текст свёрнут, показать
     
     
  • 16.79, csdoc (ok), 21:45, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Nginx is an open source reverse proxy server for HTTP, HTTPS, SMTP, POP3, and IM... текст свёрнут, показать
     
     
  • 17.80, AlexAT (ok), 23:59, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Не знаю, кого у вас там выпилил nginx и где Разве что в мечтах http news n... текст свёрнут, показать
     
  • 17.81, cmp (ok), 05:38, 24/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    https ru wikipedia org wiki Nginx nginx англ engine x по-русски произносит... текст свёрнут, показать
     
     
  • 18.82, csdoc (ok), 10:02, 24/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Кому это надо Исповедующим unix-way Могу предложить только http button dekel... текст свёрнут, показать
     
     
  • 19.85, cmp (ok), 11:08, 25/04/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    У меня кожа не дымится когда не униксвей на серверах крутится, но это большой ми... текст свёрнут, показать
     
     
  • 20.87, csdoc (ok), 18:06, 25/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем GNU Hurd пилят до сих пор И какой-то особой простоты там не наблюдается,... текст свёрнут, показать
     
  • 10.51, AlexAT (ok), 08:53, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Неа, реальность сурова Для большинства применений nginx - это в первую очередь ... текст свёрнут, показать
     
     
  • 11.54, cmp (ok), 12:30, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Почему же только статики, отлично он работает с фастцги, и др, хотя их не провер... текст свёрнут, показать
     
     
  • 12.56, IvAnZ (?), 13:03, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    так он же reverse proxy и балансировщик для fastcgi fastcgi_pass localhost 900... текст свёрнут, показать
     
  • 12.59, Аноним (-), 13:34, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    По логике вещей, TCP-прокси делается из HTTP-прокси чуть ли не обрубанием HTTP ... текст свёрнут, показать
     
  • 12.64, AlexAT (ok), 19:40, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    А nginx- fcgi это суть та же прокся ... текст свёрнут, показать
     
     
  • 13.69, cmp (ok), 00:01, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Согласен, но тогда любой хттп-сервер прокся для того, что генерит контент Идея ... текст свёрнут, показать
     
     
  • 14.70, AlexAT (ok), 00:04, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    apache mod_php - тоже прокся apache mod_perl apache phusion passenger tomcat ... текст свёрнут, показать
     
     
  • 15.72, cmp (ok), 02:03, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Тормознутое извращение а чем пайп отличается от сокета файловый дескриптор и ... текст свёрнут, показать
     
  • 6.50, AlexAT (ok), 08:49, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    У NAT-based решений есть одна большая проблема: они также требуют возвращать весь трафик через конкретный балансировщик, а поскольку адрес источника трафика не подменяется - балансировщик в итоге может быть только один... Определенными костылями это, конечно, решается (либо MAC-based возврат, либо синхронные таблицы между балансировщиками), но усложнение всей системы при этом колоссальное, и того не стоит.
     
     
  • 7.60, Crazy Alex (ok), 14:56, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Не совсем понял проблему, но в любом случае - я не говорил, что NAT-based - это идеально. По уму - DSR в помощь. Но если уж хочется через себя поток тянуть - логично хотя бы вюзерспейс его вытаскивать по минимуму.
     
     
  • 8.65, AlexAT (ok), 19:43, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    DSR не всегда хорош Иногда на балансере удобно кое-какую статистику считать поп... текст свёрнут, показать
     
  • 4.46, Аноним (-), 07:42, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну так есть разница между проксёй и TCP-балансировщиком.

    А в чем такая уж принципиальная разница, по большому счету?

     
  • 2.24, жопка3 (?), 16:03, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В Nginx отличная низкоуровневая инфраструктура для эфективной работы с памятью, сетевыми соединениями, файлами, DNS и прочим. Поверх этой инфраструктуры строится отличный Web-сервер. Грех не использовать готовую инфраструктуру для чего-нибудь еще :)
     

  • 1.25, ihorman (?), 16:06, 21/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    этот функционал был ВСЕГДА доступен через модуль
    https://github.com/yaoweibin/nginx_tcp_proxy_module\
    не благодарите ...
     
     
  • 2.28, csdoc (ok), 16:32, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > этот функционал был ВСЕГДА доступен через модуль
    > https://github.com/yaoweibin/nginx_tcp_proxy_module\

    как правило у сторонних модулей гораздо хуже качество,
    чем у кода из состава nginx core от разработчиков nginx

     
     
  • 3.62, ihorman (?), 17:02, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Пользуемся этим модулем уже давно, он работает, нормально работает. Точно так же как и китайский модуль для sticky, работает, just works, что еще надо?
     
     
  • 4.63, csdoc (ok), 18:05, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Пользуемся этим модулем уже давно, он работает, нормально работает.
    > Точно так же как и китайский модуль для sticky, работает,
    > just works, что еще надо?

    Если все устраивает - пользуйтесь на здоровье, никто ж не против.
    Но в большинстве случаев сторонние модули к nginx кривые и глючные.
    Подробнее об этом: http://habrahabr.ru/post/195742/#comment_6797402

     
  • 2.29, Аноним (-), 17:09, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    заброщеный и год не троганый ? там правда исправляются ошибки ?
     
  • 2.42, geektime (?), 02:16, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Китайский модуль это как китайские айфоны.
     

  • 1.27, jOKer (ok), 16:22, 21/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Супер! Отличная новость. Обязательно опробую на продакшене!
     
  • 1.31, Аноним (-), 17:51, 21/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Начиная с какой версии это будет?
     
     
  • 2.35, csdoc (ok), 18:49, 21/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Начиная с какой версии это будет?

    http://trac.nginx.org/nginx/roadmap

    Балансировщих будет в 1.9.0 в ближайшее время.
    Но никто не мешает скачать исходники уже сейчас.

    http://mailman.nginx.org/pipermail/nginx-ru/2015-April/055785.html

     

  • 1.34, Аноним (-), 18:37, 21/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    хмм, ключевая фича tcp haproxy - splice, а тут его на первый взгляд -нет
     
  • 1.36, Ivan_83 (?), 19:50, 21/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Баналансить можно было и в PF и поди в иптаблес, вообще ядреная реализация.
     
     
  • 2.53, AlexAT (ok), 08:58, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Баналансить можно было и в PF и поди в иптаблес, вообще ядреная
    > реализация.

    А как насчёт двух и более балансеров с возможностью получить IP клиента для бэкэнда?

     
     
  • 3.67, Ivan_83 (?), 22:37, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    DST NAT решает проблему: на сервер от балансера придут пакеты с IP клиента.
     
     
  • 4.68, AlexAT (ok), 23:34, 22/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > DST NAT решает проблему: на сервер от балансера придут пакеты с IP
    > клиента.

    Угу. А назад как будем возвращать? Клиент-то назад ждёт IP балансера, а не сервера. Соответственно - коннтрекинг. А чтобы коннтрекинг работал - надо трафик вернуть в конкретный балансер. А IP балансера у сервера нетути, "пакет пришёл с IP клиента". В этом и проблема.

    Можно, конечно, извернуться, вешая на серверы IP per balancer, и делая, например, PBR по локальному IP в обратную сторону. Или по MAC балансера приписывать трек и возвращать через PBR по треку. Но всё это из разряда извращений.

     
     
  • 5.74, Ivan_83 (?), 03:29, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >> DST NAT решает проблему: на сервер от балансера придут пакеты с IP
    >> клиента.
    > Угу. А назад как будем возвращать? Клиент-то назад ждёт IP балансера, а
    > не сервера. Соответственно - коннтрекинг. А чтобы коннтрекинг работал - надо
    > трафик вернуть в конкретный балансер. А IP балансера у сервера нетути,
    > "пакет пришёл с IP клиента". В этом и проблема.

    Если балансер один то он может быть роутером по дефолту для серверов.
    Если балансеров много то можно через ARP анонсить мак балансера как носителя ip src клиента или пользоваться чем то вроде RIP.
    Идея с уникальным IP на сервере для каждого отдельного балансера пожалуй лучше, дополнительно придётся привязать отдельную таблицу маршрутизации к слушающим на разных адресах сокетам, вроде nginx такое умел (FIB).

     
     
  • 6.75, AlexAT (ok), 07:57, 23/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Если балансер один то он может быть роутером по дефолту для серверов.

    Выше уже писал. Случай не рассматривается - слишком плохой. Балансер превращается в SPOF.

    > Если балансеров много то можно через ARP анонсить мак балансера как носителя
    > ip src клиента

    Это, простите, как? Один и тот же IP может запросто входить через все балансеры, причём даже одновременно.

    > Идея с уникальным IP на сервере для каждого отдельного балансера пожалуй лучше,
    > дополнительно придётся привязать отдельную таблицу маршрутизации к слушающим на разных
    > адресах сокетам, вроде nginx такое умел (FIB).

    Угу. В линухах это делается легко и просто, и даже к сокетам ничего привязывать не надо (просто PBR по srcip). Но всё равно - из разряда извращений.

     

  • 1.37, AlexAT (ok), 19:58, 21/04/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Неплохая замена haproxy, кстати. С учётом send/expect - вообще шикарно.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру