Forum Discussion

JamesR's avatar
JamesR
Icon for Nimbostratus rankNimbostratus
May 06, 2020

HTTP monitor which ignores timeouts

Hi all,

 

Might be approaching this in the wrong way but I want a way for the application owners to trigger a pool failure by placing a text file on a web server. This is so they are in control without having access to the appliances themselves. I was planning to have a HTTP Monitor check for a file on a web server such as /pool1down.txt that the application owners can create, if the file exists then the monitor fails and marks the pool as down.

 

That works, however, if for any reason the web server is down, the monitor will be marked as down also and effectively this web server becomes a SPOF.

 

What is the best way to implement such a solution?

 

Cheers

8 Replies

  • Custom Health monitor is always best option to check send/receive string. Ask application team to create one webpage and monitor that page via F5 HTTP health monitor. Its call ECV (Extended Content Verification) - some info is sent to the server and some info is expected to receive.

     

    https://support.f5.com/csp/article/K2167

     

    Below Screen will help you to understand the setting.

     

    • JamesR's avatar
      JamesR
      Icon for Nimbostratus rankNimbostratus

      Hi  , thanks for the reply.

      I was hoping to have this centralised that we have a single monitor that is used for holding the service down rather than doing it node-by-node. In the solution we have an 'admin' server that I was hoping to use for this but I'd only want the monitor to be marked as down if the HTTP request returned a 200 and not if it timed out or other things occurred.

      I was working on something like this;

      ltm monitor http /Common/ServiceMonitor {
          defaults-from /Common/http
          description ServiceMonitor
          destination admin.node.ip:80
          send "GET /srvdown.txt HTTP/1.1\r\nHost: bigip.health.check\r\nConnection: Close\r\n\r\n"
          recv "HTTP/1.1 200"
          interval 30
          timeout 60
          reverse enabled
      }

      Doesn't look like this is possible though - is that your understanding too?

      Cheers

  • I can't really see this issue resolved with regular monitor settings only. My guess is that somebody adept with external heathmonitors could write a bash script or similar, to resolve this.

    I would implement a workaround in case the management server fails. It is likely not very efficient, but I think it'll get the job done.

    If no management server is available, you send the traffic to a backup pool that doesn't include the manual maintenance monitor. The consequence is that the application team cannot bring the server pool down unless the management server is online.

    You could create three pools of servers: two with your webservers (one with all monitors, and one without the maintenance monitor), and one for your management server.

    1. standard_webserver_pool.

    -- monitors: both manual_maintenance_monitor, and server_health_monitor

    2. bad_webserver_pool

    -- monitor: server_health_monitor

    3. management_server_pool

    -- monitor: server_health_monitor

    Below ought to be correct irule syntax, but I haven't tested it.

    when CLIENT_ACCEPTED {
      if { [active_members management_server_pool] < 1 } {
            pool bad_webserver_pool
        } else {
            pool standard_webserver_pool
        }
    }

    The else part is essentially there for read-ability. If that is not something you care about and the standard_webserver_pool has been defined in the vserver configuration you can make do with

    when CLIENT_ACCEPTED {
      if { [active_members management_server_pool] < 1 } { pool bad_webserver_pool }
    }
     

    Can be done in various events. source, clouddocs: active_members

  • Sorry I couldn't get your complete requirement.

     

    You have a pool and have some members in it. But you do not want to monitor all the members but to monitor a a specific pool member (admin.node.ip as you say). If this server is not responding to your health check, you want this is to be Up ? I'm confused.

    • JamesR's avatar
      JamesR
      Icon for Nimbostratus rankNimbostratus

      Hi ,

       

      > You have a pool and have some members in it.

      • Correct

       

      > But you do not want to monitor all the members but to monitor a a specific pool member (admin.node.ip as you say).

      • Yes

       

      > If this server is not responding to your health check, you want this is to be Up ?

      • If the server isn't responding or giving back a known good state I want the pool to be marked as 'Up'.

       

      > I'm confused.

      • Hopefully that's fixed! But maybe not! What I'm after is a single centralised place to put a file that takes a pool out of service but if that single centralised place goes offline for some reason then the pool isn't taken out of service for that reason - only on giving a known response. A timeout or other network fault shouldn't effect the pool health. I do realise this isn't most probably possible without a custom monitor.

       

      Cheers