Forum Discussion

clazba's avatar
clazba
Icon for Nimbostratus rankNimbostratus
Jan 17, 2013

Dynamic priority group based on reported server load

Hi,

 

I am trying to pull together a design proposal on how to achieve dynamic prioritization for pool members based on a numeric string value (load) retrieved from a healthcheck page on pool member.

 

The healthcheck page containing said value looks something like this:

 

Load: 80%

 

The higher the Load value the lower the priority of the pool member - the objective of the solution is to prioritize pool members with the lower load

 

In principle i believe this could be achieved by:

 

1. Retrieving the value for "Load" via a shell script run as a cron job (not sure a monitor would be needed here or be a good idea - suggestions welcome)

 

2. Manipulate these values for "Load" so that a high load value corresponds to a low priority group value - store these value away in a data array *somewhere* (again suggestions welcome)

 

3. Use the LocalLBPool.set_member_priority iControl call to programmatically alter the member priority group to reflect the current load of the pool member.

 

 

Questions I have in regards :

 

 

Does anyone have any views or suggestions on whether this is the best way to achive this or is able to offer any advice on how to otherwise best tackle this.

 

 

With regards to step 2 -- what's the best way to store the values retrieved by the shell script in step one so to make them accessible to icontrol?

 

 

Hope that's clear i can explain in more detail if needs be.

 

 

Thanks,

 

Claud

 

 

 

 

 

 

4 Replies

  • Hi Claud,

     

     

    Is there any chance the "health" could be retrieved via SNMP? If so, you could use the built in dynamic monitoring. If not, this is one of the major use cases we have for a new feature coming in 11.4. I'll email you with info and questions.

     

     

    Aaron
  • clazba's avatar
    clazba
    Icon for Nimbostratus rankNimbostratus
    Hey Aaron,

     

     

    Unfortunately SNMP is not an option because the Load value is actually from a DB cluster behind the pool member so there's no way for the BIGIP to get to it directly ... some ASP function periodically grabs the load value from the DB and dynamically builds a page containing that value so info must to be retrievable via HTTP.

     

     

    Yes, I thought this might be a common requirement - would be awesome to have this build into a feature, please send over anything you have on this.

     

     

    Cheers,

     

     

    Claud

     

  • Hi Aaron,

     

    I would also really be interested in that new feature of 11.4, would it be possible to provide some more information to me as well?

     

    We have some customers, who are asking for a more dynamic priority group functionality based on server performance.

     

    Thank you very much!

     

     

    Ciao Stefan :)

     

  • Hamish's avatar
    Hamish
    Icon for Cirrocumulus rankCirrocumulus
    I did a POC for this back in 2010 for Deutsche Bank. The iRules etc are available in codeshare (They're specific to LDAP though, but that's just to measure response times). The code to gather load was simply pushed to a DB (MySQL) and a separate job read all the DB info and adjusted the dynamic ratios on the pool members every minute or so (COuld be quicker but that was the POC timings I used).

     

     

    DB kindly allowed the code to be released (It was based around previous work I'd done and inherited GPL licenses) so can be freely shared.

     

     

    If you'd like any of the code, drop me a line. (I did start to tidy it up a bit, but it's a tad messy still). I have some articules I wrote for it too (About 6-7 part, I could upload those somewhere too if you like).

     

     

    H