0

2 つの HTTP サーバーの負荷分散に ldirectord を使用しています。ロード バランサー ボックスには、次のネットワーク構成があります。

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

また、NATing を期待どおりに機能させるための 2 つの追加の iptables ルールもあります。

# 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

さて、問題は、生きているチェックが期待どおりに機能しないことです。サーバーはオンラインですが (すべてのサーバーに ping を実行できます)、ldirector はそのように認識せず、ダウンしているとマークします。

ping チェックを使用すると、すべて正常に動作しますが、より包括的なサービス チェック (サーバー cna は 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)で生きているページをダウンロードできませんでした。両方とも異なるサブネットワークから、他の2台のマシンからwgettingしようとしましたが、うまくいきました! ロードバランサーボックスに問題があることに気付きました。

次に、ldirectord をシャットダウンし、wget を再試行しました。今回はうまくいきました。

それで、ldirector が何らかの理由で実サーバー上の生きているページへのアクセスを停止しているように思えますか? それは奇妙で非論理的なようです。では、何が間違っているのでしょうか?

この問題は、iptables ルールが原因ではありません。それらを削除しても、alive.htm ページはまだ利用できないためです。

実サーバーは両方とも、ロード バランサーからアクセスできます (ping 可能)。ldirectord の設定に問題がありますか?

live テスト中に ldirectord が行っていることを正確に追跡するにはどうすればよいですか?

そして一般的に、誰かが光を当てたり、何が間違っているのか、何が間違っているのかについてのアイデアを教えてくれませんか.

前もって感謝します :)

4

1 に答える 1

0

ロード バランサーで IPv6 を無効にしましたが、現在はすべて正常に動作しています。LVS + IPv6 はロシアン ルーレットだと思います :)

乾杯!

于 2013-04-11T14:57:38.010 に答える