중복성과 로드 균형 조정을 위해 2개의 웹 서버에 대해 Windows 2000에서 WLBS를 사용하고 있습니다. 서비스 중 하나를 중단하려면 명령줄에서 "WLBS Drainstop"을 사용합니다. 그러나 IIS에서 열려 있는 연결 수를 모니터링하면 기존 연결이 닫히는 데 시간이 꽤 걸립니다. "WLBS 중지"를 실행하면 연결의 다른 쪽 끝이 더 이상 존재하지 않는다는 것을 알아내는 동안 나머지 연결이 몇 분 동안 중단됩니다. 장시간 연결이 필요하지 않으며 페이지 요청은 10초 이내에 반환됩니다. 열려 있는 모든 연결이 저절로 닫힐 때까지 기다리지 않고 부하 분산에서 서버를 제거할 수 있도록 WLBS 또는 IIS가 열려 있는 비활성 연결을 닫을 수 있는 방법이 있습니까?
답변1
사용Joel 토론 그룹의 오래된 트릭연결 유지를 끈 다음 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 변수를 변경할 수 있습니다. "관리 도구" 아래의 "인터넷 정보 서비스" 섹션으로 이동하면 표시되는 이름입니다. 이를 웹 서버 이름으로 변경할 수 있습니다. 전반적으로 조금 투박하지만 작동합니다. 첫 번째 줄을 다음으로 변경할 수도 있습니다.
Set IISInstance = getObject("IIS://LocalHost/W3SVC/1")
그런 다음 이름으로 서버를 찾는 전체 for 루프를 잘라내십시오. 그러나 숫자보다는 이름으로 서버를 찾는 것이 좀 더 "정확"하다고 생각합니다. Windows가 아래에서 변경되는지 확실하지 않습니다. 웹 서버 인스턴스를 추가하고 제거하는 일부 상황.
답변2
연결 유지 시간 제한을 2분에서 최대 20초로 낮추는 것만으로도 충분할 수 있습니다.