Linux

DRBD + HeartBeat + Samba

Escrito por Douglas Baiocco. Publicado em Linux.

Essa semana estive fazendo diversos testes com HA (alta disponibilidade) em Linux. Abaixo descrevo como foi essa experiência com DRBD.

O DRBD é um software que permite fazer RAID pela rede, ou seja, podemos replicar dados de partições inteiras pela rede. É um recurso extraordinário para servidores críticos, onde seus dados não podem ser perdidos.


Nesse teste, utilizei duas máquinas virtuais criadas para documentação. As máquinas para produção são duas máquinas reais que estão funcionando atualmente com esta mesma configuração. Tive muitos problemas para encontrar informações na internet sobre este recurso, portanto, qualquer coisa a adicionar, será bem-vinda.

Primeiramente, as duas máquinas são Linux, rodando Debian lenny, instaladas apenas com o sistema básico. Abaixo o nome e o ip das máquinas que eu usei:


Nome das máquinas:

Node1 – 192.168.241.10

Node2 – 192.168.241.20


A partição que eu criei está em /dev/sda2 (segunda partição primária no primeiro disco).

É interessante observar que os dois micros devem ter partições separadas para replicação, por exemplo:


Node1

3 partições(hd de 10GB):
5GB para a partição / - /dev/sda1
5GB para a partição /kplus - /dev/sda2 – partição a ser replicada
780MB para swap - /dev/sda3


Node2

3 partições(hd de 10GB):
5GB para a partição / - /dev/sda1
5GB para a partição /kplus - /dev/sda2 - partição a ser replicada
780MB para swap - /dev/sda3

 

Podemos também reservar discos inteiros para a replicação, depende muito do orçamento que pode ser gasto.

O nome da pasta que estou utilizando para montar o sistema de arquivos é /kplus nas duas.

O primeiro passo é fazer com que as duas máquinas possam ser pingadas por nomes, para isso altere o arquivo hosts:

 

Node1:

#vim /etc/hosts


Deixar como segue:

127.0.0.1       localhost
127.0.1.1       node1.onomedoseudominiovaiapareceraqui node1
192.168.241.20 node2


Node2:

#vim /etc/hosts


Deixar como segue:
127.0.0.1       localhost
127.0.1.1       node2.onomedoseudominiovaiapareceraqui node2
192.168.241.10 node1

 

Para verificar:


Node1:

#ping node2


Node2:

#ping node1


Instale as ferramentas com o comando:


Node1:

#apt-get install drbd8-utils drbd8-modules-`uname -r`


Node2:

#apt-get install drbd8-utils drbd8-modules-`uname -r`

Configurar o arquivo /etc/drbd.conf nas duas máquinas (deixar o arquivo exatamente igual nas duas)

 

Node1:

#vim /etc/drbd.conf

 

Node2:

#vim /etc/drbd.conf


Coloque as informações abaixo:

 

global {

usage-count yes;

}


common {

# Velocidade de transferencia (utilize em torno de 40% a 60% da sua banda total)

syncer { rate 100M; }

}


# Nome do resource em questao (sera utilizado como referencia nos comandos posteriores)

resource dados {

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' Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.";

}


startup {

degr-wfc-timeout 120;    # 2 minutes.

}


disk {

on-io-error   detach;

}


net {

sndbuf-size 512k;


timeout       60;    #  6 seconds  (unit = 0.1 seconds)

connect-int   10;    # 10 seconds  (unit = 1 second)

ping-int      10;    # 10 seconds  (unit = 1 second)

ping-timeout   5;    # 500 ms (unit = 0.1 seconds)

max-buffers     20480;

cram-hmac-alg "sha1";

shared-secret "dfadspuy234523n";          # esta chave éma senha de conexao, de qualquer valor

after-sb-0pri discard-older-primary;

after-sb-1pri violently-as0p;

after-sb-2pri disconnect;

rr-conflict disconnect;

}


syncer {

rate 100M;                                # novamente referente a transferencia de rede

al-extents 257;

}


on node1 {

device     /dev/drbd0; #aqui será o endereço do dispositivo (disco) virtual do DRBD

disk       /dev/sda2;  #aqui será a partição do disco que será replicada

address    192.168.241.10:7788; #ip do node1

meta-disk internal; #onde será colocado o meta-disk do drbd (neste caso, vai ficar junto com o resto do sistema)

}


