URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 86140
[ Назад ]

Исходное сообщение
"Балансировка TCP-соединений во FreeBSD"

Отправлено Luxor , 30-Июл-09 18:57 
Здравствуйте!
Подскажите программку для балансировки TCP-сессий между двумя серверами. Акцентирую внимание что мне надо чтобы не пакеты раскидывались, а именно TCP-сессии, т.е. первый пользователь подключаясь по ip=10.0.0.1 попадает на один сервер (и в дальнейшем работает с ним) второй пользователь подключаясь по ip=10.0.0.1 попадает на второй сервер.

Содержание

Сообщения в этом обсуждении
"Балансировка TCP-соединений во FreeBSD"
Отправлено BlackHawk , 30-Июл-09 19:55 
>Здравствуйте!
>Подскажите программку для балансировки TCP-сессий между двумя серверами. Акцентирую внимание что мне
>надо чтобы не пакеты раскидывались, а именно TCP-сессии, т.е. первый пользователь
>подключаясь по ip=10.0.0.1 попадает на один сервер (и в дальнейшем работает
>с ним) второй пользователь подключаясь по ip=10.0.0.1 попадает на второй сервер.
>

squid/nginx/apache на выбор


"Балансировка TCP-соединений во FreeBSD"
Отправлено Luxor , 30-Июл-09 23:49 
>>Здравствуйте!
>>Подскажите программку для балансировки TCP-сессий между двумя серверами. Акцентирую внимание что мне
>>надо чтобы не пакеты раскидывались, а именно TCP-сессии, т.е. первый пользователь
>>подключаясь по ip=10.0.0.1 попадает на один сервер (и в дальнейшем работает
>>с ним) второй пользователь подключаясь по ip=10.0.0.1 попадает на второй сервер.
>>
>
>squid/nginx/apache на выбор

не подходит, весь трафик пойдет через один сервер который будет "узким горлышком" данного решения, хотелось бы чтобы группа серверов сама "делила" между собой пользователей. С помощью протокола CARP такое можно, во FreeBSD поддержка на уровне ядра, но балансировка по source IP есть только в свежих версиях которые с OpenBSD еще не портированы на фряху... OpenBSD ставить не хочется потому что есть серьезные опасения что она плохо работает с многопроцессорными системами... т.е. поддержка SDM "кое-какая" там есть но весь потенциал от многопроцессорных систем она не выжимает (что в приниципе не странно ввиду того что разработчики позиционируют ее ОС с уклоном на безопасность). Развейте мои сомнения насчет OpenBSD если я не прав :)
для FreeBSD есть программулина реализующая протокол VRRP (аналог CARP), может он сможет ?


"Балансировка TCP-соединений во FreeBSD"
Отправлено angra , 31-Июл-09 00:35 
Зачем задавать вопрос про tcp и сессии, а затем бравировать знанием умных слов, относящихся к голому IP уровню? Создается впечатление что топик создан, чтобы потроллить и/или козырнуть своими знаниями. Найди другой способ самовыражения, а на вопрос тебе уже ответили.

"Балансировка TCP-соединений во FreeBSD"
Отправлено Luxor , 31-Июл-09 08:54 
>Зачем задавать вопрос про tcp и сессии, а затем бравировать знанием умных
>слов, относящихся к голому IP уровню? Создается впечатление что топик создан,
>чтобы потроллить и/или козырнуть своими знаниями. Найди другой способ самовыражения, а
>на вопрос тебе уже ответили.

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


"Балансировка TCP-соединений во FreeBSD"
Отправлено BlackHawk , 31-Июл-09 04:11 
>[оверквотинг удален]
>версиях которые с OpenBSD еще не портированы на фряху... OpenBSD ставить
>не хочется потому что есть серьезные опасения что она плохо работает
>с многопроцессорными системами... т.е. поддержка SDM "кое-какая" там есть но весь
>потенциал от многопроцессорных систем она не выжимает (что в приниципе не
>странно ввиду того что разработчики позиционируют ее ОС с уклоном на
>безопасность). Развейте мои сомнения насчет OpenBSD если я не прав :)
>
>для FreeBSD есть программулина реализующая протокол VRRP (аналог CARP), может он сможет
>?
>

а что мешает к тому, что я предложил добавить CARP?


"Балансировка TCP-соединений во FreeBSD"
Отправлено Luxor , 31-Июл-09 08:58 
>[оверквотинг удален]
>>с многопроцессорными системами... т.е. поддержка SDM "кое-какая" там есть но весь
>>потенциал от многопроцессорных систем она не выжимает (что в приниципе не
>>странно ввиду того что разработчики позиционируют ее ОС с уклоном на
>>безопасность). Развейте мои сомнения насчет OpenBSD если я не прав :)
>>
>>для FreeBSD есть программулина реализующая протокол VRRP (аналог CARP), может он сможет
>>?
>>
>
>а что мешает к тому, что я предложил добавить CARP?

