Forum Discussion

Jason_Hook_4092's avatar
Jason_Hook_4092
Icon for Nimbostratus rankNimbostratus
Dec 16, 2009

HTTP Keep-alive holding connection to disabled server

We have x number of servers in a pool and they are configured with HTTP keep-alives enabled. When one of the servers needs maintenance or is getting sick, we go into the pool member list and select the server and choose Force Offline to sever idle connections. After this we need to wait for an indefinite amount of time before the active connections drop...in some cases this could be all day until evening when volume decreases dramatically...but at times we need to take the sick server out "now."

 

 

We could issue an iisreset on the server to clear the connections, but we risk an in-progress request to be dropped on the floor which we want to completely avoid.

 

 

My question is...how can we creatively redirect connections going to the sick member of a pool to another member of the same pool when we disable the member without killing any requests in the process?

 

 

Big-IP 6900 w/ LTM v10.0.1

 

Windows Server 2003 w/ IIS6

 

 

Any suggestions would be appreciated.

 

 

Jason

 

6 Replies

  • Hi Jason,

     

     

    You can use the pool's "Action on Service Down" setting to reselect a new pool member:

     

     

     

    Specifies how the system should respond when the target pool member becomes unavailable. The default is None.

     

     

    * None: Specifies that the system does not select a different node. Selecting None causes the system to send traffic to the node even if it is down, until the next health check is done.

     

    * Reject: Specifies that the system sends an RST or ICMP message.

     

    * Drop: Specifies that the system simply cleans up the connection.

     

    * Reselect: Specifies that the system selects a different node. Selecting Reselect causes the system to send traffic to a different node after receiving the message that the original node is down.

     

     

     

     

    Aaron
  • I was looking at that, but does it also trigger on disabling the member? The help reads that it happens when the member is "marked down" or failed by a monitor...it doesn't mention manually disabling it.

     

     

    Thanks.
  • I'm not sure. The online help states "unavailable" so I assumed manually disabling it would qualify. You could test it and verify.

     

     

    Aaron
  • I've gotten back to this and that setting doesn't seem to work with HTTP Keep-alives enabled in IIS6. When manually diabling the member and when causing the monitor to fail and take the member down, I continue to make requests to the same "down" server due to HTTP Keep-alive.

     

     

    Other thoughts?

     

     

    I don't really want to disable HTTP Keep-alive for performance reasons, but if I can't take a failing member out of the request flow without recycling the application...I might have to disable them and lose some performance.
  • Hi Jason,

     

     

    My understanding of the pool's "action on service down" is that it should take effect for existing connections. This is also noted in the following AskF5 solution:

     

     

     

    SOL10640: Pool member reselection options

     

    https://support.f5.com/kb/en-us/solutions/public/10000/600/sol10640.html

     

     

    ...the Reselect option under the Action on Service Down advanced pool feature [...] manages established client connections by moving them to an alternative pool member when monitors mark the original pool member down.

     

     

     

    If this isn't the behavior you're seeing in tests, I'd suggest opening a case with F5 Support to find out if there are any known issues with the feature in your version.

     

     

    Aaron
  • I found out I want to be using the "Reject" option. This will break the connection and basically cause a TCP retrans to occur to re-establish the connection and it will then hit another active member in the pool.

     

     

    I tested this and it seems to be working for me.