0

ldirectord を使用して、2 つの IIS サーバーの負荷を分散しています。ldirectord.cg は次のようになります。

autoreload = yes
quiescent = yes
checkinterval = 1
negotiatetimeout = 2
emailalertfreq = 60
emailalert = Konstantin.Boyanov@mysite.com
failurecount = 1

virtual = 172.22.9.100:80
    checktimeout = 1
    checktype = negotiate
    protocol = tcp
    real = 172.22.1.133:80 masq 2048
    real = 172.22.1.134:80 masq 2048
    request = "alive.htm"
    receive = "I am not a zombie"
    scheduler = wrr

負荷分散は正常に機能しており、実際のサーバーは表示されています。それにもかかわらず、簡単なテストで問題が発生しています。

  1. クライアント ブラウザー (IE 8) から実サーバーでホストされているサイトへの接続をいくつか開いています。
  2. 上記の接続を行う実サーバーの重みを 0 に変更し、他の実サーバーのみを有効のままにします。
  3. ページをリロードして接続を再生成します

私が ipvsadm -Ln で見ているのは、接続がまだ「死んだ」サーバー上にあるということです。それらが「生きている」サーバーに転送されるまで、最大1分(ブラウザ側からのTCPタイムアウトがあると思います)待つ必要があります。そして、この 1 分間にリロード ボタンを押し続けると、接続は「デッド」サーバーにとどまり、TCP タイムアウト カウンターが再起動されます。

私の質問は次のとおりです。NATモードのロードバランサーに、既存の接続をすぐに(またはすぐに)終了/リダイレクトするように指示する方法はありますか?

クライアント側でリロードすると、接続が「ゾンビ」になる可能性があります。たとえば、永続性が使用されておらず、他のサーバーの準備ができて利用可能であるにもかかわらず、死んだ実サーバーにバインドされる可能性があります。

このタイムアウトに影響を与えることがわかった唯一のことは、テストに使用する IE8 を実行している Windows マシンで keepAliveTimeout を変更することです。デフォルト値の 60 秒から 30 秒に変更すると、30 秒後に接続を転送できました。クライアントの設定がロード バランサとしてのネットワーク コンポーネントの動作に影響を与える可能性があることは、非常に奇妙に思えます。

もう 1 つ - ipvsadm からの出力にある "Inactive Conenctions" という名前の列は何に使用されますか? 非アクティブと見なされる接続は?

また、ipvsadm の出力には、TIME_WAIT 状態の接続がいくつか表示されます。これらは何のためですか?

洞察や提案は大歓迎です!

乾杯、コンスタンチン

PS: 構成に関する詳細情報は次のとおりです。

# uname -a
Linux 3.0.58-0.6.2-default #1 SMP Fri Jan 25 08:31:01 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  lb-mysite.com wrr
  -> spwfe001.mysite.com:h Masq    10     0          0
  -> spwfe002.mysite.com:h Masq    10     0          0

# 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


# 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
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
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
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


# cat /proc/sys/net/ipv4/ip_forward
1
# cat /proc/sys/net/ipv4/vs/conntrack
1
# cat /proc/sys/net/ipv4/vs/expire_nodest_conn
1
# cat /proc/sys/net/ipv4/vs/expire_quiescent_template
1
4

1 に答える 1

1

まず、重みを 0 に変更してテストすることはできません...失敗したサーバーをシミュレートするには、ipvs テーブルからエントリを完全に削除する必要があります。

ldirectord に停止したサーバーを維持するように指示しました: quiescent = yes これを次のように変更する必要があります:

次の値が正しく設定されているようです: expire_nodest_conn - BOOLEAN expire_quiescent_template - BOOLEAN

ここでの説明: https://www.kernel.org/doc/Documentation/networking/ipvs-sysctl.txt

于 2013-11-08T11:29:41.297 に答える