For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

grilledcheez_21's avatar
grilledcheez_21
Icon for Nimbostratus rankNimbostratus
Sep 08, 2015

Priority Group Failover

Hi,

 

I have a pool with 4 servers in it. I have them in priority of 100,90,50,40. We did a failover test and started with failing the Primary server with the 100 priority, which failed over fine to the next server which had 90 as its priority.

 

Once the first three servers were offline, we brought the three back up, but the connections stayed with the 4th server. Once we failed the 4th server. One connection ended up going to one server, another two went to the secondary server and four of the connections went to the primary server.

 

It seems that once a connection is established to one of the servers, it stays with that server. It doesn't seem to reset the connections. It seems like the LTMs have some kind of persistence automatically turned on as we'd prefer to have all the connections jump back asap to the Primary server, or at least the one with the most priority.

 

Is there a setting I need to fiddle with to make the connections reset more quickly so it will go back to the Primary server in a priority group setting? I can't seem to find an option for this. I would assume I could do it through an HTML persistence profile, but the APP on these servers is not a web server.

 

Any ideas?

 

Thanks.

 

5 Replies

  • You can't really move existing connections. New connections should have started going to the best priority server when it came back online but existing connections would continue until the connection was closed. If your using persistence that may be part of it. Here is a similar use case. https://devcentral.f5.com/questions/priority-groups

     

    • grilledcheez_21's avatar
      grilledcheez_21
      Icon for Nimbostratus rankNimbostratus
      Well I don't have Source_Address selected like the guy had in that article. I have none selected. I'm wondering if there is a setting I need to adjust in the TCP protocol profile though. I have the default TCP profile applied to my virtual server.
  • I believe the only way end the connections is for the client or server to close the connection. If the TCP profile idle timer fired that would end the connection. Those default to 5 minutes but if the client connection is active or has keep alives enabled they will continue to use the server they have a session with. Or you could disable the node forcing it offline but that would brake whatever the client was doing and they would have to open a new TCP connection.

     

    • grilledcheez_21's avatar
      grilledcheez_21
      Icon for Nimbostratus rankNimbostratus
      Could I try testing with a new TCP profile? Just create one for testing that reduces the timer? Could that cause issue with connections that take more than 10 seconds, if I changed it to 10 seconds?
  • So, I found some iRule syntax for a failback iRule with a two server priority group. I took that and extended it for a four server priority group. Just wanted someone to take a look to see if it makes sense.

    when CLIENT_ACCEPTED {
    
    if { [LB::status pool poolname member 10.0.0.1 1235] equals "up" and [IP::addr [LB::server addr] equals 10.0.0.2] or [IP::addr [LB::server addr] equals 10.0.0.3] or  [IP::addr [LB::server addr] equals 10.0.0.4] } {
        reject
    } elseif { [LB::status pool poolname member 10.0.0.1 1235] equals "down" and [LB::status pool poolname member 10.0.0.2 1235] equals "up" and [IP::addr [LB::server addr] equals 10.0.0.3] or [IP::addr [LB::server addr] equals 10.0.0.4] } {
        reject
    } elseif { [LB::status pool poolname member 10.0.0.1 1235] equals "down" and [LB::status pool poolname member 10.0.0.2 1235] equals "down" and [LB::status pool poolname member 10.0.0.3 1235] equals "up" and [IP::addr [LB::server addr] equals 10.0.0.4] } {
        reject
    } else { 
        not reject
    }
    
    }  
    

    Let me know if this iRule makes sense.

    Thanks.