Jump to content
Калькуляторы

CARP Freebsd 10 load balancing

Доброго дня.

 

Есть пара веб серверов на FreeBSD 10, между ними настроен CARP, используют они один адрес.

Все вроде прекрасно, есть резервирование, один master - второй backup. Вопрос в том как поднять LoadBalancing, на основе хешей IP источника. Чтобы нагрузить запросами оба сервака.

 

Раньше во фряхе до 10-ки оно умело вроде как, net.inet.carp.arpbalance, а начиная с 10-ки вроде как убрали эту фичу.

Вопрос в том как сделать Load Balancing на freebsd 10 для двух серверов nginx?

Может кто что нить присоветует? А то менять систему на 9-ку уже неохота.

 

Всем спасибо.

Share this post


Link to post
Share on other sites

Там серьезные проблемы с src пакетами на slave сервере. Я к Глебиусу обращался, чтоб он нашел время и поправил эти глюки, но он сослался на занятость.

Share this post


Link to post
Share on other sites

У вас клиенты в одном сегменте с серверами ? А то может и не стоит оно того ? балансится оно исключительно путем ответа разным АРП, т.е. если люди приходят с 1 маршрутизатора то балансировки и не было бы. повесте 2 ip. первый на 1-м сервере мастер, на втором слейв, второй наоборот и в DNS 2 записи. В общем так оно и получится.

Share this post


Link to post
Share on other sites

А аппаратные балансеры типа ace и alteon?

Share this post


Link to post
Share on other sites

Там серьезные проблемы с 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

 

 

??

Share this post


Link to post
Share on other sites

Собственно вышли из положения с помощью 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";
          };

Share this post


Link to post
Share on other sites

table <web_servers> {} persistent

 

и тогда можно по факту стал мастер добавлять в табличку IP и стал не мастер - убирать. меньше времени на парсинг конфига..

 

А чем 2 IP не подходит и по 2 карпа на каждой машине ? У меня такое в нескольких местах живет, нареканий не вызывает.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this