я же выше описал причину почему CARP не могу использовать, если кратко - на FreeBSD на данный момент не портирована последняя версия CARP из OpenBSD с поддержкой балансировки трафика по IP, а OpenBSD ставить побаиваюсь потому что слабо реализованна поддержка многопроцессорных систем. Может быть на FreeBSD есть аналог CARP который бы помог мне решить мою задачу ?


"Балансировка TCP-соединений во FreeBSD"
Отправлено BlackHawk , 31-Июл-09 11:00 
>[оверквотинг удален]
>>>
>>
>>а что мешает к тому, что я предложил добавить CARP?
>
>я же выше описал причину почему CARP не могу использовать, если кратко
>- на FreeBSD на данный момент не портирована последняя версия CARP
>из OpenBSD с поддержкой балансировки трафика по IP, а OpenBSD ставить
>побаиваюсь потому что слабо реализованна поддержка многопроцессорных систем. Может быть на
>FreeBSD есть аналог CARP который бы помог мне решить мою задачу
>?

а причем тут балансировка с помощью CARP? я имел ввиду использование CARP для устранения "бутылочного горлышка" - не более. балансировкой предлагал заниматься squid/nginx/apache
тем более вы спрашивали про уровень TCP сессий...



"Балансировка TCP-соединений во FreeBSD"
Отправлено Smile , 31-Июл-09 11:17 
на используемом ДНС завести 2 ип на одно имя, открывать соединение по имени.

"Балансировка TCP-соединений во FreeBSD"
Отправлено BlackHawk , 31-Июл-09 11:34 
>на используемом ДНС завести 2 ип на одно имя, открывать соединение по
>имени.

при падении одной из машин будет 50% потерь соединений... не канает такой вариант в большинстве случаев :)


"Балансировка TCP-соединений во FreeBSD"
Отправлено Денис Юсупов , 10-Сен-09 17:39 
>при падении одной из машин будет 50% потерь соединений... не канает такой
>вариант в большинстве случаев :)

Если выставить TTL 0, то не будет, только небольшое замедление работы почуствуется при открытии новых сессий.


"Балансировка TCP-соединений во FreeBSD"
Отправлено Alexey Bobok , 24-Окт-09 22:24 
>>на используемом ДНС завести 2 ип на одно имя, открывать соединение по
>>имени.
>
>при падении одной из машин будет 50% потерь соединений... не канает такой
>вариант в большинстве случаев :)

Ну если включить фантазию и сделать следующее:
1) в ДНС 2 адреса (на самом деле их может быть больше)
2) оба адреса повешены на каждом сервере:
serv1: ip1@carp0 (master); ip2@carp1 (slave)
serv2: ip1@carp0 (slave); ip2@carp1 (master)
в таком варианте какой из серверов бы не упал, IP будет отвечать на втором сервере.
Ето работает на 2 серверах по ~800 одновременных подключений.
а дальше nginx, в котором прописан балансер с обоих виртуальных адресов на опять таки оба виртуальных. система полностью живуча.
порблема была только когда поломалось железо, но система кое как работала, carp отвечал и в итоге половина запросов таки не работала. но ето уже другая тема для разговора.



"Балансировка TCP-соединений во FreeBSD"
Отправлено Luxor , 31-Июл-09 11:36 
>[оверквотинг удален]
>>- на FreeBSD на данный момент не портирована последняя версия CARP
>>из OpenBSD с поддержкой балансировки трафика по IP, а OpenBSD ставить
>>побаиваюсь потому что слабо реализованна поддержка многопроцессорных систем. Может быть на
>>FreeBSD есть аналог CARP который бы помог мне решить мою задачу
>>?
>
>а причем тут балансировка с помощью CARP? я имел ввиду использование CARP
>для устранения "бутылочного горлышка" - не более. балансировкой предлагал заниматься squid/nginx/apache
>
>тем более вы спрашивали про уровень TCP сессий...

в том то и дело что CARP-ом не устранить это узкое место! на данный момент во FreeBSD портирована версия CARP 2006 года, эта версия раскидывает трафик с помощью протокола arp (разных хостам отдает разные MAC-адреса одного IP) соответсвенно работать такая схема будет в одном коммутируемом пространстве, если запросы клиентов пойдут через маршрутизатор то весь трафик пойдет на одни сервер (маршрутизатор раз прорезолвит IP и всё, ВЕСЬ трафик будет коммутироваться на этот MAC-адрес).


