terça-feira, 20 de dezembro de 2011

INSTALANDO DRBD + HEARTBEAT NO DEBIAN 6.0

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

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


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;
                                     }
            }
Criar os meta dados e a partição  (Executar nas 2 máquinas)
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

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

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.
# vim /etc/fstab
/dev/drbd0 /dados ext4 _netdev,defaults 0 0

Inicie o heartebeat nos dois nós
# /etc/init.d/heartbeat start
Em seguida confira se a interface virtual foi iniciada no nó primário:
# ifconfig
Se a interface virtual aparecer é sinal que correu tudo bem. Agora vamos testar nosso ambiente. Ainda no nó1 vamos parar o heartbeat
# /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.
 # watch cat/proc/drbdenquanto a máquina estiver no processo de reinício o estado do outro nó que assume será de Primary/Unknow visto que o mesmo perderá a conexão com o nó em reboot. Portanto assim que a máquina que estava reboot voltar ao seu estado normal o status do nó que assumiu os recursos mudará para Primary/Secondary e maquina que estava em reboot Secondary/Primary.
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
# ifconfig
# a saída deve ser algo semelhante a:
É possível ocorrer outro erro ao reiniciar o heartbeat
# 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

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
# /etc/init.d/heartbeat restart
 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.


Um comentário:

OpenCurriculo disse...

olá amigo, gostaria de saber quanto você me cobraria para configurar uma infra estrutura dessas aqui em minha empresa. Estamos interessados em aplicar isso em nossos servidores.
favor entrar em contato
rafael_0015@yahoo.com.br
61 81332935

Postar um comentário