Páginas

terça-feira, 31 de março de 2015

Fail Over do Apache com o HeartBeat


Nesta postagem será abordada uma solução para realizar um Fail Over do Apache para atender a proposta de alta disponibilidade do JBoss com a utilização do Apache e Mod Cluster como interface de requisições Web em um ambiente de produção.



Na arquitetura que montamos anteriormente no Blog vimos que foi possível realizar um cluster do JBoss e garantir uma alta disponibilidade e Fail Over através do Mod Cluster do Apache, porém nesta arquitetura temos apenas uma instância do Apache para realizar a alta disponibilidade do JBoss. E se essa instância do Apache ficar fora do ar ? Como iremos acessar o JBoss ?



Pois é, se uma situação como essa ocorrer, ficaremos vulneráveis quanto a alta disponibilidade do Apache e não conseguiremos garantir os 99,99% de disponibilidade da aplicação.

Atualmente em ambientes virtualizados pode ocorrer de VM's onde se encontram o Apache ficar fora do Ar e prejudicar todo o ambiente JBoss, para isso, irei apresentar uma solução baseada em Open Source que poderá ajudar a resolver uma situação como essa.

A solução será o HeartBeat, ele é capaz de monitorar os serviços em questão e realizar um "chaveamento" de uma máquina para outra sem prejudicar  serviço. Lembrando que o HeartBeat não faz a comutação entre máquinas se apenas o serviço do Apache ficar fora do Ar, ele faz a comutação se detectar que o seu próprio serviço ficou fora, por isso vale lembrar que ele não atua direto no serviço HTTPD, mas sim no serviço HEARTBEAT.



Instalando o HeartBeat

Bom, para configurar esta solução, precisaremos instalar o HeartBeat no SO através do comando abaixo:

[root@apache01]# yum install heartbeat -y

Se por acaso seu SO não localizar o HeartBeat através do YUM, verifique se você possui o repositório EPEL configurado em seu SO.

Após a instalação do HeartBeat, vamos as configurações necessárias.

Utilizaremos neste ambiente 02 máquinas com o SO Centos 6.6:
  • Máquina 01  
IP: 192.168.56.201
apache01.example

  • Máquina 02

IP: 192.168.56.202
apache02.example

Utilizaremos ainda um IP virtual configurado no HeartBeat que será criado em tempo de execução na máquina que assumir o papel de Master.


Configurando o HeartBeat na máquina Apache01

O diretório padrão de instalação do HeartBeat é o [/etc/ha.d] onde serão criados os arquivos de configuração conforme mostrado abaixo:



1- Acesse o Apache01 e crie um arquivo [ha.cf] para as configurações principais do HeartBeat:

[root@apache01]# vim /etc/ha.d/ha.cf

Insira as linhas abaixo no arquivo:

keepalive 2                              # intervalo de comunicação entre os hosts
warntime 5                               # tempo de sincronismo
deadtime 15                              # Timeout para determinar que um nó está offline
initdead 90                              # Timeout para determinar que um nó está offline na inicialização do HeartBeat
udpport 694                              # Porta UDP para realizar broadcast entre os hosts
auto_failback on                         # Determina que o nó master volte a ser o principal quando estiver online
ucast eth0 192.168.56.202                # Interface de rede das requisições
logfile /var/log/ha-log                  # Diretório dos arquivos de log
node apache01.example apache02.example   # Lista de nós do cluster



2- Vamos criar agora um arquivo de autenticação entre os Hosts, no meu caso não irei criar uma segurança entre os arquivos, mas caso queira esta funcionalidade, poderá ser configurada neste arquivo.

Acesse o Apache01 e crie um arquivo [authkeys] e deixe-o conforme abaixo:

[root@apache01]# vim /etc/ha.d/authkeys

auth 2
2 crc

Após criar o arquivo, será necessário alterar as permissões dele conforme mostrado abaixo:

[root@apache01]# chmod 600 /etc/ha.d/authkeys

3- Acesse a máquina Apache01 e crie o arquivo [haresources] conforme mostrado abaixo:

[root@apache01]# vim /etc/ha.d/haresources

