Instalação do DRBD + Heartbeat + Samba

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 nas duas máquinas 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, como 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 /dev/sda2 é /kplus em ambas. 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

Em seguida, 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`

O próximo passo é 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

Adicione as linhas 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’ email@dominio.com”;
split-brain “echo split-brain. drbdadm — –discard-my-data connect $DRBD_RESOURCE ? |
mail -s ‘DRBD Alert’ pager@braslink.com”;

}

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 é uma 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 (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 (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

Em seguida, retirare a entrada para a pasta do fstab das duas máquinas (ou comente com tralha):

Node1:

# vim /etc/fstab

Node2:

# vim /etc/fstab

É necessário zerar a partição que será replicada 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

Atar 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 serviço nas duas máquinas:

Node1:

# /etc/init.d/drbd restart

Node2:

# /etc/init.d/drbd restart

Verifique se a sincronização começou:

Node1:

# 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:

Node1:

# 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 máquina primária:

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, use:

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:

Node1

# mount /kplus

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

Node1

# ls / > /kplus/teste.txt

Verifique se o arquivo foi criado:

Node1

# ls /kplus

Desmonte a pasta:

Node1

# umount /kplus

Defina o node1 como secundário:

Node1

# drbdadm secondary all

Defina o node2 como primário:

Node2

# drbdadm primary all

Monte a pasta no node2:

Node2

# mount /kplus

Verifique se o arquivo foi criado:

Node2

# ls /kplus

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X