我在 NAT 模式下使用 LVS (ipvsadm) 來平衡多個「realservers」的 UDP 流量負載。我正在使用單一資料包調度,以便來自客戶端上單一來源連接埠的流量被分發到不同的真實伺服器。
不過,我看到的是,源自真實伺服器並發送回客戶端的 UDP 資料報將其來源 ip/連接埠設定為真實伺服器之一,這使客戶端感到困惑,因為它希望收到以下回應:與他將原始資料封包傳送到的來源IP/連接埠相符。
這確實很奇怪,因為 LVS 應該將真實伺服器「隱藏」在虛擬 IP/連接埠後面。
看來,如果我關閉單包調度,傳出資料報的來源 IP / 端口是由 LVS 正確重寫。
有人遇過這種情況嗎?如果是這樣,有什麼辦法可以解決這個問題?
答案1
如果您仍然感興趣:
我相信單一資料包調度不會期望它剛剛調度的資料包做出回應,因此不會儲存連接資訊。然後,當回應返回時,LVS 無法找到它的連接,因此不知道要使用哪個來源 IP/連接埠。
這似乎是設計使然。在此處搜尋“OPS 是針對原始資料包沒有回應的設定實現的”,您會看到一些解釋。
http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.UDP.html
解決方案是為 UDP 連線設定持久逾時(如果希望快速回應,可以將其設定得很低),從而明確設定連線時間。既然你可以這樣做,那麼 OPS 就沒有必要記住連線了。