Aqui apresentarei uma forma barata, simples e fácil de implementar replicação e balanceamento de carga de servidores web, mas que pode ser usada para outros tipos de serviços, tais como SMTP, FTP, etc.
Esse artigo tem o objetivo de ensinar ao leitor como implantar
um sistema de balanceamento de carga e replicação de servidores
web utilizando os softwares mais comuns no mundo Linux,
como o servidor web Apache e o servidor DNS Bind.
Esse artigo abordará o exemplo específico de replicação e
balanceamento de servidores web. Mas nada impede a implantação
desse sistema para outros tipos de serviços. É sugerido que o leitor
tenha um conhecimento básico de DNS (preferencialmente BIND).
O problema
Suponhamos que eu possua um servidor web rodando em uma máquina
relativamente boa, mas o número de requisições em meu servidor
aumentam muito mês à mês, pois minha empresa disponibilizou um
sistema via web para que os clientes façam pedidos, consultem e
tudo mais.
Minha empresa está crescendo assim como o número de acessos ao meu
servidor e sua importância de estar sempre on-line. Mas o problema é
que meu servidor não está aguentando mais a carga de requisições e
muitas vezes preciso fazer manutenção no mesmo, deixando todo
sistema "fora do ar".
Além disso, hoje na minha empresa "exemplo" a importância do meu
serviço estar sempre no ar é muito maior. Porque eu estou perdendo
dinheiro e credibilidade cada vez que o serviço está fora.
Além de tudo isso, não estou afim de jogar fora o meu servidor e
comprar um ainda mais caro. Quero poder reutilizar o que eu possuo e
comprar outro igual, porque sai mais barato pra mim. E quando um
servidor sair fora do ar, quero que automaticamente o outro entre em
ação e aceite todas as requisições automaticamente!
E pior de tudo... não quero pagar caro e nem gastar muito tempo para
implantação de um sistema que me permita tudo isso!
[4] Comentário enviado por diego.ribas em 15/05/2005 - 22:49h
No caso da replicação de servidores de e-mail é um pouco diferente. Na maioria das vezes a replicação ocorre criando um servidor master e seus slaves que são apenas backups do master. Para isso se define prioridades de entrega do e-mail entre os servidores no DNS. Algo como:
IN MX 10 mail
IN MX 20 mail2
IN MX 30 mail3
... assim por diante
Note ainda que precisa configurar adequadamente ainda teu servidor de e-mail para funcionar corretamente isso.
Mas não sei se seria exatemente esse tipo de replicação que te interessa...
Outra replicação utilizada é do servidor SMTP que funciona da mesma forma que a do servidor www.
[5] Comentário enviado por diego.ribas em 15/05/2005 - 22:51h
A respeito da replicação:
A replicação ocorre quando eu possuo uma ou mais cópias do objeto replicado. No caso dos servidores web, eu posso ter quantas cópias eu necessitar. No exemplo do artigo, ocorreu a replicação do servidor web(1.2.3.1) onde sua réplica é o 1.2.3.2 . Então é lógico que ocorreu replicação não concordam?
[6] Comentário enviado por o_lalertom em 16/05/2005 - 08:59h
Parabens pelo artigo,
E quando li seu artigo voce falou de possiveis problemas de atualizacao dos arquivos do site.
Para solucionar este tipo de problema eu uso o 'rsync' um sincronizador de arquivos remoto, num sei se voce ja o conhece, ele e muito leve e facil de configurar. O tipo de sincronicao que o 'rsync' trabalha e de tempo real, e ele atualiza por pacotes que agiliza muito a sincronizacao.
Fica ai uma dica a mais, se alguem estiver enterecado e so acessar o site:
[10] Comentário enviado por ecr em 28/05/2005 - 11:56h
Cara ta show o seu artigo, é muito útil para comunidade.
Esclarece uma coisa, tem como eu configurar no dns para que ele acesse o servidor secundário de www somente se o primário não estiver ativo? Do jeito que foi implementado pelo que eu entendi ele divide o acesso entre os servidores, mas eu tenho a necessidade de acessar o servidor 2 apenas se o servidor 1 não estiver ativo.
[11] Comentário enviado por diego.ribas em 29/05/2005 - 20:26h
Valeu erc!
Mas com DNS não conheço nenhuma maneira de fazer isso que tu quer. E como foi implementado no artigo isso não se torna possível como bem lembraste. Algumas alternativas que me vem agora a cabeça é deixar um script rodando e verificar se teu primário tá ativo a cada minuto digamos. Se ele não estiver vc lanca o teu servidor web na maquina secundaria ou entao insere uma linha no teu servidor dns dizendo q agora quem responde por www é a outra máquina. Entendeu?
Espero ter te dado uma luz!
feito!
[13] Comentário enviado por removido em 25/06/2007 - 21:47h
Tá todo mundo dizendo que o artigo está isso e aquilo, está mesmo, mas porque a nota dele é 8. Falta de coerência de todos.
Parabéns diego, seu artigo está 10, pelo menos pra mim.
[15] Comentário enviado por paulogur em 27/10/2010 - 15:50h
Meus 2¢
Sei que o comment é antigo, mas para aqueles que pararem aqui como eu, até onde eu sei, o problema do erc até poderia ser resolvido com o iptables sem o uso do dns ;) ao invés de trocar a entrada no DNS, trocaria no iptables redirecionando o trafego direcionado a porta 80.
Para fazer o load balance com iptables, se houver nat, uma estratégia seria a seguinte:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT -p tcp --dport 80 --to 1.2.3.1-1.2.3.4
[16] Comentário enviado por bruno_vidal_87 em 21/10/2011 - 19:12h
Legal mesmo isso é muito útil, mas assim o dns em round-robin ele apenas faria controle das conexões correto ? tipo, ele balancearia as solicitações de conexões e q tal utilizar um sistema inteligente de balanceamento de carga utilizando agentees ? esse sim balancearia a carga em utilização e tráfego, esse monitor deveria monitorar mem.ram , disco rigido e utilização de processamento.
To implementando isso, vamos ver ao término como se comporta ! E na frente destes servidores um servidor de pool e secundario do mesmo.. em caso de problemas.
Abraços a todos ! Caso houver alguma sugestão ! b.8.7@live.com <msn
[17] Comentário enviado por marlluslustosa em 23/06/2013 - 19:21h
Sei que o tópico é antigo, porém, acho que qualquer comentário vale.
Dúvida do ecr:
Esclarece uma coisa, tem como eu configurar no dns para que ele acesse o servidor secundário de www somente se o primário não estiver ativo? Do jeito que foi implementado pelo que eu entendi ele divide o acesso entre os servidores, mas eu tenho a necessidade de acessar o servidor 2 apenas se o servidor 1 não estiver ativo.
Você pode fazer isso utilizando HeartBeat (faz monitoramento de interfaces de rede reais e criação de uma única virtual) + mon (monitoramento de processos) + DRBD (ou rsync, para realizar a replicação de dados entre as máquinas).
Você montando um cenário com estes programas poderá colocar no registro A do DNS o nome do servidor para a interface virtual criada pelo HeartBeat, e este cuida do trabalho de procurar alguma máquina funcionando.
Agora, em relação ao tópico criado, na minha opinião, esse cenário só seria perfeito se eu tivesse um um webserver que não fosse atualizado constantemente (atualizações em banco de dados, etc.). E utilizar NFS para isso não é distribuir tráfego, pois, na verdade você estaria só descentralizando o acesso nas máquinas. A escrita seria em servidor NFS central.
Na minha opinião, seria interessante utilizar bancos de dados de forma distribuída. O que não é uma tarefa trivial hoje em dia.
OBS: Estou falando no objetivo de um cenário 100% funcional sem perca de dados.