gruber Posted May 8, 2015 Posted May 8, 2015 Доброго дня. Есть пара веб серверов на FreeBSD 10, между ними настроен CARP, используют они один адрес. Все вроде прекрасно, есть резервирование, один master - второй backup. Вопрос в том как поднять LoadBalancing, на основе хешей IP источника. Чтобы нагрузить запросами оба сервака. Раньше во фряхе до 10-ки оно умело вроде как, net.inet.carp.arpbalance, а начиная с 10-ки вроде как убрали эту фичу. Вопрос в том как сделать Load Balancing на freebsd 10 для двух серверов nginx? Может кто что нить присоветует? А то менять систему на 9-ку уже неохота. Всем спасибо. Вставить ник Quote
vlad11 Posted May 8, 2015 Posted May 8, 2015 Там серьезные проблемы с src пакетами на slave сервере. Я к Глебиусу обращался, чтоб он нашел время и поправил эти глюки, но он сослался на занятость. Вставить ник Quote
st_re Posted May 8, 2015 Posted May 8, 2015 У вас клиенты в одном сегменте с серверами ? А то может и не стоит оно того ? балансится оно исключительно путем ответа разным АРП, т.е. если люди приходят с 1 маршрутизатора то балансировки и не было бы. повесте 2 ip. первый на 1-м сервере мастер, на втором слейв, второй наоборот и в DNS 2 записи. В общем так оно и получится. Вставить ник Quote
SyJet Posted May 10, 2015 Posted May 10, 2015 А аппаратные балансеры типа ace и alteon? Вставить ник Quote
gruber Posted May 12, 2015 Author Posted May 12, 2015 Там серьезные проблемы с src пакетами на slave сервере. Я к Глебиусу обращался, чтоб он нашел время и поправил эти глюки, но он сослался на занятость. Понял, спасибо за инфо. По поводу балансировки по ARP - поянтно конечно что только внутри будет работать, поэтому и думали на счет балансировки по src-IP. В идеале хочется получить функционал CRAP из OpenBSD, судя по ихнему man, оно должно уметь по IP раскидывать. IP BALANCING IP load balancing works by utilizing the network itself to distribute incoming traffic to all carp nodes in the cluster. # ifconfig carp0 192.168.1.10 carpnodes 1:0,2:100 balancing ip The configuration for host B is identical, except the skew is on the carpnode entry with virtual host 1 rather than virtual host 2. # ifconfig carp0 192.168.1.10 carpnodes 1:100,2:0 balancing ip По поводу аппаратных балансеров - все как обычно просто, будет бюджет - будем думать о них, а пока как-нибудь так... Всем спасибо. Может с помощью PF попробовать, как-то так: web_servers = "{ 10.0.0.10, 10.0.0.11, 10.0.0.13 }" match in on $ext_if proto tcp to port 80 rdr-to $web_servers \ round-robin sticky-address ?? Вставить ник Quote
gruber Posted May 12, 2015 Author Posted May 12, 2015 Собственно вышли из положения с помощью PF. На первом серваке делаем правило в PF которое редиректит на несколько серверов: rdr on $ExtIf proto tcp from any to $CARP1 port 80 -> $webfarm round-robin sticky-address через devd отслеживаем состояние carp, если он вдруг стал не MASTER то убираем редирект передернув PF с другим конфигом, в /etc/devd/carp.conf #cat /etc/devd/carp.conf notify 0 { match "system" "CARP"; match "subsystem" "[0-9]+@[0-9a-z]+"; match "type" "(MASTER|BACKUP)"; action "/usr/local/libexec/carpcontrol.sh $subsystem $type"; }; Вставить ник Quote
st_re Posted May 17, 2015 Posted May 17, 2015 table <web_servers> {} persistent и тогда можно по факту стал мастер добавлять в табличку IP и стал не мастер - убирать. меньше времени на парсинг конфига.. А чем 2 IP не подходит и по 2 карпа на каждой машине ? У меня такое в нескольких местах живет, нареканий не вызывает. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.