Balanceamento de Apache por IP de origem

2

Estou usando o balanceador de proxy do Apache para equilibrar um subdomínio (por exemplo, subdomain.domain.com) para um aplicativo localizado em dois servidores. Aqui uma extração do meu arquivo de configuração do Apache:

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

<Proxy balancer://cluster1>
    BalancerMember http://server1:28081 route=w1
    BalancerMember http://server2:28082 route=w2
</Proxy>

ProxyPass /path balancer://cluster1/path
ProxyPassReverse /path balancer://cluster1/path

A minha pergunta é, se é possível decidir com o endereço IP de origem que BalancerMember deve ser usado para o pedido? Por exemplo Solicita de 1.2.3.4 para o Membro 1 ?

    
por High6 11.11.2011 / 16:00

2 respostas

5

Não. O Módulo de Balanceamento de Proxy passará as solicitações para os membros com base apenas em dois fatores:

  1. Se a solicitação tiver um cookie fixo especificando um membro, a solicitação será encaminhada para esse membro (se estiver disponível). Parece que você não tem isso configurado no entanto.
  2. Caso contrário, o pedido será encaminhado de acordo com o algoritmo de distribuição. Existem três algoritmos configuráveis, eles são Simple Round Robin, Least Traffic (bytes) e Least Requests (todos têm ponderação disponível).

Você pode ativar sessões fixas por cookie. A maneira como você deseja fazer isso pode depender do seu back-end, a menos que você queira que o Apache adicione outro cookie, independentemente do que o backend está fazendo.

Notas laterais: HAProxy , Squid e Nginx são muito bons em balanceamento de carga e caching. O módulo proxy do Apache geralmente é bom o suficiente para cargas leves e médias, e parece que você já está familiarizado com isso. A desvantagem do Apache é que é como um canivete suíço: faz tudo razoavelmente bem, não faz nada excepcionalmente bem, e é um pouco volumoso. Usar um sistema de redundância de endereço como CARP permitirá que uma caixa Linux ou BSD se torne também um Balancer de Proxy Altamente Disponível.

    
por 11.11.2011 / 16:21
2

Você pode tentar a seguinte configuração:

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

<Proxy balancer://cluster1>
    BalancerMember http://server1:28081 route=w1
</Proxy>

<Proxy balancer://cluster2>
    BalancerMember http://server2:28082 route=w2
</Proxy>

RewriteEngine On
# redirect clients from 1.2.3.4 to the first member
RewriteCond %{REMOTE_ADDR}  !^1\.2\.3\.4$
RewriteRule ^/path(.*)$ balancer://cluster1/path$1  [P,L]


#  This rule will take care of the rest clients
ProxyPass /path balancer://cluster2/path
ProxyPassReverse /path balancer://cluster2/path
    
por 18.04.2012 / 14:06