On Wed, Jun 19, 2013 at 09:27:54AM -0300, Marcus Kool wrote: > > > On 06/19/2013 09:02 AM, T Ls wrote: > >Hi, > > > >we are using squid (S_{1,2,3}) to connect our sites to the internet via > >parent proxies (P_{1,2}), there is no direct line to the internet. The > >constellation looks something like this: > > (P_1) (P_2) > > | / \ > > /-----------------\ > > | | W A N | | | > > \-----------------/ > > | / \ > > (S_1) (S_2) (S_3) > > | | | > > (N_1) (N_2) (N_3) > > > >the mapping S_i <=> P_j is fix and I can't change it. In S_1 config, I > >have the line: > > > >cache_peer P_1 parent 80 0 no-query default > > > >If one parent fails (e.g. P_1), we force all clients in N_1 to use S_2 (by > >AD policy). This procedure works, but there are two major drawbacks: > >a) we have to make this switching manually (and also the swich back, after > >P_1 recovers) > >b) S_2 has to handle N_1+N_2 traffic > > > >What I want to do is: > >a) switch to alternative parents automatically > >b) in case of P_1-failure: distribute N_1-traffic over S_2 and S_3 > >c) in normal operation send all requests to P_1 and no requests to S_2 or > >S_3 > > wpad does a good job. > I am not sure how it balances but the failover works fine. > > Marcus wpac/pac has no elegant load balancing, but I found an example of load balancing based on the IP address of the web client: http://www.proxypacfiles.com/proxypac/index.php?option=com_content&view=article&id=63&Itemid=104 So, what you can do is divide the client IP address range in 3 segments and via the PAC file make a decision which proxy (S_i) will be the primary proxy; the browser wil only use the secondary proxy when the first one is not available. Using PAC makes failover and balancing automatic as you desired. Marcus > >Because of c), I can't declare S_{2,3} as sibling (as far as I understand > >the function of a sibling and the peer selection methodes), so I changed > >the S_1 config to: > >cache_peer P_1 parent 80 0 no-query > >cache_peer S_2 parent 80 0 no-query > >cache_peer S_3 parent 80 0 no-query > > > >I think, this fits to a) and b) (because a client request is send to > >FIRST_UP_PARENT), but this will not fit to c) perfectly (may be S_2 is > >FIRST_UP_PARENT, but it still has to fetch the data from > >P_2, so the data for N_1 passes the line of S_2 two times and this should > >not happen). > > > >Can basetime=x at the P_1-line make sure, that P_1 is always choosen in > >normal operation? > > > >Any other ideas? > > > > > >Thanks in advance > >Thomas >