如何徹底關閉 WLBS 上的所有連接

如何徹底關閉 WLBS 上的所有連接

我在 Windows 2000 中將 WLBS 用於 2 個 Web 伺服器,以實現冗餘和負載平衡。當我想要關閉其中一項服務時,我從命令列使用“WLBS Drainstop”。然而從監控IIS中開啟的連線數來看,現有的連線需要相當長的一段時間才能關閉。如果我運行“WLBS stop”,剩餘的連接將掛起幾分鐘,同時他們發現連接的另一端不再存在。我們不需要長時間運行的連接,頁面請求將在 10 秒內返回。 WLBS 或 IIS 是否有某種方法可以關閉任何打開的非活動連接,以便我可以從負載平衡中刪除伺服器,而無需等待所有打開的連接自行關閉?

答案1

使用喬爾討論小組的老把戲關閉 keep-alive,然後運行 WLBS Drainstop 是使其正常工作的關鍵。然後我用 VBS 編寫了一個腳本來自動化整個過程。有2個腳本。一個腳本用於從叢集中刪除節點,另一個腳本用於使節點重新上線。

刪除腳本如下。

Set IISOBJ = getObject("IIS://LocalHost/W3SVC")
Dim IISInstance
Dim FoundIIS
Dim IISInstanceName 
Dim NumConnections
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")

IISInstanceName = "Default Web Site"

FoundIIS = False

For each IISInstance in IISOBJ
    If (IISInstance.Class = "IIsWebServer") Then
        If (IISInstance.ServerComment = IISInstanceName) Then
            IISInstance.Put "AllowKeepAlive", False
            IISInstance.SetInfo()
            FoundIIS = True
            Exit For
        End If
    End If
Next

If Not FoundIIS Then
    WScript.Echo "Could Not Find IIS.  Exiting."
    Wscript.quit()
End If

WSHShell.Run "wlbs drainstop" , 0, true

WScript.Echo " Going To Sleep For: " & IISInstance.Get("ConnectionTimeout") & " Seconds"

WScript.Sleep IISInstance.Get("ConnectionTimeout") * 1000 

WSHShell.Run "wlbs stop" , 0, true

WScript.Echo "Successfully removed node from load balancing"

使機器重新上線的腳本如下。

Set IISOBJ = getObject("IIS://LocalHost/W3SVC")
Dim IISInstance
Dim FoundIIS
Dim IISInstanceName 

IISInstanceName = "Default Web Site"

FoundIIS = False

For each IISInstance in IISOBJ
    If (IISInstance.Class = "IIsWebServer") Then
        If (IISInstance.ServerComment = IISInstanceName) Then
            IISInstance.Put "AllowKeepAlive", True
            IISInstance.SetInfo()
            FoundIIS = True
            Exit For
        End If
        End If
Next

If Not FoundIIS Then
    WScript.Echo "Could Not Find IIS.  Exiting."
    Wscript.quit()
End If

Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")

WSHShell.Run "wlbs start" , 0, true

WScript.Echo "Successfully added node to load balancing"

您可以變更腳本頂部的 IISInstanceName 變數以符合您的 Web 伺服器的名稱。這是當您前往「管理工具」下的「Internet 資訊服務」部分時顯示的名稱。您可以將其變更為您為 Web 伺服器命名的任何名稱。總的來說,它有點笨拙,但很有效。也可以將第一行改為

Set IISInstance = getObject("IIS://LocalHost/W3SVC/1")

然後剪掉按名稱查找伺服器的整個 for 循環,但我認為按名稱查找伺服器而不是按某個數字查找伺服器更“正確”,我不確定 Windows 是否會在以下情況下改變新增和刪除Web伺服器實例的某些情​​況。

答案2

相關內容