Балансировка нагрузки ldirectord NAT не работает с проверками согласования

Я использую ldirectord для балансировки нагрузки двух HTTP-серверов. На коробке балансировки нагрузки у меня есть следующая конфигурация сети:

eth0 используется для внутренних целей и вообще не участвует в балансировке нагрузки. На eth1 я настроил публичный IP для машины (для доступа из других внутренних сетей) и VIP балансировщика нагрузки. eth2 используется для доступа к реальным серверам, которые находятся в разных подсетях и доступны только через IP-адреса из одной подсети.

Детали следующие:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
inet 127.0.0.2/8 brd 127.255.255.255 scope host secondary lo
inet6 ::1/128 scope host
   valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:50:56:a5:77:ae brd ff:ff:ff:ff:ff:ff
inet 192.168.8.216/22 brd 192.168.11.255 scope global eth0
inet6 fe80::250:56ff:fea5:77ae/64 scope link
   valid_lft forever preferred_lft forever

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:50:56:a5:77:af brd ff:ff:ff:ff:ff:ff
inet 172.22.9.100/22 brd 172.22.11.255 scope global eth1:1
inet 172.22.8.213/22 brd 172.22.11.255 scope global secondary eth1
inet6 fe80::250:56ff:fea5:77af/64 scope link
   valid_lft forever preferred_lft forever

4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:50:56:a5:77:b0 brd ff:ff:ff:ff:ff:ff
inet 172.22.1.130/24 brd 172.22.1.255 scope global eth2
inet6 fe80::250:56ff:fea5:77b0/64 scope link
   valid_lft forever preferred_lft forever

Вот конфигурация моей балансировки нагрузки NAT:

# cat /etc/ha.d/ldirectord.cf
autoreload = yes
quiescent = yes
checkinterval = 10
negotiatetimeout = 10
checktimeout = 5
emailalert = "Konstantin.Boyanov@bmf.bund.de"
emailalertfreq = 60
failurecount = 3


virtual = 172.22.9.100:80
    checktimeout = 10
    checktype = negotiate
    failurecount = 2
    negotiatetimeout = 10
    protocol = tcp
    quiescent = yes
    real = 172.22.1.133:80 masq 1024
    real = 172.22.1.134:80 masq 1024
    request = "alive.htm"
    receive = "I am alive"
    scheduler = wrr
    service = http
    persistent = 5

У меня также есть два дополнительных правила iptables, чтобы заставить NAT работать должным образом:

# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  anywhere             anywhere            to:172.22.9.100
SNAT       all  --  anywhere             anywhere            to:172.22.1.130

Теперь проблема в том, что проверка в реальном времени не работает, как ожидалось. Хотя серверы подключены (я могу проверить их и все), ldirector не видит их таким образом и помечает их как отключенные.

Если я использую проверку ping, все работает нормально, но нам нужны переговоры для более полной проверки служб (сервер не может быть проверен, но http не работает и т. Д.).

Я попытался загрузить страницу alive.htm из командной строки в окне балансировки нагрузки и не смог.

# wget http://172.22.1.133/alive.htm
--2013-04-11 09:52:44--  http://172.22.1.133/alive.htm
Connecting to 172.22.1.133:80... failed: Connection timed out.
Retrying.

Сначала я подумал, что проблема с правилами iptables. Я удалил их, но все еще не мог загрузить живую страницу с помощью wget (и, к тому же, curl и w3m). Я попытался wgetting его с двух других машин, оба из разных подсетей, и он работал нормально! Я понял, что что-то не так с коробкой балансировки нагрузки.

Затем я закрыл ldirectord и снова попробовал wget. На этот раз это сработало.

Так что мне кажется, что ldirector каким-то образом останавливает себя от доступа к живой странице на реальных серверах? Это кажется странным и нелогичным. Так что я могу делать не так?

Проблемы не вызваны правилами iptables, потому что когда я их удаляю, страница alive.htm по-прежнему недоступна.

Реальные серверы доступны из балансировщика нагрузки (pingable). У меня есть проблемы с конфигурацией ldirectord?

Как я могу точно отследить, что делает ldirectord во время живого теста?

И вообще, может кто-то пролить некоторый свет или дать мне несколько идей, что может быть не так или что я могу делать неправильно.

Заранее спасибо:)

1 ответ

Решение

Я отключил IPv6 на балансировщике нагрузки, и теперь все работает нормально. Я думаю, LVS + IPv6 - русская рулетка:)

Ура!

Другие вопросы по тегам