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.
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:
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
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
127.0.0.1 localhost
127.0.1.1 node1.onomedoseudominiovaiapareceraqui node1
192.168.241.20 node2
Node2:
#vim /etc/hosts
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