Forum Discussion

pablo_juarez's avatar
pablo_juarez
Icon for Altocumulus rankAltocumulus
Sep 09, 2025
Solved

How to configure pool to go down if multiple members are down

Hello community, I have a requirement related to pool health and its impact on BGP announcements. By default, a pool in BIG-IP is considered up as long as at least one member is still healthy. Howev...
  • pablo_juarez's avatar
    Sep 10, 2025

    Priority group activation: if at least one node is up, the pool will appear up, and therefore the virtual server will also show as green.
    iRule: this would work to reject traffic, but it’s not what I need.
    Individual health checks: this is how it’s currently working. It’s fine for a small pool, but I’m looking for something more scalable.

    Just to recap, the goal is to mark the virtual server as down so that this IP is not advertised via BGP. This way, traffic will be routed to another site where the VS has more nodes available. The issue was detected when a pool had fewer than 6 nodes available, since it was unable to handle the amount of DNS requests it was receiving.

    It seems I’ve managed to get it working with this solution, something like Injeyan_Kostas suggested:
    I created a new pool with an external monitor that checks the status of the original pool. On the VS, I applied this new pool and it appears to work correctly.

    It doesn’t seem like the most optimal solution, but at least if there are many nodes or they change regularly, not many modifications are required.

    Any other suggestions would be welcome.

     

    This is .sh file:

    #!/bin/bash
    #
    # External monitor genérico para marcar DOWN un pool si tiene menos de N miembros UP
    #

    # Variables de entorno pasadas desde el monitor
    #Ej.-
    #ltm monitor external monitor_externo_min_pool_member {
    #    defaults-from external
    #    description "Comprobacion de miembros arriba en un pool"
    #    interval 5
    #    run /Common/monitor_pool_min_members
    #    time-until-up 0
    #    timeout 16
    #    user-defined MIN_UP 3
    #    user-defined POOL Pool_A10_80
    #}


    POOL=$POOL
    MIN_UP=$MIN_UP

    # Obtenemos número de miembros activos del pool
    UP=$(tmsh show ltm pool $POOL | grep "Current Active Members" | awk '{print $5}')

    # Debug opcional en /var/log/ltm
    #logger -p local0.info "Monitor $POOL: $UP miembros UP, mínimo requerido $MIN_UP"

    if [ "$UP" -lt "$MIN_UP" ]; then
      # No mandamos nada a stdout -> el monitor marcará DOWN
      exit 1
    else
      # Mandamos algo (ej: "UP") -> el monitor marcará UP
      echo "UP"
      exit 0
    fi

     

    This is original pool:

    ltm pool Pool_A10_80 {
        description "Pool que son 4 VS en A10 2-pruebasPart con iRUle 200 OK"
        members {
            N1:http {
                address 10.10.100.1
                session monitor-enabled
                state up
            }
            N2:http {
                address 10.10.100.2
                session monitor-enabled
                state up
            }
            N3:http {
                address 10.10.100.3
                session monitor-enabled
                state up
            }
            N4:http {
                address 10.10.100.4
                session monitor-enabled
                state up
            }
        }
        monitor tcp
    }

     

    This is the new pool assigned to VS:

    ltm pool Pool_min_members {
        description "Pool de chequeo de numero de miembros disponibles"
        members {
            N1:http {
                address 10.10.100.1
                session monitor-enabled
                state down
            }
            N2:http {
                address 10.10.100.2
                session monitor-enabled
                state down
            }
            N3:http {
                address 10.10.100.3
                session monitor-enabled
                state down
            }
            N4:http {
                address 10.10.100.4
                session monitor-enabled
                state down
            }
        }
        monitor monitor_externo_min_pool_member
    }