I have a load balancer setup with two server farms behind it, one has 3 Apache servers on Linux and the other has 2 IIS servers. I configured 2 virtual services on the load balancer identically, one pointing to each farm and set to do round robin balancing with no persistence. The Apache servers work just as expected, but the IIS servers stick the session for 60 seconds before sending the next request to the next server.

To demonstrate this I simply created an HTML page that shows the server name. When I go to the virtual address presented by the load balancer, I see server 1, 2, 3, 1, 2, 3, etc when I press refresh on the Apache servers. However when I go to the virtual address pointing to the IIS servers when I press refresh I am still on the same server. If I wait 60 seconds then refresh I am directed to the other IIS server.

The current load balancer that I am using is from Kemp Technologies. However, before I setup the Kemp I saw the exact same behavior when using HAproxy. Therefore this seems to be a Windows issue on the back end server somehow, instead of the load balancer. However I don't really understand how this is possible since it should be the load balancer determining which backend server will service the request.

Has anyone else seen this type of behavior? Is there something that I can modify to allow my Windows servers to be balanced in a true round robin fashion?


The test pages on the IIS systems run a server side ASP script to insert the current date/time with a simple ASP script <%=now()%>. This allows me to see that the pages are not being cached and are being dynamically regenerated on each request. These pages also contain the IIS host name so I can tell which IIS server actually generated the rendered page.

  • You're not using NLB or ARR with IIX 7.x are you? By default and on its own, IIS pretty much can't do what you're seeing. It almost definitely has to be coming from your LB config, default behavior, or something else in the environment. – mfinni Jun 22 '11 at 18:22
  • I am not using NLB. These test servers are stand alone. – Richard West Jun 22 '11 at 19:00
  • Have you tried posting this question to Kemp's forums, or asking their support? This might be a quirk of their configs, that most folks on SF wouldn't know about. I haven't been much of a networks guy, I just know my apps have always been behind F5 or Cisco or sometimes Citrix. – mfinni Jun 22 '11 at 19:28

Yeah, your intuition is right -- it's really not possible for IIS to be causing this issue, as those devices have no control over where the requests get routed.

Are you certain that your browser isn't simply caching the page, with the next request going to the other server properly and getting a 304 (not modified) response?

In other words - are you using a method other than what your browser displays to verify where the requests are going?

  • 1
    I should have specified this in the original post - sorry. The short answer is yes I am sure that the request is being fulfilled. I have simple classic ASP page with a <%=now()%> parameter that will display the time that the page was rendered on the server. On each refresh I can see the time updated so I know that nothing is being cached. – Richard West Jun 22 '11 at 18:18
  • In testing other load balancers this problem has not been observed. – Richard West Jun 29 '11 at 2:20

Comparative network tracing is your best bet to prove/disprove this, and to generate theories about why.

Simplest thought: IIS might have keep-alives enabled and Apache not (or simply closing the connection each time, whatever the mechanism)...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.