IPvsadm 在 wlc 調度程式上不均衡

IPvsadm 在 wlc 調度程式上不均衡

由於某種原因,在使用 wlc 或 lc 調度程式時,ipvsadm 似乎並沒有平等地平衡我的真實伺服器之間的連線。一台真正的伺服器受到請求的嚴重打擊,而其他伺服器收到的連線相對較少。

我的 ldirectord.cf 檔案如下所示:

quiescent     = yes
autoreload    = yes
checktimeout  = 10
checkinterval = 10

# *.example.com http
virtual = 192.0.2.111:http
    real = 10.10.10.1:http  ipip    10
    real = 10.10.10.2:http  ipip    10
    real = 10.10.10.3:http  ipip    10
    real = 10.10.10.4:http  ipip    10
    real = 10.10.10.5:http  ipip    10
    scheduler = lc
    protocol = tcp
    service = http
    checktype = negotiate
    request = "/lb"
    receive = "Up and running"
    virtualhost = "site.com"
    fallback = 127.0.0.1:http

我認為可能導致問題的奇怪的事情(但我真的不確定)是 ipvsadm 似乎沒有正確跟踪活動連接,它們都顯示為非活動連接

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn    
TCP  192.0.2.111:http lc
  -> 10.10.10.1:http              Tunnel  10     0          10        
  -> 10.10.10.2:http              Tunnel  10     0          18        
  -> 10.10.10.3:http              Tunnel  10     0          3         
  -> 10.10.10.4:http              Tunnel  10     0          10        
  -> 10.10.10.5:http              Tunnel  10     0          5

如果我這樣做,ipvsadm -Lnc那麼我會看到很多連接,但僅處於 ESTABLISHED 和 FIN_WAIT 狀態。

我之前在基於 Gentoo 的負載平衡器上使用 ldirectord,並且 activeconn 曾經是準確的,因為遷移到 Ubuntu 10.4 LTS 後似乎有所不同。

# ipvsadm -v
ipvsadm v1.25 2008/5/15 (compiled with popt and IPVS v1.2.1)

那麼,ipvsadm 是否沒有正確追蹤活動連接,從而導致負載平衡工作不正確,如果是這樣,我該如何讓它再次正常工作?

編輯:事情變得更奇怪了,如果我cat /proc/net/ip_vs看起來正確的 activeconns 就在那裡:

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP  C000026F:0050 rr 
  -> 0AB42453:0050      Tunnel  10     1          24        
  -> 0AB4321D:0050      Tunnel  10     0          23        
  -> 0AB426B2:0050      Tunnel  10     2          25        
  -> 0AB4244C:0050      Tunnel  10     2          22        
  -> 0AB42024:0050      Tunnel  10     2          23

答案1

使用 lc(最少連接),如果所有伺服器具有相同數量的連接,那麼它將始終向清單中的第一個伺服器提供新連接。這可能意味著,如果您的使用率非常低,偶爾只有一個連接,則該連接將始終轉到清單中的第一個主機。

答案2

我最喜歡的是wrr(加權循環賽)。我是否正確地假設您正在使用 DR 方法(直接路由)?

在這種情況下,ipvsadm 不會看到這樣的連接,因為來自 RS(真實伺服器)的答案將直接發送到客戶端,而不是透過 LB 返回。

答案3

從您的連線數量來看,這對您來說可能不是問題,但如果其中一台真實伺服器的回應速度比其他伺服器慢,那麼您可能會得到最少連接的不均勻分佈,那麼它每次獲得的新連接將比其他伺服器少,如下所示它可以更快地累積連接。

答案4

David 的命令輸出顯示他正在使用隧道模式 (IPIP),該模式通常設定為 DR 的變體。我們需要查看一些路由表或圖表才能更好地理解他的設定。

但我同意 LVS 中的連線追蹤可能很混亂,因為它看不到 TCP FIN 封包。

ipvsadm 有一些設定可以更快地使過期連線逾時。例如,以下命令將使非活動連線在 1 小時後逾時:

/sbin/ipvsadm --set 3600 120 300

應仔細檢查客戶的來源。 LVS 的預設行為是透過客戶端 IP 進行持久連線。因此,如果使用來自相同測試客戶端 IP 的 wget 或 ab 進行壓力測試,則所有連線都會傳送至相同 realserver。

哈代理是一個更聰明的負載平衡器,但需要位於資料包的返迴路徑中才能完全透明地工作。

相關內容