Alta Disponibilidade Howto

From Pruonckk.org

Conteúdo

Rquerimentos

Presuponho que voce ja tenha um linux instalado, entao ... ... Gnu/Debian instalado e configurado ( ou qualquer outra distro )

Agora precisamos de um kernel-source, eu prefiro compilar um kernel na mao pra isso, mas fica a criterio de cada um, se voce pegar um kernel-image, pegue tb o kernel-header respectivo

Se voce for compilar o kernel na mao, instale os seguintes aplicativos:

apt-get install libncurses5-dev gcc cpp make kernel-package
  Bom, kernel compilado agora continuamos com a alta-disponibilidade

Baixando DRBD

para dizer que somos organizados, usaremos o diretorio /usr/src

cd /usr/src

agora baixamos o drbd

wget -c http://oss.linbit.com/drbd/0.7/drbd-0.7.11.tar.gz


Instalando DRBD

tar -xzvf drbd-0.7.11.tar.gz
cd drbd-0.7.11
cd drbd
make

Tente carregar o módulo para verificar

insmod drbd.o

Se tudo correr bem, instale-o

make install

OK, agora precisamos dos programas do drbd

Entao voltamos um para o diretorio raiz do drbd

cd /usr/src/drbd-0.7.11

Para compilar vamos precisar de algumas coisas adicionais, entao vamos la

apt-get install bison flex

Depois de instalados, voltamos para o drbd

make
make install

Bom, Antes de continuarmos, acho que seria uma boa idéia criarmos o sistema de arquivo para a maquina master

mkfs.ext3 /dev/sda7 

substitua isso pela partição respectiva em sua maquina Lembre-se que é apenas no Host primario ( O lyra que o diga! ehhehe )

Bom, agora precisamos criar a configuraçao do /etc/drbd.conf No meu caso eu usei a seguinte configuracao

    resource drbd0 {
     protocol B;
     incon-degr-cmd "halt -f";

     startup {
     degr-wfc-timeout 120;
     }

     disk {
     on-io-error detach;
     }

     net {
     timeout 60;
     connect-int 10;
     ping-int 10;
     max-buffers 2048;
     max-epoch-size 2048; 
     ko-count 4;
     }

     syncer {
     rate 10M; # Esta opcao especifica a velocidade da sincronia, ou seja, a velocidade de sua rede
     group 1;
     }
     on 001master {
     device /dev/drbd0;
     disk /dev/hdb1;
     meta-disk internal;
     address 10.1.1.25:7789; # maquina slave

     }
     on cobaia {
     device /dev/drbd0;
     disk /dev/sda7;
     meta-disk internal;
     address 10.1.1.100:7789; # maquina master

     }
    }

Ok, criado o arquivo, precisamos criar os dispositivos entao execute o seguinte comando

for i in `seq 0 15` ; do mknod -m 0600 /dev/drbd$1 b 147 $i; done
ls -laF /dev/drbd*

Voce vera que os dispositivos drbd estao la

Durante os testes, eu tive um erro que foi o seguinte:

  Jun 3 16:27:42 001master kernel: drbd0: 9538 MB marked out-of-sync by on disk bit-map.
  Jun 3 16:27:42 001master kernel: drbd0: No usable activity log found.
  Jun 3 16:27:42 001master kernel: drbd0: drbdsetup [4649]: cstate Unconfigured --> StandAlone
  Jun 3 16:27:42 001master kernel: drbd0: drbdsetup [4662]: cstate StandAlone --> Unconnected
  Jun 3 16:27:42 001master kernel: drbd0: drbd0_receiver [4663]: cstate Unconnected --> WFConnection
  Jun 3 16:27:42 001master kernel: drbd0: drbd0_receiver [4663]: cstate WFConnection --> WFReportParams
  Jun 3 16:27:42 001master kernel: drbd0: Handshake successful: DRBD Network Protocol version 74  
  Jun 3 16:27:42 001master kernel: drbd0: Connection established.
  Jun 3 16:27:42 001master kernel: drbd0: I am(S): 0:00000001:00000001:00000001:00000001:01
  Jun 3 16:27:42 001master kernel: drbd0: Peer(S): 0:00000001:00000001:00000001:00000001:01
  Jun 3 16:27:42 001master kernel: drbd0: drbd0_receiver [4663]: cstate WFReportParams --> Connected
  Jun 3 16:27:42 001master kernel: drbd0: I am inconsistent, but there is no sync? BOTH nodes inconsistent!  
  Jun 3 16:27:42 001master kernel: drbd0: Secondary/Unknown --> Secondary/Secondary
  Jun 3 16:31:55 001master kernel: drbd0: drbdsetup [4702]: cstate Connected --> Unconnected
  Jun 3 16:31:55 001master kernel: drbd0: drbd0_receiver [4663]: cstate Unconnected --> BrokenPipe
  Jun 3 16:31:55 001master kernel: drbd0: short read expecting header on sock: r=-512