on node2 {

device    /dev/drbd0; #aqui será o endereço do dispositivo (disco) virtual do DRBD

disk      /dev/sda2; #aqui será a partição do disco que será replicada

address   192.168.241.20:7788; #ip do node1

meta-disk internal; #onde será colocado o meta-disk do drbd (neste caso, vai ficar junto com o resto do sistema)


}

}


Meta-disk – disco temporário utilizado pelo drbd para armazenamento.


Desmontar as partições nas duas máquinas


Node1:

#umount /kplus


Node2:

#umount /kplus


Retirar a entrada para a pasta do fstab das duas máquinas (ou comentar com tralha)


Node1:

#vim /etc/fstab


Node2:

#vim /etc/fstab


Zerar o disco nas duas máquinas


Node1:

#dd if=/dev/zero of=/dev/sda2 bs=1M count=128


Node2:

#dd if=/dev/zero of=/dev/sda2 bs=1M count=128


Criar o disco virtual


Node1:

#drbdadm create-md dados


Node2:

#drbdadm create-md dados


Atachar o disco nas duas máquinas


Node1:

#drbdadm attach dados


Node2:

#drbdadm attach dados


Sincronizar


Node1:

#drbdadm syncer dados


Node2:

#drbdadm syncer dados


Iniciar replicação no node1


Node1:

#drbdadm -- --overwrite-data-of-peer primary dados


Reiniciar o servico nas duas máquinas


Node1:

#/etc/init.d/drbd restart


Node2:

#/etc/init.d/drbd restart


Verifique se a sincronização começou:


#cat /proc/drbd


Verifique se o resultado está parecido com o apresentado abaixo:

version: 8.0.14 (api:86/proto:86)

GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33

0: cs:SyncSource st:Secondary/Secondary ds:UpToDate/Inconsistent C r---

ns:898320 nr:0 dw:0 dr:909728 al:0 bm:54 lo:0 pe:15 ua:357 ap:0

[==>.................] sync'ed: 18.5% (3892/4769)M

finish: 0:00:39 speed: 99,760 (99,760) K/sec

resync: used:2/61 hits:56431 misses:56 starving:0 dirty:0 changed:56

act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0


após a sincronização ter terminado, verifique o resultado do comando novamente:

#cat /proc/drbd


Verifique se o resultado está parecido com o apresentado abaixo:

version: 8.0.14 (api:86/proto:86)

GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33

0: cs:Connected st:Secondary/Secondary ds:UpToDate/UpToDate C r---

ns:4883572 nr:0 dw:0 dr:4883572 al:0 bm:299 lo:0 pe:0 ua:0 ap:0

resync: used:0/61 hits:304925 misses:299 starving:0 dirty:0 changed:299

act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0


Definindo maquina primaria


Node1:

#drbdadm primary all


Node2:

#drbdadm secondary all


Formate o disco virtual no node1


Node1:

#mkfs.reiserfs /dev/drbd0


Caso precise alterar a máquina primária e secundária:


Node1:

#drbdadm secondary all


Node2:

#drbdadm primary all


Adicione no fstab das duas máquinas:


Node1:

#vim /etc/fstab


adicione a linha:


/dev/drbd0       /kplus        reiserfs noauto            0       0


Node2:


#vim /etc/fstab


adicione a linha:


/dev/drbd0       /kplus        reiserfs noauto            0       0




Realizando testes:


Monte a pasta no node1:

#mount /kplus



Crie um arquivo na pasta montada, com qualquer conteúdo:

#ls / > /kplus/teste.txt


Verifique se o arquivo foi criado:

#ls /kplus


Desmonte a pasta:

#umount /kplus


Defina o node1 como secundário:

#drbdadm secondary all


Defina o node2 como primário

#drbdadm primary all


Monte a pasta no node2

#mount /kplus


Verifique se o arquivo foi criado:

#ls /kplus


Instalando e configurando o Heartbeat

 

O Heartbeat é o software responsável por monitorar os computadores que fazem parte da replicação e tomar atitudes de acordo com os casos encontrados. Podemos dizer que este é o coração do que conhecemos como HA (alta disponibilidade). Abaixo, veremos como instalar e configurar o heartbeat, dando continuação aos passos anteriores, quando configuramos o DRBD.

 

A configuração que vamos realizar do Heartbeat irá criar um novo ip virtual na rede (192.168.241.15) que chamaremos de “GEMINI

Relacionados