Forum Discussion

Nitzan's avatar
Nitzan
Icon for Nimbostratus rankNimbostratus
Oct 22, 2019

Take one pool down when another fails

Hi,

 

I have a relatively simple problem which I can't think of a solution to..

I have 3 pools with the following inter dependencies:

  1. Pool1 Backend App
  2. Pool2 Fontend App

 

Pools 1 and 2 have four members each, two in the primary location and two in the DR.

 

Problem:

Priority groups are the natural solution, but they must all fail together.

  • For example: suppose Backend App1-2 (in the primary) are both down, by that pool's priority groups, traffic is now directed to Backend App3-4 however Frontend are still in the primary. unacceptable.
  • For example suppose Fronend App1-2 (in the primary) are both down, by that pool's priority groups, traffic is now directed to Fronend App3-4, however they themselve connect to Backend App1-2 which is still in the primary location.

 

The apps are not HTTP and DNS (GTM) is impossible as clients must use IPs.

 

Approaches tried:

One approach would have been a 'compound' monitor of:

  • in the frontends "Frontend & (Backend app1 OR app2)"
  • in the backends "Backend & (Frontend app1 OR app2)" (& Another the backend is depended on).

 

Which means a frontend pool member would fail if he himself failed his healthchecks or both the local backend failed (now everything moves to the 'dr').

Similarly a backend pool member would fail if he himself failed (or "Another" he's depended on) or both local frontends failed (now everything moves to the 'dr').

However there is no "AND OR" compound healthcheck.

 

Another approach would have been creating four additional "objects":

  • two local backends
  • two remote backends
  • two local frontends
  • two remote backends.

 

Then have the regular "AND" healthcheck of "Frontend & localBackend" for the frontends and "Backend & localFrontends" (& "Another) for the backends.

However how can you check pool availability in a healthcheck? creating a VS for each doesn't work.

 

Another approach I thought of is per node in a pool "at least 1" healthcheck of the required resources, however this runs-over the pool one (so we get to the first approach's problem - in this case all are OR, can't have the Pool one AND the per-node OR).

 

 

    • Nitzan's avatar
      Nitzan
      Icon for Nimbostratus rankNimbostratus

      I have, and tried it - the idea was to use alias of IP/port of a VS (Virtual Server):"frontend local"/"frontend remote" and "backend local"/"backend remote" - that was the second approach explained.

      However it didn't work. if that should have worked I'll put some more effort in this.

       

      ---

       

      Update:

       

      I've further tested it, it is possible and this is the approach I'm going with (and was going with but for some reason it didn't work).

       

      That's the 'Option 2' above (creating additional four VS and pools: primary frontends, primary backends, secondary frontends and secondary backends) with their respective pools).

       

      Then: on the whole-backends (primary and secondary with priority groups) VS and pool add in that pool's per node healthcheck and add additional 'alias' healthcheck of the primary frontends.

      Similarly on the whole-frontends

      Similarly on the 'backup' location

       

       

      • Evgeny's avatar
        Evgeny
        Icon for Altocumulus rankAltocumulus

        Hi,

         

        Did you achieve what you were looking for?