Acertar repositórios# REPOSITÓRIO OFICIAL
deb ftp://ftp.br.debian.org/debian squeeze main contrib non-free
deb-src ftp://ftp.br.debian.org/debian squeeze main contrib non-free
# REPOSITÓRIO DE ATUALIZAÇÕES DE SEGURANCA
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free
# REPOSITÓRIO DE ATUALIZAÇÕES PROPOSTAS
deb ftp://ftp.br.debian.org/debian squeeze-proposed-updates main contrib non-free
deb-src ftp://ftp.br.debian.org/debian squeeze-proposed-updates main contrib non-free
# aptitude update
deb ftp://ftp.br.debian.org/debian squeeze main contrib non-free
deb-src ftp://ftp.br.debian.org/debian squeeze main contrib non-free
# REPOSITÓRIO DE ATUALIZAÇÕES DE SEGURANCA
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free
# REPOSITÓRIO DE ATUALIZAÇÕES PROPOSTAS
deb ftp://ftp.br.debian.org/debian squeeze-proposed-updates main contrib non-free
deb-src ftp://ftp.br.debian.org/debian squeeze-proposed-updates main contrib non-free
# aptitude update
Acertar o arquivo nas duas máquinas
# vim /etc/hosts127.0.0.1 localhost
192.168.254.14 node1.local node1
192.168.254.15 node2.local node2
Por se tratar de um sistema de alta disponibilidade e importante manter a sincronia também da hora do sistema.
# aptitude install ntpdate tzdata
# ntpdate a.ntp.br
# hwclock --systohc
Instalar o DRBD
# aptitude install drbd8-utils
# carregar os módulos, faça isso nas duas máquinas.modprobe cn
modprobe drbd
Configurando o DRBD e inserir o seguinte parâmetro
# vim /etc/drbd.d/global_common.conf
global {
usage-count no; ( Este arquivo deve existir nas 2 máquinas)
# vim /etc/drbd.d/r0.res ( Este arquivo deve existir nas 2 máquinas)
#!/bin/bash
# ntpdate a.ntp.br
# hwclock --systohc
Instalar o DRBD
# aptitude install drbd8-utils
# carregar os módulos, faça isso nas duas máquinas.modprobe cn
modprobe drbd
Configurando o DRBD e inserir o seguinte parâmetro
# vim /etc/drbd.d/global_common.conf
global {
usage-count no; ( Este arquivo deve existir nas 2 máquinas)
# vim /etc/drbd.d/r0.res ( Este arquivo deve existir nas 2 máquinas)
#!/bin/bash
resource r0 {
protocol C;
handlers {
pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
pri-lost "echo primary DRBD lost | mail -s ‘DRBD Alert’ adm@gmail.com adm@gmail.com";
}
startup {
degr-wfc-timeout 60;
}
disk {
on-io-error detach;
}
net {
sndbuf-size 512k;
timeout 60;
connect-int 12;
ping-int 12;
ping-timeout 9;
max-buffers 20480;
cram-hmac-alg "sha1";
shared-secret "ff3421bc";
after-sb-0pri discard-older-primary;
after-sb-1pri violently-as0p;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer {
rate 100M;
al-extents 257;
}
on hachi {
device /dev/drbd0;
disk /dev/sda7;
address 192.168.254.14:7793;
meta-disk internal;
}
on narnia {
device /dev/drbd0;
disk /dev/sda7;
address 192.168.254.15:7793;
meta-disk internal;
}
}
Preparar o disco, faça isso nos dois servidores.
Selecione o espaço livre, depois clique em [New] digite o tamanho desejado para a partição: Ex 5120 (5GB) pressione [Enter] em seguida [Beginning] logo em seguida aperte [Write] aparecerá a mensagem
Are you sure you want to write the partition table to disk? (yes or no): yes depois pressione [Quit.]
[Reinicie as duas máquinas]
Zerar as partições (os comandos devem ser executado nas duas máquinas)dd if=/dev/zero of=/dev/sda7 bs=1M count=128
Inicializando os recursos (Executar nas 2 máquinas)# drbdadm create-md r0
# modprobe drbd
# drbdadm up r0
Sincronizando pela primeira vez (Executar só no primeiro nó)
# drbdadm -- --overwrite-data-of-peer primary r0
Aguardar a finalização do sincronismo, o tempo depende do tamanho do recurso e velocidade da conexão entre os nó. Os logs podem ser acompanhados em cat /proc/drbd.
Após a sincronia o log deverá ter a seguinte saída:
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---- ns:247044 nr:0 dw:0 dr:253992 al:0 bm:14 lo:1 pe:46 ua:211 ap:0 ep:1 wo:b os:4750388
[>...................] sync'ed: 5.0% (4636/4876)M
finish: 0:04:42 speed: 16,640 (24,560) K/sec
Iniciando o servico do DRBD (Executar nos 2 nós)# /etc/init.d/drbd startFormatando o dispositivos criados nos passos anteriores (somente no primeiro nó)
mkfs.ext4 /dev/drbd0
mkdir /dados ( nome do diretório opcional – executa nos dois nós ) mount -t ext4 /dev/drbd0 /dados (Executar no nó primário)
Para certificar se realmente o dispositivo foi montado digite:
df-h verifique se o diretório /dados foi montado
Realizando Testes
Crie um arquivo no diretório onde foi montado o drbd, por exemplo: # cd /dados
# touch teste
Desmonte o dispositivo:
# cd /
# umount /dados
Torne o nó primário em secundário:
# drbdadm secondary all
Tornar a outra máquina em primária:
Na outra máquina digite:
# drbdadm primary all
Montar o dispositivo na nova máquina primária:
# mount -t ext4 /dev/drbd0 /dados
Verificar se o arquivo criado no nó primário antigo, existe na nova primária:
Instalando Heartbeat (Executar nos dois nós)
# aptitude install heartbeat
Configurações
No debian por padrão não existe os arquivos modelos no diretório /etc/had.d então temos que copiar uma copia dos mesmos.
# cp /usr/share/doc/heartbeat/authkeys /etc/ha.d/authkeys
# zcat /usr/share/doc/heartbeat/ha.cf.gz > /etc/ha.d/ha.cf
# zcat /usr/share/doc/heartbeat/haresources.gz > /etc/ha.d/haresources
No debian por padrão não existe os arquivos modelos no diretório /etc/had.d então temos que copiar uma copia dos mesmos.
# cp /usr/share/doc/heartbeat/authkeys /etc/ha.d/authkeys
# zcat /usr/share/doc/heartbeat/ha.cf.gz > /etc/ha.d/ha.cf
# zcat /usr/share/doc/heartbeat/haresources.gz > /etc/ha.d/haresources
logfile /var/log/ha-log |
logfacility local0 |
keepalive 2 |
deadtime 10 |
warntime 5 |
initdead 20 |
udpport 694 |
bcast eth0 |
auto_failback no |
ping 192.168.254.254 |
node node1 |
node node2 |
O arquivo authkeys é responsável pela autenticação deixo da seguinte forma:
auth 1 1 md5 digite_sua-senha |
Mude as permissões do arquivo
# chmod 600 /etc/ha.d/authkeys
Edite o arquivo /etc/ha.d/ha.cf
# vim /etc/há.d/há,cf
# chmod 600 /etc/ha.d/authkeys
Edite o arquivo /etc/ha.d/ha.cf
# vim /etc/há.d/há,cf
node node1 node node2 # QUAL A INTERFACE QUE SERA USADA PARA COMUNICAÇÃO bcast eth0 # ARQUIVOS DE LOGS debugfile /var/log/ha-debug logfile /var/log/ha-log # FREQUENCIA EM SEGUNDOS DA VERIFICAÇÃO DOS SERVIDORES keepalive 2 # TEMPO MINIMO PARA DECLARAR A OUTRA MAQUINA DESATIVADA deadtime 30 # QUANTO TEMPO O HEARTBEAT DEVE ESPERAR POR BITS ATRASADOS warntime 10 # TEMPO MAXIMO PARA DECLARAR O OUTRO SERVIDOR COMO MORTO initdead 90 # VELOCIDADE DA SERIAL BPS – CASO ESTEJA USANDO CABO SERIAL baud 19200 # PORTA QUE SERA USADA udpport 694 # DETERMINANDO SE O SERVIÇO DEVE VOLTAR PARA O MASTER, CASO ELE VOLTE A RESPONDER auto_failback off # COMPACTAÇÃO DOS DADOS compression bz2 # COMPACTAÇÃO DOS DADOS compression_threshold 2 |
Edite também o arquivo haresources esse será responsável por quais recursos estarão no cluster bem como qual será o nó primário.
No arquivo abaixo iremos monitorar Apache e o drbd.
# vim /etc/ha.d/haresources
# node1 IPaddr::192.168.254.10/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/dados::ext4 apache2Nota: Vale lembrar que o ip declarado no arquivo 192.168.254.10 é o ip de virtual de serviço que os usuários irão acessar as aplicações.
##################################################
# Todos os arquivos de configuração do heartbeat deverão existir na duas # #máquinas. #
# É necessário retirar da inicialização automática do sistema os recursos # #utilizados, ou seja o drbd e o apache, pois quem iniciará os recursos # # agora é o heartbeat. # #################################################
Devemos colocar a montagem da partição de forma automática edite o arquivo fstab devendo ficar conforme exemplo abaixo.
No arquivo abaixo iremos monitorar Apache e o drbd.
# vim /etc/ha.d/haresources
# node1 IPaddr::192.168.254.10/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/dados::ext4 apache2Nota: Vale lembrar que o ip declarado no arquivo 192.168.254.10 é o ip de virtual de serviço que os usuários irão acessar as aplicações.
##################################################
# Todos os arquivos de configuração do heartbeat deverão existir na duas # #máquinas. #
# É necessário retirar da inicialização automática do sistema os recursos # #utilizados, ou seja o drbd e o apache, pois quem iniciará os recursos # # agora é o heartbeat. # #################################################
Devemos colocar a montagem da partição de forma automática edite o arquivo fstab devendo ficar conforme exemplo abaixo.
# vim /etc/fstab
/dev/drbd0 /dados ext4 _netdev,defaults 0 0
Inicie o heartebeat nos dois nós
# /etc/init.d/heartbeat start
/dev/drbd0 /dados ext4 _netdev,defaults 0 0
Inicie o heartebeat nos dois nós
# /etc/init.d/heartbeat start
# ifconfig
# /etc/init.d/heartbear stopNesse momento deverá ocorrer a migração dos dados para o nó2.Conforme imagem.
Agora que o nó2 é o no primário, iremos simular um reboot na mesma e acompanhar o processo de migração novamente.

Notas de erro:
Caso aconteça dos recursos não serem migrados, durante o reinício do heartbeat checar se os serviços foram iniciados.
Caso o apache2 esteja parado e ao iniciar receber a seguinte mensagem Starting web server: apache2apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.254.15 for ServerName. Basta editar o arquivo etc/apache2/apache2 e adicionar seguinte linha ServerName Ipdoservidor
É possível ao iniciar o hearbeat no nó primário,os recursos não iniciarem e o ip de serviço ou virtual não está disponível onde pode ser visto no log a mensagem semelhante a: tail –f /var/log/messages
No local resources [/usr/share/heartbeat/ResourceManager listkeys node2] to acquire.Nov 6 17:47:26 node2 heartbeat: [1200]: info: node1 wants to go standby [foreign]
Nov 6 17:47:27 node2 heartbeat: [1200]: info: standby: acquire [foreign] resources from node1
Nov 6 17:47:27 node2 heartbeat: [1306]: info: acquire local HA resources (standby).
Nov 6 17:47:27 node2 heartbeat: [1306]: info: local HA resource acquisition completed (standby).Nov 6 17:47:27 node2 heartbeat: [1200]: info: Standby resource acquisition done [foreign].
Para corrigir isso faça o seguinte:
No nó primário entre com os commandos:
# modprobe drbd
# drbdadm secondary r0
# drbdadm primary r0
# drbdadm disconnect r0
# drbdadm connect r0
# /etc/init.d/heartbeat restart
Já no nó secundário entre com os comandos:
# modprobe drbd
# drbdadm -- --discard-my-data connect r0
# /etc/init.d/heartbeat restart
Como o nó primário apresentou erros, ao executar os comandos acima o heartbeat criará o ip de serviço e irá mudar para o servidor secundário que a partir de agora passa a ser primário. Para conferir se os recursos foram migrados verifique ser a interface virtual foi criada digitando
Caso o apache2 esteja parado e ao iniciar receber a seguinte mensagem Starting web server: apache2apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.254.15 for ServerName. Basta editar o arquivo etc/apache2/apache2 e adicionar seguinte linha ServerName Ipdoservidor
É possível ao iniciar o hearbeat no nó primário,os recursos não iniciarem e o ip de serviço ou virtual não está disponível onde pode ser visto no log a mensagem semelhante a: tail –f /var/log/messages
No local resources [/usr/share/heartbeat/ResourceManager listkeys node2] to acquire.Nov 6 17:47:26 node2 heartbeat: [1200]: info: node1 wants to go standby [foreign]
Nov 6 17:47:27 node2 heartbeat: [1200]: info: standby: acquire [foreign] resources from node1
Nov 6 17:47:27 node2 heartbeat: [1306]: info: acquire local HA resources (standby).
Nov 6 17:47:27 node2 heartbeat: [1306]: info: local HA resource acquisition completed (standby).Nov 6 17:47:27 node2 heartbeat: [1200]: info: Standby resource acquisition done [foreign].
Para corrigir isso faça o seguinte:
No nó primário entre com os commandos:
# modprobe drbd
# drbdadm secondary r0
# drbdadm primary r0
# drbdadm disconnect r0
# drbdadm connect r0
# /etc/init.d/heartbeat restart
Já no nó secundário entre com os comandos:
# modprobe drbd
# drbdadm -- --discard-my-data connect r0
# /etc/init.d/heartbeat restart
Como o nó primário apresentou erros, ao executar os comandos acima o heartbeat criará o ip de serviço e irá mudar para o servidor secundário que a partir de agora passa a ser primário. Para conferir se os recursos foram migrados verifique ser a interface virtual foi criada digitando
# a saída deve ser algo semelhante a:
# cat /proc/drbd
Se isso ocorrer proceda da seguinte forma nos dois nós:modprobe drbd
drbdadm attach r0
drbdadm syncer r0
drbdadm connect r0
drbdadm disconnect r0
drbdadm -- --discard-my-data connect r0
drbdadm get-gi r0
Verifique a saída dos logs em ambos os nós deverá ser algo semelhante a:
# cat /proc/drbd
drbdadm attach r0
drbdadm syncer r0
drbdadm connect r0
drbdadm disconnect r0
drbdadm -- --discard-my-data connect r0
drbdadm get-gi r0
Verifique a saída dos logs em ambos os nós deverá ser algo semelhante a:
# cat /proc/drbd

Defina um dos nós como primário:
# drbdadm primary all
No nó secundário digite:
# drbdadm secondary all
Reinicie o heartbeat nos dois nós
Verifique se o ip virtual foi iniciado# ifconfig
Referências e agradecimentos.http://gnulinuxbr.com/
http://www.drbd.org/
http://www.drbd.org/docs/about/
http://www.douglas.wiki.br/doku.php
Agradeço ao Evandro Couto, Douglas Quintiliano, Roosevelt, e ao Victor Sartori pela grande ajuda para criar esse material.