olhando com atençao, e eu comentando pra voce, voce vera o seguinte neste ponto, deveriamos ter, dois pontos diferentes ( a opcao I am deveria ser uma e Peers outra, mas as duas estao iguais ) ou seja, aqui ja temos um erro

  Jun 3 16:27:42 001master kernel: drbd0: I am(S): 0:00000001:00000001:00000001:00000001:01
  Jun 3 16:27:42 001master kernel: drbd0: Peer(S): 0:00000001:00000001:00000001:00000001:01

aqui podemos ver, que ele proprio esta reclamando que esta inconsistente, e questiona o fato de noa haver sincronia

Jun 3 16:27:42 001master kernel: drbd0: I am inconsistent, but there is no sync? BOTH nodes inconsistent!

aqui vemos que ele nao esta reconhecendo uma como primaria e outra secundaria

Jun 3 16:27:42 001master kernel: drbd0: Secondary/Unknown --> Secondary/Secondary
Jun 3 16:31:55 001master kernel: drbd0: drbdsetup [4702]: cstate Connected --> Unconnected
Jun 3 16:31:55 001master kernel: drbd0: drbd0_receiver [4663]: cstate Unconnected --> BrokenPipe

Ok, dando uma procurada no google, achei a soluçao pra isso na maquina primaria execute o seguinte comando

drbdsetup /dev/drbd0 primary --do-what-I-say

com este comando, ele ira definir que voce é o host primario, e ira iniciar a sincronia

cat /proc/drbd

Obs: Quando voce montar o dispositivo, voce tem que montar o drbd e não o /dev/sdaX ou qualquer outra, ou seja, no seu fstab ficaria assim:

/dev/drbd0 /teste ext3 noauto 0 0

Outra coisa importante a se saber é que voce só consegue montar se voce estiver como host primario,ou seja, se voce for montar veja que o nome seja o primario, se nao for, de um

drbdsetup /dev/drbd0 primary

Se quiser fazer um teste, monte o dispositivo drbd e jogue alguns dados la dentro depois desmonte, de um /etc/init.d/drbd stop, o segundo node, vai ver que o primario caiu entao no segundo node, voce da um

drbdsetup /dev/drbd0 primary

monte a unidade, jogue alguns dados la dentro, depois desmonte, de um

drbdsetup /dev/drbd0 secondary,

ai entao, no node1 voce inicia novamente o drbd, voce vera que ele estara sincronizando, entao defina novamente o node1 como primary e monte a partição, voce vera que os dados estão la

PS: o heartbeat ira fazer tudo isso automaticamente pra voce

Ok, agora temos um drbd funcionando


Instalando o HeartBeat

Agora devemos instalar o heartbeat para monitorar o serviço pra nós

wget -c http://www.linux-ha.org/download/heartbeat-1.2.3.tar.gz

ou

apt-get install heartbeat

Configurando o HeartBeat

bom, aqui voce vai precisar configurar tres arquivos: ha.cf haresources e authkeys

Entao vamos começar pelo ha.cf copie o arquivo ha.cf para /etc/ha.d/ha.cf ele deve estar em /usr/share/doc/heartbeat

e edite ele com as seguintes opçoes:

vi /etc/ha.d/ha.cf
  debugfile               /var/log/ha-debug
  logfile                 /var/log/ha-log
  logfacility             local0
  keepalive               5
  deadtime                60
  warntime                20
  initdead                120 
  udport                  694
  baud                    19200
  bcast                   eth0 
  mcat                    eth0    255.0.0.1 694  1 0    # interface da rede interna
  auto_failback           on
  node                    cobaia           # host master
  node                    001master        # host slave

isso ai, por enquanto fica assim agora vamos configurar o haresources, esta configuração deve ser nas duas maquinas, identicas

vi /etc/ha.d/haresources
  cobaia          IPaddr::10.1.1.101 drbddisk::drbd0 Filesystem::/dev/drbd0::/teste::ext3 apache mysql

este é o ip que o heartbeat carregara na maquina master, e também carregará na slave, quando a master cair, ele ira carregar tb o apache o mysql

Bom, agora para testar faça o seguinte. Inicie o drbd na maquina primaria e secundaria e inicie o heartbeat tb Com os dois estao rodando, voce pode fazer o seguinte para testar, de um /etc/init.d/heartbeat stop, ou tire o cabo da maquina, ou de um reboot, veja que a maquina slave ira assumir as funções e o ip virtual, depois que voce viu que funcionou, voce pode iniciar o heartbeat da maquina master novamente, e voce vera que a slave, ira parar os serviços e a master ira carregar tudo novamente


Fontes de ajuda e referencia

Evil_lyra --- Pelos puxões de orelhas e "tsc tsc tsc" hehehe valew cara
tutorial da sulamita garcia (http://gus-br.linuxmag.com.br/documentacao/ha-slack/)
documentação oficial do heartbeat ( http://www.linux-ha.org )
documentação oficial do drbd ( /usr/share/docs/drbd )

Contato:::: pruonckk@pruonckk.org



Voltar

Ferramentas pessoais
Inutilidades