Introdução
E aí, galera.
Aqui vou abordar a configuração de Bonding para termos a redundância de interfaces físicas para o serviço de HA, pois o Heartbeat vai trabalhar no bond0 e o DRBD + OCFS2, vai trabalhar no bond1. Estou utilizando o algoritmo round-robin, que faz o balanceamento dos dados, porém, temos outros algoritmos que podemos utilizar para o mesmo fim. Quero ganhar disponibilidade do servidor e aumentar a performance de acesso à rede, onde temos, às vezes, gargalos como no serviço do DRBD, que é um RAID 1 via rede. Como vai funcionar: aqui vamos agrupar 2 interfaces para montar um bond para o Heartbeat e agrupar as outras 2 interfaces para montar o bond para o DRBD. Caso caia alguma das interfaces por causa de algum problema de hardware, o servidor vai continuar funcionando, pois temos uma interface de “Backup” trabalhando, caso as duas estejam funcionando, vamos fazer o balanceamento de carga entre elas e, com isso, melhorando a performance. Prepare o seu sistema com o seguinte script, para que não falte nenhum pacote ou configuração: Pré-requisitos
|
|||||||||
Instalação e configuração do Bond
Agora, vamos mandar atualizar os repositórios e instalar os pacotes para o bond no servidor srv01:
# aptitude update && aptitude install ifenslave ethtool -y Agora vamos acertar a configuração dos módulos do kernel: # echo “options bonding mode=0 miimon=100” >> /etc/modprobe.d/bonding.conf Vamos verificar se todas as interfaces estão com link: # mii-tool Saída:
Agora, vamos acertar a configuração de rede para o bonding: # vim /etc/network/interfaces Edite:
Agora, precisamos reiniciar o servidor: # reboot E vamos listar as nossas interfaces, para verificar se subiu o bond e os endereços IPs: # ifconfig A saída seria:
O bonding para o srv01 já está OK, agora vamos configurar o srv02. Vamos mandar atualizar os repositórios e instalar os pacotes para o bond no servidor srv02: # aptitude update && aptitude install ifenslave ethtool -y Acertar a configuração dos módulos do kernel: # echo “options bonding mode=0 miimon=100” >> /etc/modprobe.d/bonding.conf Verificar se todas as interfaces estão com link: # mii-tool Saída:
E acertar a configuração de rede para o bonding: # vim /etc/network/interfaces
Agora, precisamos reiniciar o servidor: # reboot Agora, vamos listar as nossas interfaces para verificar se subiu o bond e os endereços IPs # ifconfig
Vamos testar agora, a conectividade entre os dois, iremos mandar pingar do srv01 para o srv02: # ping -c 3 10.101.0.26 Vejamos o resultado:
Agora, vamos mandar pingar do srv02 para o srv1: # ping -c 3 172.20.0.25 Resultado:
Agora que o bond está pronto, vamos configurar o Heartbeat para garantirmos um IP virtual compartilhado entre os servidores, que é o que o cliente vai utilizar para acessar os serviços. Este IP, sempre vai setar o servidor que for definido como master, e caso ele caia por algum motivo, o servidor slave vai assumir este IP, e o cliente nem vai notar que está trabalhando em outro servidor. Vamos acertar o arquivo de hosts, deixe o arquivo como o abaixo nos dois servidores. # vim /etc/hosts
|
|||||||||
Instalação e configuração do Heartbeat
Agora, vamos instalar o Heartbeat no srv02:
# aptitude update && aptitude dist-upgrade -y && apt-get install heartbeat heartbeat-dev -y Vamos acertar a configuração do Heartbeat: # vim /etc/ha.d/ha.cf
Agora, vamos acertar a configuração do nosso IP compartilhado pelo Heartbeat: # vim /etc/ha.d/haresources srv01 IPaddr::10.101.0.27/24/bond0/10.101.0.255
Explicando o arquivo acima:
Agora vamos acertar o arquivo com a senha de autenticação entre os Heartbeats: # vim /etc/ha.d/authkeys auth 3
3 md5 h34rt64t Agora vamos acertar as permissões do arquivo de senha: # chmod 600 /etc/ha.d/authkeys Agora vamos instalar o Heartbeat no srv02: # aptitude update && aptitude dist-upgrade -y && apt-get install heartbeat heartbeat-dev -y Acertar a configuração do heartbeat: # vim /etc/ha.d/ha.cf
Agora vamos acertar a configuração do nosso IP compartilhado pelo Heartbeat: # vim /etc/ha.d/haresources srv01 IPaddr::10.101.0.27/24/bond0/10.101.0.255
Agora vamos acertar o arquivo com a senha de autenticação entre os Heartbeats: # vim /etc/ha.d/authkeys auth 3
3 md5 h34rt64t Agora vamos acertar as permissões do arquivo de senha: # chmod 600 /etc/ha.d/authkeys Agora vamos reiniciar o Heartbeat nos dois servidores: # /etc/init.d/heartbeat restart Agora no servidor master (o srv01), vamos consultar os endereços IPs: # ifconfig
Agora no servidor slave (o srv02) vamos consultar os endereços IPs: # ifconfig
Como pode ser notado, temos o IP 10.101.0.27/24 no servidor srv01, que é o master. Agora vamos fazer um teste: vamos deslitar o servidor srv01: # telinit 0 Agora no servidor srv02 vamos consultar os endereços IPs: # ifconfig
Note que o endereço IP 10.101.0.27/24, já foi atribuido ao servidor srv02, pois ele é o slave; então, caso o cliente esteja conectado em algum serviço, ele não vai notar quando trocar de servidor. Agora vamos ligar novamente o servidor srv01 e consultar novamente: # ifconfig
Note que o IP compartilhado voltou para o servidor srv01, pois definimos ele como master. A primeira parte já está OK, que era garantir um IP compartilhado que vai ser utilizado pelo cliente. Pense que no servidor srv01, temos um site rodando, e este site está também no servidor srv02, com isso, o cliente vai acessar o: http://10.101.0.27 …E vai para o servidor master disponível, que em nosso caso, vai ser o srv01. Caso o master caia, o cliente vai acessar as páginas que estão no servidor srv02, e nem vai sentir que ele está acessando outro servidor. 😉 Mas, note que ainda temos um problema: os dados têm que ser sincronizados manualmente entre os servidores, por isso que vamos utilizar agora o DRBD + OCFS2, que vai trabalhar como um RAID 1 via rede, espelhando os dados em tempo real. Então, caso seja alterado um arquivo qualquer na partição do DRBD, o outro servidor já vai ter acesso a essas novas informações. Aqui vou utilizar o OCFS2, que é um sistema de arquivos distribuido, onde podemos trabalhar com os nodos sendo !master/master, ou seja, qualquer um dos servidores podem alterar qualquer arquivo, e esse arquivo vai aparecer alterado para a outra ponta. |
|||||||||
Instalação e configuração do DRBD + OCFS2
Agora, vamos instalar o DRBD e o OCFS2, faça isso nas duas máquinas:
# aptitude install drbd8-utils ocfs2-tools ocfs2-tools-dev -y Agora vamos carregar os módulos (faça isso nas duas máquinas): # modprobe cn Vamos configurar o DRBD. Deixe o arquivo como abaixo nas duas máquinas: # vim /etc/drbd.conf include “drbd.d/global_common.conf”;
#include “drbd.d/*.res”; Execute nas duas máquinas a parte abaixo. Vamos fazer backup do arquivo de configuração original: # cp /etc/drbd.d/global_common.conf{,.bkp} Deixe o arquivo como abaixo: # vim /etc/drbd.d/global_common.conf
Agora, vamos preparar o disco, faça isso nos dois servidores: # fdisk /dev/sdb Vai aparecer as peguntas:
Aqui, tecle w para escrever as mudanças no disco. E por fim, q para sair. Agora vamos zerar as partições (tem que ser executado nos dois servidores): # dd if=/dev/zero of=/dev/sdb1 bs=1M count=128 Execute este comando nos dois servidores, antes de passar para o próximo comando: # drbdadm — –discard-my-data connect r1 Onde “r1”, é o nome do nosso dispositivo, que no arquivo de configuração do DRBD, está como resource r1. Execute este comando nos dois servidores, antes de passar para o próximo comando: # drbdadm create-md r1 Execute este comando nos dois servidores, antes de passar para o próximo comando: # drbdadm attach r1 Execute este comando nos dois servidores, antes de passar para o próximo comando: # drbdadm connect r1 Pronto, agora podemos iniciar o DRBD. Inicie-o nos dois servidores com o seguinte comando: # /etc/init.d/drbd start Podemos observar como está a situação do nosso dispositivo DRBD, com o seguinte comando: # cat /proc/drbd Exemplo:
Se em “Connected st” estiver como Primary/Primary, está tudo OK, porém, se estiver como “Secondary/Secondary”, temos que forçar os dispositivos a passarem para primary, e temos mais uma situação quanto ao dispositivo Unknown, normalmente é quando um dos servidores não está operante por problemas de rede, ou de configuração do arquivo do DRBD. Então, muita atenção a esses detalhes. Vamos levar em consideração que só estamos com o problema que os dois servidores estão como secondary, resolvemos com o seguinte comando. Este comando tem que ser rodado nos dois servidores: # drbdadm — –overwrite-data-of-peer primary r1 Agora vamos monitorar novamente: # cat /proc/drbd Resultado:
Agora, é só esperar eles sincronizarem os dados, isso depende da placa de rede, da velocidade do disco e do tamanho do disco, fora os processos do DRBD, se você notar muita lentidão em algum desses fatores, veja se não é bom fazer algum upgrade. Para acompanhar a sincronização, pode utilizar o seguinte comando: # cat /proc/drbd Agora depois de sincronizados:
Agora, vamos configurar o OCFS2 Vamos configurar o cluster para o OCFS2. Tem que ser configurado nos dois servidores: # vim /etc/ocfs2/cluster.conf Edite:
Agora vamos configurar o O2CB, para ser habilitado (tem que ser configurado nos dois servidores): # sed -i ‘s/O2CB_ENABLED=false/O2CB_ENABLED=true/g’ /etc/default/o2cb Agora é so restartar o serviço nos dois servidores: # /etc/init.d/o2cb restart E criar o sistema de arquivos OCFS2 no DRBD, precimos fazer isso somente em um dos dois servidores. Opções:
# mkfs.ocfs2 -b 4K -C 128K -N 2 -L ocfs2 /dev/drbd1 Montando a partiçãoVamos criar um diretório para o OCFS2 nos dois servidores, e vamos montar: # mkdir /ocfs2 Vamos agora verificar nossas partições: # df -Th Resultado:
Como podemos ver, temos nossa partição montada com OCFS2. Agora podemos deixar isso na inicialização do sistema: # vim /etc/fstab Acrescentando: /dev/drbd1 /ocfs2 ocfs2 _netdev,defaults 0 0
Agora vamos ajustar a ordem de inicialização dos serviços, no dois servidores. Vamos primeiro acertar o DRBD nos dois servidores: # vim /etc/init.d/drbd Deixe como: # Deixe a opção Default-Start como abaixo
# Default-Start: S Agora temos que acertar o o2CB nos dois servidores: # vim /etc/init.d/o2cb Adicione/edite: # Temos que inserir a opção drbd para que ele inicialize depois que subir o dispositivo
# Required-Start: $network drbd Agora temos que recarregar as configurações de inicialização dos serviços. Vamos tirar os serviços da inicialização primeiro: # insserv -r -v ocfs2 Agora vamos colocar eles na inicialização novamente: # insserv -f -v drbd Agora vamos reiniciar os servidores para testarmos se vai ser montado o DRBD na inicialização: # init 6 Depois, da inicialização nodo1: # uptime Saída:
# df -Th Saída:
Depois, da inicialização nodo2: # uptime Saída:
# df -Th Saída:
Caso dê algum problema na inicialização, como um dos dois servidores não ficar como primary, podemos resolver da seguinte maneira: – Primeiro vamos mandar desmontar as partições montadas com o OCFS2 nos dois servidores: # umount /ocfs2 – Agora vamos mandar reiniciar o DRBD nos dois servidores: # /etc/init.d/drbd restart – Agora vamos forçar a utilização dos dois nodos primary: # drbdadm — –overwrite-data-of-peer primary r1 – Depois, é só remontar as partições novamente nos dois servidores: # mount.ocfs2 /dev/drbd1 /ocfs2/ Erros de sincronismoExemplo de erro de sincronismo dos discos, aonde perdemos a consistência dos dados, com isso, vamos precisar acertar este erro: # cat /proc/drbd Resultado:
No nodo2, vamos mandar ele desconsiderar os dados que ele já tem e ressincronizar com o nodo1: # drbdadm — –discard-my-data connect r1 Agora vamos verificar a sincronismo: # cat /proc/drbd Resultado:
Assim que terminar este processo, precisamos somente forçar os dois como primary da seguinte forma: # drbdadm — –overwrite-data-of-peer primary r1 O discos ainda sincronizando e forçados como primary: # cat /proc/drbd
|
|||||||||
Plus de Heartbeat
Pense que você precisa fazer o HA de um servidor de FW, por exemplo.
O que tem de diferente? Você poderia perguntar. Pense nas interfaces de rede: Temos no mínimo 2 interfaces, uma WAN e uma LAN. Neste caso, precisaríamos configurar o Heartbeat para atribuir endereços virtuais para as duas interfaces. Vamos a um exemplo, vou utilizar as interfaces de bond mesmo. Agora vamos instalar o Heartbeat no srv02: # aptitude update && aptitude dist-upgrade -y && apt-get install heartbeat heartbeat-dev -y Agora vamos acertar a configuração do Heartbeat: # vim /etc/ha.d/ha.cf Edite:
Agora vamos acertar a configuração do nosso IP compartilhado pelo Heartbeat: # vim /etc/ha.d/haresources srv01 IPaddr::10.101.0.27/24/bond0/10.101.0.255
srv01 IPaddr::172.20.0.27/24/bond1/172.20.0.255 Explicando o arquivo acima:
Agora vamos acertar o arquivo com a senha de autenticação entre os Heartbeats: # vim /etc/ha.d/authkeys auth 3
3 md5 h34rt64t Agora vamos acertar as permissões do arquivo de senha: # chmod 600 /etc/ha.d/authkeys Agora vamos instalar o Heartbeat no srv02: # aptitude update && aptitude dist-upgrade -y && apt-get install heartbeat heartbeat-dev -y Agora vamos acertar a configuração do Heartbeat: # vim /etc/ha.d/ha.cf
Agora, vamos acertar a configuração do nosso IP compartilhado pelo Heartbeat: # vim /etc/ha.d/haresources srv01 IPaddr::10.101.0.27/24/bond0/10.101.0.255
srv01 IPaddr::172.20.0.27/24/bond0/172.20.0.255 Agora, vamos acertar o arquivo com a senha de autenticação entre os Heartbeats: # vim /etc/ha.d/authkeys auth 3
3 md5 h34rt64t Agora vamos acertar as permissões do arquivo de senha: # chmod 600 /etc/ha.d/authkeys Agora vamos reiniciar o Heartbeat nos dois servidores: # /etc/init.d/heartbeat restart Agora vamos consultar as interfaces no servidor srv01: # ifconfig Resultado:
Aqui, o que é preciso mudar são as interfaces, caso não trabalhe com o bond e os endereços IPs. 😉 |