Forum Discussion

Fabien_Hochstra's avatar
Fabien_Hochstra
Icon for Nimbostratus rankNimbostratus
Oct 24, 2018

Use the pool members marked as down when all the members in the pool are down

Hello,

 

Is there a way to tell the F5 to send traffic to the pool members marked as down (by their monitor) in case all the pool members are down? I know it sounds silly, but here is why.

 

The (HTTP) application running on the pool members has a health-check URL which is used by the monitor. If the health-check page says "all good", traffic is sent to the pool member, otherwise the pool member is marked as down.

 

All the pool members share the same database. If just some part of the application (let's call it feature A) has an issue, the health-check page returns an error. If the source of the problem is in the database, all the nodes are marked as down. Even if all the other features are working.

 

My idea would be to not use the pool members marked as down as long as there is at least 1 "sane" pool member (from the monitor point of view). As soon as all the pool members are down, instead of refusing all the requests, I would like to send the traffic to the backend nodes anyway. If we're lucky, at least something will work...

 

The end-to-end monitoring will trigger the re-routing of the traffic to another location if there is a real problem anyway. But all the locations share the same database. So it will do that until there is no other location to failover to and still refuse to serve the traffic in case the problem is only on feature A.

 

I had the idea to use Priority Group Activation with 2x each backend node in the pool, once with the monitor, and once without any monitor. The problem is that I cannot add the same IP/port object twice in a pool...

 

I guess it should be possible to do that using an iRule?

 

Thanks for your help!

 

1 Reply

  • Hi

     

    You could create a second pool and populate it with the same members however then you can assign your more simplistic monitor. Then you could add an iRule that looks at the availability of the main pool, and if it were to become unavailable then you can send traffic onto your backup pool.

     

    You can use active_members to test whether your pool is available or not - either all of the time (so every HTTP_Request for instance) or when load balancing can't take place (LB_FAILED) or a mixture of the two, whatever suits your needs.