On Mon, 28 Sep 2009 15:04:35 -0700 (PDT), Chris Hostetter
<hossman_sq...@fucit.org> wrote:
> Background Information...
> 
> My company currently runs several "clusters" of application servers
behind 
> load balancers, which are each in turn sitting behind a "cluster" of
squid 
> machines configured as accelerators. each squid cluster is then sitting 
> behind a load balancer that is hit by our clients.
> 
> To elaborate: The hostname appAA resolves to a load balancer which
proxies 
> to appAA-squid1, appAA-squid2, appAA-squid2, etc...  Each of the 
> appAA-squidX machines is configured as a standalone accelerator (using 
> cache_peer ... parent no-query originserver) for appAA-backend. 
> appAA-backend resolves to a load balancer which proxies to
appAA-backend1, 
> appAA-backend2, appAA-backend3, etc...  Likewise for appBB, appCC, appDD,

> etc...
> 
> None of these squid instances know anything about each other.  in the
case 
> of appAA-squidX vs appBB-squidX this is a good thing, because the entire 
> point of isolating these apps is for QoS commitments, and ensuring that 
> heavy load or catastrophic failure on one app doesn't affect another app.
> 
> In the case of appAA-squidX vs appAA-squidY it definitely seems like
cache 
> peering would be advantageous here.
> 
> 
> The Problem(s)...
> 
> Our operations team is pretty adamant about software/configs deployed to 
> boxes in a clustering needing to be the same for every box in the
cluster. 
> The goal is understandable: they don't want to need custom install steps 
> for every individual machine.  So while my dev setup of a 5 machine squid

> cluster each with 4 distinct "cache_peer ... sibling" lines works great
so 
> far, i can't deploy a unique squid.conf for each machine in a cluster.
> 
> I could probably put a hack into our build system to check the current 
> hostname at installation time and remove any cache_peer lines refering to

> that hostname -- but before i jumped through those hoops i wanted to 
> sanity check that there wasn't an easier way to do this in squid.
> 
> is there any easy way to reuse the same cache_peer config options on 
> multiple instances, but keep squid smart enough that it doesn't bother 
> trying to peer with itself?
> 
> (I had a glimmer of an idea about using ACL rules for this, but didn't 
> work it through all the way because it seemed like at best that would 
> cause squid to deny requests from itself, not prevent it from attempting 
> the request in the first place)
> 
> I have a hard time imaging that i'm the first person to have this
problem, 
> but i couldn't find any obvious solutions in the mail archives.
> 
> 
> A slightly bigger problem is what to do when the cluster changes, either 
> because a machine is removed for maintenance issues or because a machine 
> is added due to because of increases in load.  In our current setup this 
> is a no-brainer: tell the load balancer when you add/remove a machine and

> everything just works -- none of the boxes know anything about each
other, 
> and they all run identical configs.
> 
> In order to setup sibling peering, it seems like i would need to 
> deploy/reload configs (with an updated list of cache_peer directives) to 
> every machine in the cluster anytime a new box is added or removed in 
> order for all of the siblings to know about each other.
> 
> Is there an easier way to coordinate the "discovery" of new siblings 
> automatically?
> 
> An ideal situation would be to use a DNS hostname in the cache_peer line 
> that resolves to multiple IPs and have squid re-resolve the hostname 
> periodically and update the list of peers based on *all* the addresses 
> associated with that name -- but from what i can tell squid will just 
> picking a single address (DNS Round-Robin style).
> 
> 
> Any advice or suggestions for managing peers like this would be 
> appreciated.

The DNS way would indeed be nice. It's not possible in current Squid
however, if anyone is able to sponsor some work it might be doable.

With Squid-2.7 you can use the 'include' directive to split the squid.conf
apart and contain the unique per-machine parts in a separate file to the
shared parts.

Amos

Reply via email to