Wie schließe ich alle Verbindungen auf WLBS sauber?

Wie schließe ich alle Verbindungen auf WLBS sauber?

Ich verwende WLBS in Windows 2000 für 2 Webserver zur Redundanz und zum Lastenausgleich. Wenn ich einen der Dienste herunterfahren möchte, verwende ich „WLBS drainstop“ von der Befehlszeile aus. Wenn ich jedoch die Anzahl der offenen Verbindungen in IIS überwache, dauert es ziemlich lange, bis die bestehenden Verbindungen geschlossen werden. Wenn ich „WLBS stop“ ausführe, bleiben die verbleibenden Verbindungen einige Minuten hängen, während sie herausfinden, dass das andere Ende der Verbindung nicht mehr vorhanden ist. Wir brauchen keine lang laufenden Verbindungen und Seitenanforderungen werden in deutlich unter 10 Sekunden zurückgegeben. Gibt es eine Möglichkeit für WLBS oder IIS, alle offenen, nicht aktiven Verbindungen zu schließen, sodass ich einen Server aus dem Lastenausgleich entfernen kann, ohne darauf warten zu müssen, dass alle offenen Verbindungen von selbst geschlossen werden?

Antwort1

Verwenden vonein alter Trick aus den Joel-DiskussionsgruppenKeep-Alive auszuschalten und dann WLBS Drainstop auszuführen, war der Schlüssel, damit das Ganze richtig funktionierte. Dann habe ich ein Skript in VBS geschrieben, um das Ganze zu automatisieren. Es gibt zwei Skripte. Ein Skript, um den Knoten aus dem Cluster zu entfernen, und ein anderes, um den Knoten wieder online zu bringen.

Das Entfernungsskript lautet wie folgt.

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"

Und das Skript, um die Maschine wieder online zu bringen, lautet wie folgt.

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"

Sie können die Variable IISInstanceName oben im Skript so ändern, dass sie dem Namen Ihres Webservers entspricht. Dies ist der Name, der angezeigt wird, wenn Sie unter „Verwaltung“ zum Abschnitt „Internetinformationsdienste“ gehen. Sie können dies in den Namen ändern, den Sie Ihrem Webserver gegeben haben. Insgesamt ist es ein wenig klobig, aber es funktioniert. Es ist auch möglich, die erste Zeile zu ändern in

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

und dann die gesamte For-Schleife herausschneiden, die den Server nach Namen sucht, aber ich denke, es ist etwas „richtiger“, den Server nach Namen zu suchen, als nach einer Nummer, bei der ich nicht sicher bin, ob Windows sie unter bestimmten Umständen beim Hinzufügen und Entfernen von Webserverinstanzen ändern würde.

Antwort2

Möglicherweise reicht es schon aus, das Keepalive-Timeout von zwei Minuten auf etwa 20 Sekunden zu verkürzen.

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ea116535-8eb9-4c80-8b14-b34418dbfe42.mspx

verwandte Informationen