Forum Discussion

dlogsdonmd's avatar
dlogsdonmd
Icon for Nimbostratus rankNimbostratus
Dec 23, 2014

External Monitor for Pool

Hello,

 

I have a two-node pool containing servers that are mirrored search servers. These run the Coveo search service (CES Mirror Service). I'm trying to determine the appropriate monitor to effectively load balance these servers. I'm thinking perhaps we need an external monitor that would monitor this CES Mirror Service. The servers run some other Coveo processes as well, but I'm not sure (yet) which would be best to monitor.

 

So, my question, how do I write an external monitor? Alternatively, if a built-in monitor would work, I'd like to hear which I should use.

 

I'm an IT Ops person, not programmer/developer, so I don't understand scripting.

 

Thanks in advance. Happy Holidays!

 

Diane

 

8 Replies

  • Hello,

    I thought I'd post what we finally sorted out was a solution.

    Send String:

    GET /CoveoSearchService?versions HTTP/1.1\r\nHost:search.acc.org\r\nConnection: Close\r\n\r\n\

    Return String:

    7.0

    Thanks much for the help, your suggestion almost got us there.

    Diane

  • Gotcha. do you have access to use PuTTY (or another SSH client) to connect to the F5 device and get into the CLI? from there, you could try the curl command to see what is coming back.

     

  • Hi Michael,

     

    Thanks for the quick reply. I can successfully access the page using the links in my original request, which includes the server name). We're over my head now with understanding some of what you're suggesting. I read the post you linked to, but I got lost. Since I'm an Ops person and not familiar with code, it's like trying to understand a foreign language, I catch a couple words here and there at most.

     

    I copied what you included above (curl -v http://RDSRCH5:52810/CoveoSearchService?versions) but the monitor still failed.

     

    Thanks for anything else you can suggest.

     

    Diane

     

  • Regarding the Host, that's useful if your web server is expecting a specific hostname so it knows how which web application to route the traffic to (e.g. IIS using host header bindings to differentiate between web applications). if you can directly access the page using the computer name or ip, then the host header isn't necessary (unless you specify HTTP 1.1, which requires a host header). The monitor should check the pool on the port specified on the pool member, so that shouldn't be the issue either. If you try to do

    curl -v http://RDSRCH5:52810/CoveoSearchService?versions
    , what do you get?

    This post may provide some more information as well.

  • Hi Michael,

     

    Thanks for your reply. Yes, RDSRCH5 and RDSRCH6 are both in a pool. I tried creating the HTTP monitor using both options you included and assigned them (separately) to the pool, but both versions failed and brought the pool members down.

     

    Given this seems to be a port specific monitor, perhaps that needs to be included somewhere? Or you mentioned maybe needing to change the host value to something legitimate, would that be our domain that would go in there?

     

    Thanks for any further support you can provide.

     

    Diane

     

  • Are those hosts (rdsrch5 and rdsrch6 on port 52810) both in a pool? Since monitors can be set on the pool level, you could create one monitor and assign it to the pool, and it would monitor both hosts. Your monitor should be and HTTP monitor, with the send string something like

    GET /CoveoSearchService?versions\r\nHTTP/1.1\r\nHost:example.com\r\nConnection: Close\r\n\r\n
    and the receive string
    7.0
    . You may need to modify the send string host value to something legitimate (or else use a simpler non HTTP 1.1 string like this
    GET /CoveoSearchService?versions\r\nConnection: Close\r\n\r\n
    )

  • Happy New Year....

    I'm following up on this request since we were closed for the holidays. I'm told that we can do an HTTP monitor...but I'm unclear how to do it. Below are two URLs that should monitor the health of the site/service, but I don't know how to write an HTTP rule that queries two different server URLs.

    http://RDSRCH5:52810/CoveoSearchService?versions
    http://RDSRCH6:52810/CoveoSearchService?versions
    

    The return value (receive string?) should be "7.0" without the quotes.

    Thanks in advance for the assistance!

    Diane

  • Hamish's avatar
    Hamish
    Icon for Cirrocumulus rankCirrocumulus

    How?

     

    By writing a script. Of some sort. The language is up to you. As long as it's available on the BigIP Host. Generally that means stuff like bash, or perl. Although in theory you could write a full app in C, compile it and upload (It's an x86 RH Linux Host after all). If you do, I'd recommend statically binding it though.

     

    There's a spec in the manuals for the returns the external monitor is expected to make to tell BigIP whether the service is up or down too.

     

    There's also an example monitor in there. On the host you should find it at /config/monitors/sample_monitor and it's written in bash.

     

    How complex is of course up to you or your clients. Once your small app is written (Which could be as simple as altering the sample) you upload it via the GUI (Or tmsh, or iControl) and assign it to your pool...

     

    Now... Will a built-in work? I'm sorry to say I have no idea about the CES mirror service... if it's a web front end and there's a simple URL to hit to determine availability, then yeah. Should do. Worst case, you could use a simple tcp monitor... I've seen it done, and sometimes it's all you need.

     

    H