LVS с реальными серверами под FreeBSD

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Unknown
проходил мимо
Сообщения: 2
Зарегистрирован: 2012-10-12 12:04:52

LVS с реальными серверами под FreeBSD

Непрочитанное сообщение Unknown » 2012-10-12 12:09:48

Добрый день! Помогите, пожалуйста, с такой проблемой: есть load balancer (ipvs+heartbeat+ldirectord) настроенный под Debian 6.0.6, все работает отлично, когда нужно балансировать запросы на реальные сервера под Linux. Стало необходимо перенаправлять запросы на реальные сервера под FreeBSD, вот с этим возникли проблемы. Балансировщик перенаправляет запросы на фрю, что показывает tcpdump, но ответы фря не отдает, скорее всего просто не знает куда отправлять. Я подозреваю, что в этом виноват ARP.

Использую схему IPVS Direct Routing, как обозначено здесь.

Для того, чтобы реальные сервера под Linux отдавали ответы нужно провести на них следующие манипуляции:
1. Добавить в ядро следующие параметры:

Код: Выделить всё

# nano /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.eth0.arp_announce = 2
2. Добавить alias к loopback интерфейсу:

Код: Выделить всё

# nano /etc/network/interfaces
auto lo:0
iface lo:0 inet static
  address 172.16.2.33 (адрес VIP)
  netmask 255.255.255.255
После этого ответы от реальных серверов идут и система работает в целом корректно.

Итак вернмся к фре...
Реальный сервер под FreeBSD 7.2, на которой я прописал alias для loopback интерфейса, но как сделать так, чтобы фря игнорировала ARP?

Вывод ipvs (пока с одним хостом, но все же...):

Код: Выделить всё

# ipvsadm -Ln  
 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.2.33:30583 rr persistent 120
  -> 172.16.2.37:30583            Route   10     1          2 
Всё находится в одной подсети:
VIP (виртуальный адрес балансера) 172.16.2.33
RIP (адрес реального сервера) 172.16.2.37

Вот нашел как бы решение, но не помогло... тыц сюда

Вот дампы при разных настройках loopback.

Напрямую c клиента 172.16.2.35 без участия балансера 172.16.2.33:

Код: Выделить всё

# tcpdump -vv port 30583
tcpdump: listening on em0, link-type EN10MB (Ethernet), capture size 96 bytes
11:24:24.972474 IP (tos 0x10, ttl 64, id 25430, offset 0, flags [DF], proto TCP (6), length 60) 172.16.2.35.44844 > 172.16.2.37.30583: S, cksum 0x0549 (correct), 678177972:678177972(0) win 5840 <mss 1460,sackOK,timestamp 64638946 0,nop,wscale 5>
11:24:24.972565 IP (tos 0x0, ttl 64, id 1716, offset 0, flags [DF], proto TCP (6), length 60) 172.16.2.37.30583 > 172.16.2.35.44844: S, cksum 0x5c97 (incorrect (-> 0x9372), 3076133869:3076133869(0) ack 678177973 win 65535 <mss 1460,nop,wscale 3,sackOK,timestamp 233221993 64638946>
11:24:24.975073 IP (tos 0x10, ttl 64, id 25431, offset 0, flags [DF], proto TCP (6), length 52) 172.16.2.35.44844 > 172.16.2.37.30583: ., cksum 0xc182 (correct), 1:1(0) ack 1 win 183 <nop,nop,timestamp 64638947 233221993>
Через балансер без поднятия VIP на loopback:

Код: Выделить всё

# tcpdump -vv port 30583
tcpdump: listening on em0, link-type EN10MB (Ethernet), capture size 96 bytes
11:26:45.120591 IP (tos 0x10, ttl 64, id 23042, offset 0, flags [DF], proto TCP (6), length 60) 172.16.2.35.57140 > 172.16.2.33.30583: S, cksum 0xc887 (correct), 1447330492:1447330492(0) win 5840 <mss 1460,sackOK,timestamp 64673982 0,nop,wscale 5>
11:26:48.115872 IP (tos 0x10, ttl 64, id 23043, offset 0, flags [DF], proto TCP (6), length 60) 172.16.2.35.57140 > 172.16.2.33.30583: S, cksum 0xc599 (correct), 1447330492:1447330492(0) win 5840 <mss 1460,sackOK,timestamp 64674732 0,nop,wscale 5>
11:26:54.116060 IP (tos 0x10, ttl 64, id 23044, offset 0, flags [DF], proto TCP (6), length 60) 172.16.2.35.57140 > 172.16.2.33.30583: S, cksum 0xbfbd (correct), 1447330492:1447330492(0) win 5840 <mss 1460,sackOK,timestamp 64676232 0,nop,wscale 5>
Через балансер с поднятием VIP на loopback и отключением ARP:

Код: Выделить всё

# tcpdump -vv port 30583
tcpdump: listening on em0, link-type EN10MB (Ethernet), capture size 96 bytes
11:29:30.994232 IP (tos 0x10, ttl 64, id 9030, offset 0, flags [DF], proto TCP (6), length 60) 172.16.2.35.57141 > 172.16.2.33.30583: S, cksum 0xff9c (correct), 2784057852:2784057852(0) win 5840 <mss 1460,sackOK,timestamp 64715450 0,nop,wscale 5>
11:29:30.994272 IP (tos 0x10, ttl 64, id 1861, offset 0, flags [DF], proto TCP (6), length 40) 172.16.2.33.30583 > 172.16.2.35.57141: R, cksum 0x5c7f (incorrect (-> 0xfccf), 0:0(0) ack 2784057853 win 0
Через балансер с поднятием VIP на локал и без отключения APR:

Код: Выделить всё

# tcpdump -vv port 30583
tcpdump: listening on em0, link-type EN10MB (Ethernet), capture size 96 bytes
11:34:49.507921 IP (tos 0x10, ttl 64, id 27572, offset 0, flags [DF], proto TCP (6), length 60) 172.16.2.35.57142 > 172.16.2.33.30583: S, cksum 0x759d (correct), 2020661872:2020661872(0) win 5840 <mss 1460,sackOK,timestamp 64795076 0,nop,wscale 5>
11:34:49.508619 IP (tos 0x10, ttl 64, id 188, offset 0, flags [DF], proto TCP (6), length 40) 172.16.2.33.30583 > 172.16.2.35.57142: R, cksum 0x5c7f (incorrect (-> 0xa9db), 0:0(0) ack 2020661873 win 0
Последние два дампа одинаковые, такое чувство, что ARP все-же не отключается.

Спасибо!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Unknown
проходил мимо
Сообщения: 2
Зарегистрирован: 2012-10-12 12:04:52

Re: LVS с реальными серверами под FreeBSD

Непрочитанное сообщение Unknown » 2012-10-12 17:48:01

Отвечу сам же на свой вопрос:
Ошибка оказалась банальна. Там работает древний софт в связке с mthost, который принимал запросы только на указанный в нем ip, который конечно же отличался от VIP. Пришлось изменить настройки этих двух прог и все заработало в штатном режиме.

Всем спасибо за внимание!
Тему можно закрывать.