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:
Deixar como segue:
127.0.1.1 node1.onomedoseudominiovaiapareceraqui node1
192.168.241.20 node2
Node2:
Deixar como segue:
127.0.1.1 node2.onomedoseudominiovaiapareceraqui node2
192.168.241.10 node1
Para verificar:
Node1:
Node2:
Em seguida, instale as ferramentas com o comando:
Node1:
Node2:
O próximo passo é configurar o arquivo /etc/drbd.conf nas duas máquinas (deixar o arquivo exatamente igual nas duas).
Node1:
Node2:
Adicione as linhas abaixo:
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:
Node2:
Em seguida, retirare a entrada para a pasta do fstab das duas máquinas (ou comente com tralha):
Node1:
Node2:
É necessário zerar a partição que será replicada nas duas máquinas:
Node1:
Node2:
Criar o disco virtual:
Node1:
Node2:
Atar o disco nas duas máquinas:
Node1:
Node2:
Sincronizar:
Node1:
Node2:
Iniciar replicação no node1:
Node1:
Reiniciar o serviço nas duas máquinas:
Node1:
Node2:
Verifique se a sincronização começou:
Node1:
Verifique se o resultado está parecido com o apresentado abaixo:
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:
Verifique se o resultado está parecido com o apresentado abaixo:
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:
Node2:
Formate o disco virtual no node1:
Node1:
Caso precise alterar a máquina primária e secundária, use:
Node1:
Node2:
Adicione no fstab das duas máquinas:
Node1:
Adicione a linha:
Node2:
Adicione a linha:
Realizando testes:
Monte a pasta no node1:
Node1
Crie um arquivo na pasta montada, com qualquer conteúdo:
Node1
Verifique se o arquivo foi criado:
Node1
Desmonte a pasta:
Node1
Defina o node1 como secundário:
Node1
Defina o node2 como primário:
Node2
Monte a pasta no node2:
Node2
Verifique se o arquivo foi criado:
Node2
Deixe seu comentário