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!