Request Schedulers
Request Schedulers
Defining Schedulers
Enfold Proxy can filter incoming connections and use different schedulers. In order to make use of this functionality, first, you must define a scheduler in the eep.ini file:
[scheduler sched1] vh_host = localhost:8080 localhost:8081 scheduler = leastconns rules = HEADER1|regexp1 HEADER2|regexp2
The various options alter the scheduler's configuration as follows:
- vh_host
- Defines which back-ends to schedule to respond to incoming requests. For a typical Plone setup, these back-ends correspond to ZEO clients.
- scheduler
Defines your scheduling algorithm of choice. The different algorithm options are:
- leastconns
- Route each request to the back-end (from the pool of back-ends enumerated in the vh_host section) with the least number of connections.
- roundrobin
- Route the first request to the first back-end (enumerated in the vh_host section). Route the second request to the second back-end, route the third request to the third back-end, etc., then cycle back to the first back-end.
- random
- Route each request to a random back-end (enumerated in the vh_host section).
- rules
Defines a list of filtering rules. Enfold Proxy uses the specified scheduler only if all of the rules are matched. The Python code corresponding to this logic is as follows:
regexp1.match(environ[HEADER1]) and regexp2.match(environ[HEADER2]
HEADER1 and HEADER2 are keys in the environment dictionary logged to the proxy.log file at the debug log level.
Associating Schedulers with Hosts
After defining one or more schedulers, you can also define which schedulers to use for a particular host in the eep.ini file like so:
[host website] vh_host = localhost:8080 localhost:8081 ... schedulers = sched1 sched2
In this example, you must have previously defined schedulers sched1 and sched2 (per the previous section of this document).
If Enfold Proxy's log level is set to debug, it will log the request environment as well as additional scheduling information to the proxy.log file:
SCHEDULER 'sched1' DOES NOT MATCH on criteria 'REMOTE_ADDR|127.0.0.1' for '/content.html'
or:
SCHEDULER 'sched1' MATCH on criteria 'REMOTE_ADDR|127.0.0.1' for '/news.html'
Example
Here's an example configuration that uses ZEO clients localhost:8081 and localhost:8082 for requests originating from our local network 192.168.1.xx, and ZEO clients localhost:8083 for GoogleBot:
[scheduler local] vh_host = localhost:8081 localhost:8082 scheduler = leastconns rules = REMOTE_ADDR|^192.168.1. [scheduler googlebot] vh_host = localhost:8083 scheduler = leastconns rules = HTTP_USER_AGENT|Googlebot [host site] vh_host=localhost:8080 schedulers = local googlebot
Handling 500 Errors
A proxy definition can also specify some default actions to take when handling 500 errors from the Plone Server. You configure these directly in the eep.ini file. To add an option, just add one of these lines to your proxy definition in the eep.ini file and specify a value.
- scheduler_dead_500_ratio
- When this percentage of a back-end host's responses are 500 errors, Enfold Proxy marks the host as dead. The minumum value is 5 (%), the maximum is 50 (%), and the default is 20 (%).
- scheduler_dead_500_period
- How long to wait before zeroing out the scheduler_dead_500_ratio statistics. The default value is 600 (seconds).
- scheduler_dead_500_count
- When the back-end host returns this many 500 errors in a row, Enfold Proxy marks the host as dead. The default value is 5.