backup do servidor do balanceador de carga do apache

3

Eu quero usar o balanceador de carga do apache para que um servidor tomcat seja primário e o servidor secundário esteja online somente se o primeiro servidor estiver inativo. como isso pode ser feito?

    
por user12145 30.01.2011 / 19:48

2 respostas

8

Se você só vai fazer o balanceamento de carga, eu recomendaria algo mais leve que o Apache, como o HAproxy , mas vamos suponha que você vai com o apache.

Existem vários métodos para balanceamento de carga, então você deve gastar um pouco de tempo para se familiarizar com eles. Existe um excelente artigo disponível por Willy Tarreau chamado Tornando os aplicativos escaláveis com o balanceamento de carga que vale a pena ler.

Existem algumas ferramentas para tornar o Apache um balanceador de carga, e talvez o mais fácil (que eu saiba) seja usando mod_proxy_balancer . O único problema com isso é que ele não parece fazer balanceamento de carga de failover (que é o que você deseja: alta disponibilidade, em vez de balanceamento de carga real).

Como você está usando o Tomcat, por que não usar mod_jk , os conectores do tomcat do Apache?

Suponha por um segundo que estamos em um sistema baseado no Redhat (estou usando o CentOS 5.5) que está configurado para compilar coisas (por exemplo, o gcc e as bibliotecas apropriadas (isso não é uma boa idéia Este não é o momento ou lugar para discutir embalagem RPM , embora)

 yum install httpd httpd-devel

Isto irá instalar o Apache junto com o material de desenvolvimento para fazer módulos, e o diretório de configuração será / etc / httpd /

Os conectores atuais do Tomcat (20110130) são 1.2.31 (mas você pode verificar o mais recente aqui ) , então baixe-os:

 wget http://mirror.cc.columbia.edu/pub/software/apache//tomcat/tomcat-connectors/jk/source/jk-1.2.31/tomcat-connectors-1.2.31-src.tar.gz

Extraia, compile e instale:

 tar zxvf tomcat-connectors-1.2.31-src.tar.gz 
 cd tomcat-connectors-1.2.31-src/native
 ./configure --with-apxs=/usr/sbin/apxs 
 make 
 sudo make install 

Verifique se o mod_jk.so foi instalado:

 ls -al /etc/httpd/modules/mod_jk.so 
 -rwxr-xr-x 1 root root 903072 Jan 30 15:21 /etc/httpd/modules/mod_jk.so

Agora, vamos configurá-lo.

Edite o /etc/httpd/conf.d/jk.conf:

 # This actually tells apache to load the module we built
 LoadModule jk_module modules/mod_jk.so 

 # This file holds the instructions for which servers the proxy will be talking to
 JKWorkersFile /etc/httpd/conf.d/workers.properties

 # This is (obviously) the logfile that it will write to. Change to whatever you want
 JKLogFile /var/log/httpd/mod_jk.log 

 # Simplistically, we'll set up a virtualhost that listens on all IPs on port 80. 
 # HTTPS is left as an exercise for the reader
 NameVirtualHost *:80
 <VirtualHost *:80>
     ServerAdmin [email protected] 
     ServerName thedomainnameoftheproxy.com

     # The following line says "send anything to the JK Worker named MyProxyCluster"
     JKMount /* MyProxyCluster

 </VirtualHost>
 #EOF

Tudo bem, isso diz ao Apache que queremos usar o mod_jk, que queremos usar um arquivo chamado /etc/httpd/conf.d/workers.properties e que temos um virtualhost onde tudo é enviado para os trabalhadores. Ótimo, agora vamos configurar os trabalhadores. Edite /etc/httpd/conf.d/workers.properties:

 # We're telling mod_jk which workers it needs to look for. We're going to define 
 # a total of 3 workers: MyProxyCluster (the load balancer job), worker1, and worker2 
 # (the two backend servers) 
 worker.list=MyProxyCluster

 worker.worker1.port=8009
 worker.worker1.host=hostname.or.ip.of.1st.tomcat.server

 # ajp13 means Apache JServ Protocol version 1.3, and is apparently universal
 worker.worker1.type=ajp13

 worker.worker1.lbfactor=1

 # When worker1 dies, we're going to want it to go to worker2
 worker.worker1.redirect=worker2

 ### End of worker1 config

 # repeat the same things for worker2
 worker.worker2.port=8009
 worker.worker2.host=hostname.of.ip.of.2nd.tomcat.server
 worker.worker2.type=ajp13
 worker.worker2.lbfactor=1
 # Disable worker2 except when it fails over
 worker.worker2.activation=disabled

 # make the actual load balancer worker that we referenced in the beginning
 worker.MyProxyCluster.type=lb
 worker.MyProxyCluster.balance_workers=worker1,worker2
 # EOF

Agora, temos dois trabalhadores reais e um balanceador de carga virtual para eles. Agora você pode iniciar o Apache:

 service httpd start 

Teste-o, navegando até a máquina, e ele deve ir para o primeiro servidor tomcat. Você deve ser capaz de verificar isso observando /var/log/httpd/mod_jk.log (ou onde quer que você tenha apontado).

Boa sorte!

    
por 30.01.2011 / 21:48
2

Aqui está uma solução muito mais simples usando AJP em vez de JK:

<Proxy balancer://cluster>
    BalancerMember ajp://127.0.0.1:8009 route=jvm1 status=-D
    BalancerMember ajp://127.0.0.2:8009 route=jvm2 status=+H
</Proxy>

ProxyPass /app balancer://cluster/app

Existem mais algumas propriedades de configuração que você pode definir, como fatores de carga diferencial, se você tiver mais back-ends, diferentes algoritmos de balanceamento, conjuntos de balanceadores, etc: consulte a documentação do mod_proxy do Apache, mas o que foi explicado acima. -D significa 'não desativado' e + H significa 'hot standby'. E você também pode trocá-los em tempo de execução.

Você só precisa executar dois Tomcats, com conectores AJP em execução na porta 8009 com endereço="127.0.0.1", endereço="127.0.0.2" etc., quantos forem necessários, com <Engine jvmRoute="jvm1"> e <Engine jvmRoute="jvm2"> respectivamente. Observe a economia de portas: você também pode fazer o mesmo com a porta de desligamento. Jogue fora tudo na configuração do Tomcat, referindo-se a JK, mod_jk, etc. Você também não precisa desses assustadores arquivos workers.properties . Você também pode descartar todos os conectores HTTP e HTTPS e encerrar o SSL de entrada no Apache HTTPD, o que proporciona um controle muito mais detalhado sobre o SSL.

    
por 03.07.2012 / 08:57