2 votes

Comment fermer proprement toutes les connexions sur WLBS ?

J'utilise WLBS dans Windows 2000 pour deux serveurs Web à des fins de redondance et d'équilibrage de charge. Lorsque je veux arrêter l'un des services, j'utilise "WLBS drainstop" à partir de la ligne de commande. Cependant, en surveillant le nombre de connexions ouvertes dans IIS, il faut un certain temps pour que les connexions existantes soient fermées. Si j'exécute "WLBS stop", les connexions restantes vont se bloquer pendant quelques minutes, le temps qu'elles comprennent que l'autre extrémité de la connexion n'est plus là. Nous n'avons pas besoin de connexions longues, et les demandes de pages sont renvoyées en moins de 10 secondes. Existe-t-il un moyen pour WLBS ou IIS de fermer toutes les connexions non actives ouvertes, de sorte que je puisse retirer un serveur de l'équilibrage de charge sans attendre que toutes les connexions ouvertes se ferment d'elles-mêmes ?

2voto

zvrba Points 14028

Utilisation de un vieux truc des groupes de discussion Joel La désactivation de la fonction "keep-alive", puis l'exécution du drainstop WLBS ont permis de faire fonctionner le système correctement. Puis j'ai écrit un script en VBS pour automatiser le tout. Il y a 2 script. Un script pour retirer le nœud du cluster, et un autre pour remettre le nœud en ligne.

La suppression du script est la suivante.

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"

Et le script pour remettre la machine en ligne est le suivant.

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"

Vous pouvez modifier la variable IISInstanceName en haut du script pour correspondre au nom de votre serveur web. Il s'agit du nom qui apparaît lorsque vous allez dans la section "Internet Information Services" sous "Administrative Tools". Vous pouvez le changer pour le nom que vous avez donné à votre serveur Web. Dans l'ensemble, c'est un peu lourd, mais cela fonctionne. Il est également possible de modifier la première ligne en

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

et ensuite couper tout le boucle for qui recherche le serveur par son nom, mais je pense qu'il est un peu plus "correct" de trouver le serveur par son nom, plutôt que par un certain nombre, que je ne suis pas sûr que Windows changerait dans certaines circonstances d'ajout et de suppression d'instances de serveur web.

1voto

Steve Scheffler Points 1166

Il suffit d'abaisser le délai d'attente de deux minutes à ~20 secondes pour que cela soit suffisant.

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X