Dynamically add/remove mongrel on EC2 from Apache balancer

Hi,

I’d like to scale out by adding more EC2 mongrel instances, and scale
down by removing EC2 mongrel instances.

Is there a way to dynamically add/remove mongrel instances from Apache
mod_proxy_balancer. It seems that I’d have to manually change the
configuration file and restart apache whenever I add/remove a new
mongrel.

Yaxm

Is there a way to dynamically add/remove mongrel instances from Apache
mod_proxy_balancer. It seems that I’d have to manually change the
configuration file and restart apache whenever I add/remove a new
mongrel.

Well, you could write a script to edit the config for you and send
apache a usr1 signal ( “kill -usr1 [pid]” ) to cause it to reload the
updated config, then trigger the script whenever a new EC2 instance is
started or stopped.

Another approach could be to proxy everything to swiftiply (
http://swiftiply.swiftcore.org/ ), and have each new EC2 instances
mongrels register/deregister with the swiftiply proxy.

Yet another option would be to use switchpipe ( http://switchpipe.org/
) to manage things.

I haven’t done any of these, of course, so I’m basically talking
through my hat, but they all sound plausible!

Good luck

David

On Tue, 2008-02-19 at 01:41 +0100, Yaxm Y. wrote:

Is there a way to dynamically add/remove mongrel instances from Apache
mod_proxy_balancer. It seems that I’d have to manually change the
configuration file and restart apache whenever I add/remove a new
mongrel.

mod_proxy_balancer comes with the “balancer manager” with which can
toggle a member of the cluster offline and back online:

http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html

You could script that interface and then call it from Capistrano. I
Googled around but couldn’t find an existing library for this… kind of
surprising. Maybe most folks are just going the “rewriting the config
file and send USR1” route.

Yours,

Tom

On Feb 19, 10:05 am, digitalronin [email protected] wrote:

Is there a way to dynamically add/remove mongrel instances from Apache
mod_proxy_balancer. It seems that I’d have to manually change the
configuration file and restart apache whenever I add/remove a new
mongrel.

[snip]

Yet another option would be to use switchpipe (http://switchpipe.org/
) to manage things.

Yep, that’s exactly what SwitchPipe does. Dynamically launches,
manages, and kills backend processes that speak HTTP. Even better than
that, it’ll kill Mongrels that aren’t in use for a certain period of
time… so rather than having, say, 3 Mongrels running ALL the time on
a quiet app, it’ll scale it back to zero Mongrels after X seconds of
inactivity if you like. Alternatively you can make it keep 1 Mongrel
up to pick up requests before scaling up to meet demand. Whatever you
want to do, it does it.

Cheers,
Peter C.
http://www.petercooper.co.uk/

While dorking around, I found you can disable/enable mongrel instances
in apache via curl. I added these two functions to my mongrel init
file:

enable_mongrel ()
{
curl -s -o /dev/null
http://127.0.0.1:8888/balancer-manager\?b=mongrel_cluster\&w=http://127.0.0.1:$1\&dw\=ENABLE
}

disable_mongrel ()
{
curl -s -o /dev/null
http://127.0.0.1:8888/balancer-manager\?b=mongrel_cluster\&w=http://127.0.0.1:$1\&dw\=DISABLE
}

in the case statement:

enable)
  enable_mongrel $2
  RETVAL=$?

;;
disable)
disable_mongrel $2
RETVAL=$?
;;

They accept the port number as an option. I use this as part of my
monit system to keep things in check. I have a very high traffic site
and I found proxy_balancer didn’t react quick enough.

usage:

service monit disable 8081
service monit enable 8081