(This may seem off topic for this list, but I'll try to bring it around
before the end of the message :)

We've been struggling with load balancers for a while now.  My requirements
are pretty simple. I have a handful of plain and mod_perl apache servers,
some of which are identical and a few of which are the only ones that can
perform unique functions.  We want a load balancer that:

* distributes requests to the server(s) that can handle them.  I need to
route to specific servers based on requested URL and perhaps headers and/or
protocol type (SSL).

* detects when a server is down and does not send request to that server.
This process should be as transparent to the user as possible.

* doesn't crash or lock up.

We started with mod_backhand, but it frequently seemed to get "confused",
failing to send requests to some hosts that were perfectly able to service
requests, and then locking up entirely when a back-end server became
overloaded.  I also found the diagnostics to be inaccurate and misleading
(or at least poorly documented), and the documentation in general to be
lacking.

Next, we tried "pound", which looked promising due to its simplicity.
Unfortunately, it too seems to freak out at least once a day, filling its
log with errors like this:

@400000003e1ef2461015ce34 warning: error read from 123.123.123.123: Success
@400000003e1ef24621631c8c warning: cannot read headers. got []
@400000003e1ef2462163d424 warning: error read from 123.123.123.123: Success
@400000003e1ef2462902488c warning: cannot read headers. got []
@400000003e1ef246290332ec warning: error read from 123.123.123.123: Success
@400000003e1ef246312225dc warning: cannot read headers. got []
@400000003e1ef2463122be34 warning: error read from 123.123.123.123: Success
@400000003e1ef24706782a84 warning: cannot read headers. got []
@400000003e1ef2470678bef4 warning: error read from 123.123.123.123: Success
@400000003e1ef247176094bc warning: cannot read headers. got []

We've been in contact with the author and have tried digging around in
and/or patching the source code with no improvement so far.

But meanwhile, we're still open to alternatives.  Surprisingly, there don't
seem to be many (software) options.  (A hardware load balancer is not an
option at his time, but I'll also take any suggestions in that area :)

This brings me to the mod_perl angle.  Has anyone ever tried using a slimmed
down mod_perl server as a load balancer?  Is this feasible?  Making routing
decisions is obviously the easy part when using mod_perl, but would those
mod_perl apache process just be too big and too slow to proxy requests
efficiently?  And how would they deal with detecting back-end servers that
have failed?

(We're running various versions of Linux on our servers, if that makes any
difference.)

So...suggestions?  How are other people handling load balancing?

-John


Reply via email to