"Балансировка TCP-соединений во FreeBSD"
Отправлено BlackHawk , 31-Июл-09 11:47 
>[оверквотинг удален]
>>
>>тем более вы спрашивали про уровень TCP сессий...
>
>в том то и дело что CARP-ом не устранить это узкое место!
>на данный момент во FreeBSD портирована версия CARP 2006 года, эта
>версия раскидывает трафик с помощью протокола arp (разных хостам отдает разные
>MAC-адреса одного IP) соответсвенно работать такая схема будет в одном коммутируемом
>пространстве, если запросы клиентов пойдут через маршрутизатор то весь трафик пойдет
>на одни сервер (маршрутизатор раз прорезолвит IP и всё, ВЕСЬ трафик
>будет коммутироваться на этот MAC-адрес).

man carp on FreeBSd 7.2:
     For firewalls and routers with multiple interfaces, it is desirable to
     failover all of the carp interfaces together, when one of the physical
     interfaces goes down.  This is achieved by the preempt option.  Enable it
     on both host A and B:

           sysctl net.inet.carp.preempt=1

     Assume that host A is the preferred master and 192.168.1.x/24 is config-
     ured on one physical interface and 192.168.2.y/24 on another.  This is
     the setup for host A:

           ifconfig carp0 create
           ifconfig carp0 vhid 1 pass mekmitasdigoat 192.168.1.1/24
           ifconfig carp1 create
           ifconfig carp1 vhid 2 pass mekmitasdigoat 192.168.2.1/24

     The setup for host B is identical, but it has a higher advskew:

           ifconfig carp0 create
           ifconfig carp0 vhid 1 advskew 100 pass mekmitasdigoat 192.168.1.1/24
           ifconfig carp1 create
           ifconfig carp1 vhid 2 advskew 100 pass mekmitasdigoat 192.168.2.1/24

     Because of the preempt option, when one of the physical interfaces of
     host A fails, advskew is adjusted to 240 on all its carp interfaces.
     This will cause host B to preempt on both interfaces instead of just the
     failed one.


"Балансировка TCP-соединений во FreeBSD"
Отправлено Luxor , 31-Июл-09 13:14 
>[оверквотинг удален]
>           ifconfig
>carp1 vhid 2 advskew 100 pass mekmitasdigoat 192.168.2.1/24
>
>     Because of the preempt option, when one
>of the physical interfaces of
>     host A fails, advskew is adjusted to
>240 on all its carp interfaces.
>     This will cause host B to preempt
>on both interfaces instead of just the
>     failed one.

Зачем вы привели кусок мана описывающий процесс резервирования с помощью протокола CARP ? Я не решаю вопрос резервирования, я решаю вопрос балансировки.
Сразу после куска мана что вы вставили идет кусок как CARP раскидывает запросы с помощью ARP Balancing, такая схема работать не будет за маршрутизатором по понятным причинам


"Балансировка TCP-соединений во FreeBSD"
Отправлено BlackHawk , 31-Июл-09 15:13 
>[оверквотинг удален]
>>240 on all its carp interfaces.
>>     This will cause host B to preempt
>>on both interfaces instead of just the
>>     failed one.
>
>Зачем вы привели кусок мана описывающий процесс резервирования с помощью протокола CARP
>? Я не решаю вопрос резервирования, я решаю вопрос балансировки.
>Сразу после куска мана что вы вставили идет кусок как CARP раскидывает
>запросы с помощью ARP Balancing, такая схема работать не будет за
>маршрутизатором по понятным причинам

почему не будет? как раз мы резервируем сервер, который будет заниматся балансировкой, чтоб убрать "бутылочное горлышко"... CARP же не будет заниматся балансировкой, а только резервированием


"Балансировка TCP-соединений во FreeBSD"
Отправлено Luxor , 31-Июл-09 16:19 
>[оверквотинг удален]
>>
>>Зачем вы привели кусок мана описывающий процесс резервирования с помощью протокола CARP
>>? Я не решаю вопрос резервирования, я решаю вопрос балансировки.
>>Сразу после куска мана что вы вставили идет кусок как CARP раскидывает
>>запросы с помощью ARP Balancing, такая схема работать не будет за
>>маршрутизатором по понятным причинам
>
>почему не будет? как раз мы резервируем сервер, который будет заниматся балансировкой,
>чтоб убрать "бутылочное горлышко"... CARP же не будет заниматся балансировкой, а
>только резервированием

"бутылочное горлышко" меня смущает не в свете отсутствия резервирования, а в классическом значении данного понятия - самое медленный элемент системы определяющий пропускную способность всей системы. Конкретно к моему случаю - я уже раскидывал сессии с помощью ipfw который поддерживается фряхой на уровне ядра, такое решение намного производительней чем то что вы предлагает, меня сам по себе такой подход - с сервером который будет молотить ВЕСЬ трафик не устраивает, меня привлекает решения сетевого кластера в котором бы раскидывались подключения пользователей между серверами входящими в кластере БЕЗ промежуточного звена... тогда пропускная способность такого узла будет бесконечной при сравнительно маленьких затратах (покупка недорогих серверов средней, если так можно выразиться, мощности). Моя предметная область это VPN-подключения пользователей по протоколу pptp, именно vpn-подключения пользователей между серверами я и собираюсь раскидывать... не знаю может есть специальные программы конкретно под эту задачу...


