Como faço para fechar todas as conexões no WLBS?

Como faço para fechar todas as conexões no WLBS?

Estou usando WLBS no Windows 2000 para 2 servidores web para redundância e balanceamento de carga. Quando quero desativar um dos serviços, uso "WLBS drenastop" na linha de comando. No entanto, ao monitorar o número de conexões abertas no IIS, demora um pouco para que as conexões existentes sejam fechadas. Se eu executar "WLBS stop", as conexões restantes serão interrompidas por alguns minutos enquanto descobrem que a outra extremidade da conexão não está mais lá. Não precisamos de conexões de longa duração e as solicitações de página são retornadas em menos de 10 segundos. Existe alguma maneira de o WLBS ou o IIS fechar quaisquer conexões abertas e não ativas, para que eu possa remover um servidor do balanceamento de carga sem esperar que todas as conexões abertas fechem sozinhas?

Responder1

Usandoum velho truque dos grupos de discussão de Joeldesligar o keep-alive e, em seguida, executar o WLBS Drainstop foi a chave para que isso funcionasse corretamente. Então escrevi um script em VBS para automatizar tudo. Existem 2 scripts. Um script para remover o nó do cluster e outro para colocar o nó online novamente.

O script de remoção é o seguinte.

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"

E o script para colocar a máquina online novamente é o seguinte.

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"

Você pode alterar a variável IISInstanceName na parte superior do script para corresponder ao nome do seu servidor web. Este é o nome que aparece quando você vai para a seção “Serviços de Informações da Internet” em “Ferramentas Administrativas”. Você pode alterar isso para o nome que você deu ao seu servidor web. No geral é um pouco desajeitado, mas funciona. Também é possível alterar a primeira linha para

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

e, em seguida, corte todo o loop for que procura o servidor pelo nome, mas acho que é um pouco mais "correto" encontrar o servidor pelo nome, em vez de por algum número, que não tenho certeza se o Windows mudaria em algumas circunstâncias de adição e remoção de instâncias de servidor web.

Responder2

Apenas reduzir o tempo limite de manutenção de atividade de dois minutos para cerca de 20 segundos pode ser suficiente.

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

informação relacionada