負載平衡 IIS 伺服器總是粘滯 60 秒
我有一個負載平衡器設置,後面有兩個伺服器場,一個在 Linux 上有 3 個 Apache 伺服器,另一個有 2 個 IIS 伺服器。我在負載均衡器上配置了 2 個相同的虛擬服務,一個指向每個場,並設置為循環平衡,沒有持久性。Apache 伺服器按預期工作,但 IIS 伺服器在將下一個請求發送到下一個伺服器之前將會話保持 60 秒。
為了展示這一點,我簡單地創建了一個顯示伺服器名稱的 HTML 頁面。當我轉到負載均衡器提供的虛擬地址時,當我在 Apache 伺服器上按刷新時,我會看到伺服器 1、2、3、1、2、3 等。但是,當我按下刷新時轉到指向 IIS 伺服器的虛擬地址時,我仍然在同一台伺服器上。如果我等待 60 秒然後刷新,我將被定向到另一個 IIS 伺服器。
我目前使用的負載均衡器來自 Kemp Technologies。但是,在我設置 Kemp 之前,我在使用 HAproxy 時看到了完全相同的行為。因此,這似乎是後端伺服器上的 Windows 問題,而不是負載平衡器。但是我真的不明白這是怎麼可能的,因為它應該是負載均衡器確定哪個後端伺服器將為請求提供服務。
有沒有其他人見過這種行為?我可以修改一些東西以允許我的 Windows 伺服器以真正的循環方式平衡嗎?
編輯 -
IIS 系統上的測試頁面執行伺服器端 ASP 腳本,以使用簡單的 ASP 腳本 <%=now()%> 插入目前日期/時間。這使我可以看到頁面沒有被記憶體並且在每個請求上動態重新生成。這些頁面還包含 IIS 主機名,因此我可以知道哪個 IIS 伺服器實際生成了呈現的頁面。
是的,您的直覺是正確的——IIS 確實不可能導致此問題,因為這些設備無法控制請求的路由位置。
您確定您的瀏覽器不只是記憶體頁面,下一個請求會正確地發送到另一台伺服器並獲得
304
(未修改的)響應嗎?換句話說 - 您是否使用瀏覽器顯示的方法以外的方法來驗證請求的去向?
比較網路追踪是您證明/反駁這一點並生成有關原因的理論的最佳選擇。
最簡單的想法:IIS 可能啟用了 keep-alives 而 Apache 沒有(或者只是每次都關閉連接,無論機制如何)……