"Балансировка TCP-соединений во FreeBSD"
Отправлено Денис Юсупов , 10-Сен-09 17:40 
> Моя предметная область это
>VPN-подключения пользователей по протоколу pptp, именно vpn-подключения пользователей между серверами я
>и собираюсь раскидывать... не знаю может есть специальные программы конкретно под
>эту задачу...

Вот конкретно VPN-подключения мы как раз и делали через DNS round-robin с выставленным TTL 0. Семь серверов было, работало просто на ура.



"Балансировка TCP-соединений во FreeBSD"
Отправлено artemrts , 02-Авг-09 01:53 
>Здравствуйте!
>Подскажите программку для балансировки TCP-сессий между двумя серверами. Акцентирую внимание что мне
>надо чтобы не пакеты раскидывались, а именно TCP-сессии, т.е. первый пользователь
>подключаясь по ip=10.0.0.1 попадает на один сервер (и в дальнейшем работает
>с ним) второй пользователь подключаясь по ip=10.0.0.1 попадает на второй сервер.
>

Суть понятна. А если взять такой вариант. Поставить пусть недорогой но шустрый комп, скжем 4 ядра. Потом установит 2 гигабитки, смотрящие в локалку, а 2 - в мир и использовать lagg для балансировки.
  Сам так не пробовал, просто как вариант.


"Балансировка TCP-соединений во FreeBSD"
Отправлено Luxor , 02-Авг-09 21:49 
>[оверквотинг удален]
>>Подскажите программку для балансировки TCP-сессий между двумя серверами. Акцентирую внимание что мне
>>надо чтобы не пакеты раскидывались, а именно TCP-сессии, т.е. первый пользователь
>>подключаясь по ip=10.0.0.1 попадает на один сервер (и в дальнейшем работает
>>с ним) второй пользователь подключаясь по ip=10.0.0.1 попадает на второй сервер.
>>
>
>Суть понятна. А если взять такой вариант. Поставить пусть недорогой но шустрый
>комп, скжем 4 ядра. Потом установит 2 гигабитки, смотрящие в локалку,
>а 2 - в мир и использовать lagg для балансировки.
>  Сам так не пробовал, просто как вариант.

вы предлагаете мне сделать шаг назад. Я пытаюсь уйти от варианта с одним сервером, а вы предлагаете к нему вернуться. На данный момент сервер HP DL380G5 два двухядерных Xeon 3.0GHz не справляются, следующий этап сервер с четырьмя провессорами это стоимость под 350к, и со старым сервером надо что-то делать ). Короче вопрос остается отрытымым.
На данный момент я собираю примерно такой же по железу сервер на OpenBSD, если производительность будет вменяемая то решу вопрос CARP-ом, но конечно хотелось бы все это на фряхе реализовать...


"Балансировка TCP-соединений во FreeBSD"
Отправлено artemrts , 03-Авг-09 10:12 
>[оверквотинг удален]
>>Суть понятна. А если взять такой вариант. Поставить пусть недорогой но шустрый
>>комп, скжем 4 ядра. Потом установит 2 гигабитки, смотрящие в локалку,
>>а 2 - в мир и использовать lagg для балансировки.
>>  Сам так не пробовал, просто как вариант.
>
>вы предлагаете мне сделать шаг назад. Я пытаюсь уйти от варианта с
>одним сервером, а вы предлагаете к нему вернуться. На данный момент
>сервер HP DL380G5 два двухядерных Xeon 3.0GHz не справляются, следующий этап
>сервер с четырьмя провессорами это стоимость под 350к, и со старым
>сервером надо что-то делать ). Короче вопрос остается отрытымым.

Если сможете решить этот вопрос на FreeBSD, отпишитесь на форуме, как это сделали, самому интересно.

P.S.: а вообще странно, что такой сервак не справляется, может тюнингу немного, поллинг...


"Балансировка TCP-соединений во FreeBSD"
Отправлено Денис Юсупов , 10-Сен-09 17:42 
>>[оверквотинг удален]
>вы предлагаете мне сделать шаг назад. Я пытаюсь уйти от варианта с
>одним сервером, а вы предлагаете к нему вернуться. На данный момент
>сервер HP DL380G5 два двухядерных Xeon 3.0GHz не справляются, следующий этап
>сервер с четырьмя провессорами это стоимость под 350к, и со старым
>сервером надо что-то делать ).

Чего-то вы конкретно такое загнули, расскажите про конфиг. Надеюсь, на mpd4/5 вы уже перешли, ng_nat и ng_car пользуете?