apache01.example IPaddr::192.168.56.200/24/eth0:0 httpd

Neste arquivo foi configurado um IP Virtual [192.168.56.200] baseado nas configurações da interface eth0 na máquina Apache01, este IP Virtual será gerenciado pelo HeartBeat e só ficará ativo na máquina que assumir o papel de Master.


Configurando o HeartBeat na máquina Apache 02

Com as configurações acima, já teremos o HeartBeat configurado na máquina Apache01, mas teremos que configurar tambem na máquina Apache02, para isso, execute o comando abaixo para copiar os arquivo de configuração para a máquina Apache02:

[root@apache01]# scp /etc/ha.d/ha.cf /etc/ha.d/authkeys /etc/ha.d/haresources root@192.168.56.202:/etc/ha.d/

Agora, vamos ajustar os arquivos de configuração na máquina Apache02:

1- Edite o arquivo [/etc/ha.d/ha.cf] e altere a linha abaixo:

ucast eth0 192.168.56.201

Lembrando que o parâmetro alterado acima, quando houver mais de 2 nós no cluster deve ser informado a lista de IPs do cluster com exceção do IP da máquina local.

Neste momento já temos os dois nós do cluster configurado, mas teremos ainda que realizar uma última configuração.

Ajustes no SO para o funcionamento do HeartBeat


O HTTPD não pode estar no chkconfig da máquina, pois ele passará a ser gerenciado pelo HeartBeat, por isso, precisamos nos certificar de que o HTTPD está fora do chkconfig, para isso, execute o comando abaixo nos dois Hosts:

[root@apache01]# chkconfig httpd off
[root@apache02]# chkconfig httpd off

Teremos agora que configurar o HeartBeat no chkconfig utilizando o comando abaixo nas duas máquinas:

[root@apache01]# chkconfig heartbeat on[root@apache02]# chkconfig heartbeat on


Preparando o ambiente para testar o HeartBeat


Antes de realizar o teste com o Heartbeat, vamos preparar o ambiente para validar o funcionamento, para isso, siga os passos abaixo:

1- Acesse a máquina Apache 01 e execute o comando abaixo:

[root@apache01]# vim /var/www/html/index.html

Insira o conteúdo abaixo no arquivo:

Voce esta acessando a maquina Apache 01

2- Acesse a máquina Apache 02 e execute o comando abaixo:

[root@apache02]# vim /var/www/html/index.html

Insira o conteúdo abaixo no arquivo:

Voce esta acessando a maquina Apache 02


Iniciando o serviço HeartBeat


Agora inicie o HTTPD em ambas as máquinas, utilizando o comando abaixo:

[root@apache01]# service httpd start[root@apache02]# service httpd start

Inicie tambem o HeartBeat em ambas as máquinas, utilizando o comando abaixo:

[root@apache01]# service heartbeat start[root@apache02]# service heartbeat start

Agora poderemos validar a criação do IP Virtual na máquina Apache 01 com o comando abaixo:

[root@apache01]# ifconfig

Você deverá ver a seguinte informação


Agora acesse o Browser com o endereço 192.168.56.200 e verifique que aparecerá a mensagem de que está acessando o Apache 01

Validando o funcionamento do Fail Over


Para validar o Fail Over, desabilite o serviço do HeartBeat da máquina Apache01 com o comando abaixo:

[root@apache01]# service heartbeat stop

Agora acesse o Browser novamente com o IP 192.168.56.200 e verifique que aparecerá a mensagem que você está acessando o Apache 02

Na linha de comando da máquina Apache 02 você irá verificar o IP Virtual criado.

Agora ative novamente o serviço do HeartBeat da máquina Apache 01 através do comando abaixo:

[root@apache01]# service heartbeat start

Acesse o Browser e verifique que o serviço voltou para o Apache 01

Através da linha de comando você poderá verificar que na máquina Apache 02 não existe mais o IP virtual criado e ele está nesse momento criado na máquina Apache 01.


Bom, acho que essa solução pode ajudar bastante vocês em soluções de alta disponibilidade e Fail Over.

Até a próxima.

Nenhum comentário :

Postar um comentário