Home Linux DRBD + HeartBeat + Samba
DRBD + HeartBeat + Samba E-mail
Avaliação do Usuário: / 8
PiorMelhor 
Escrito por Douglas Baiocco   

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 e-mail está protegido contra spambots. Você deve habilitar o JavaScript para visualizá-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” (gêmeos). Os usuários acessarão os dados compartilhados pelo ip virtual e as duas máquinas (node1 e node2) responderão por ele. Em caso de perda de qualquer uma das máquinas, o Heartbeat irá reconfigurar os equipamentos para que o ip virtual continue respondendo.

 

Temos um desenho sobre como ficará a estrutura:

 

 

repli

 

 

Vamos a instalação:

 

Node1:

apt-get install heartbeat-2

 

Node2:

apt-get install heartbeat-2

 

 

Configurar o arquivo ha.cf nas duas máquinas:

 

Node1:

#vim /etc/ha.d/ha.cf

Node2:

#vim /etc/ha.d/ha.cf

Deixar como segue:

#informe os nomes dos computadores que formam a replicação(deve ser igual a saída do comando #uname -n

node node1

node node2

#qual a interface vai ser usada para comunicação

udp eth0

#arquivos de log

debugfile /var/log/ha-debug

logfile /var/log/ha-log

#freqüência, em segundos, da verificação das máquinas

keepalive 1

#tempo mínimo para declarar a outra máquina como morta

deadtime 5

 

 

Configurar o arquivo haresources nas duas máquinas

Node1:

#vim /etc/ha.d/haresources

Node2:

#vim /etc/ha.d/haresources

Deixar como segue:

node1 drbddisk::dados Filesystem::/dev/drbd0::/kplus::reiserfs 192.168.241.15 samba

 

Obs.:

node1 – nome da máquina principal

drbddisk – utilitário do heartbeat para gerenciar o drbd

dados – nome do dispositivo do drbd (configurado no drbd.conf)

Filesystem – utilitário para montagem de partição

/dev/drbd0 – nome da unidade do drbd

/kplus – nome do local de montagem do disco do drbd

reiserfs – sistema de arquivos do disco do drbd

192.168.241.15 – ip virtual

samba – script do init.d para o samba

 

 

Configurar o arquivo authkeys nas duas máquinas (para efeito da autenticação da replicação)

Node1:

#vim /etc/ha.d/authkeys

Node2:

#vim /etc/ha.d/authkeys

Deixar como segue:

 

auth 3

3 md5 digiteumafrase

 

 

Mudar os atributos do arquivo authkeys

 

Node1:

#chmod 600 /etc/ha.d/authkeys

Node2:

# chmod 600 /etc/ha.d/authkeys

 

 

Reinicie o serviço do heartbeat

Node1:

#/etc/init.d/heartbeat restart

Node2:

#/etc/init.d/heartbeat restart

 

 

Testando


Verifique se o ip virtual está respondendo executando um ping de uma máquina da rede rodando Windows ou Linux (supondo que você tenha uma máquina cliente).

Ping 192.168.241.15 –t

 

Desligue, reinicie ou retire o cabo de rede do node1 (se for uma máquina física).

Verifique que o ip pára de responder no momento em que o node1 cai e após alguns segundos retorna, sendo gerenciado pelo node2.

repli2

 

Você pode conferir o resultado do comando ifconfig no node1, veja que ele tem um ip virtual (antes de desliga-lo):

repli3

 

No momento do desligamento do node1, o ip virtual passa a ser gerenciado pelo node2, como pode ser visto no resultado do comando ifconfig no node2:

repli4

 

Samba

 

Agora só falta dar alguma função para este servidor. Para isso iremos instalar o samba e compartilhar uma pasta no ip virtual:

 

Instalar o samba:

 

Node1:

#apt-get install samba

 

Node2:

#apt-get install samba

Configurar o smb.conf

Node1:

#vim /etc/samba/smb.conf

 

Node2:

#vim /etc/samba/smb.conf

 

Deixe como o arquivo abaixo

[global]

workgroup = digiteonomedogrupodetrabalho

server string = Gemini

netbios name = Gemini

dns proxy = no

log file = /var/log/samba/%m.log

max log size = 500

debug level = 1

security = share

encrypt passwords = yes

smb passwd file = /etc/samba/smbpasswd

username map = /etc/samba/smbusers

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

unix charset = iso-8859-1

winbind uid = 10000-20000

winbind gid = 10000-20000

winbind enum users = yes

winbind enum groups = yes

template homedir = /dev/null

template shell = /dev/null

winbind use default domain = yes

passdb backend = smbpasswd

preferred master = no

wins support = yes

[kplus]

path = /kplus/

read only = No

create mask = 0777

force create mode = 0777

directory mask = 0777

force directory mode = 0777

guest ok = yes

 

 

Restarte o serviço do samba e faça os testes de acesso, desligando o node1 e verificando se o acesso permanece.

 

Node1:

#/etc/init.d/samba restart

 

Node2:

#/etc/init.d/samba restart

 

Caso aconteça o que chamamos de split brain (os micros passam a trabalhar separados) terão que ser feita algumas ações.

Você pode verificar em /proc/drbd: se aparecer Standalone, é provável que você tenha o problema.

 

Maquina que você acha que tem dados inválidos:

#drbdadm secondary dados
#drbdadm -- --discard-my-data connect dados

E na máquina que está correta:

#drbdadm connect dados

 

 

 

Sites consultados

http://ha-mc.org/node/15

http://www.vivaolinux.com.br/dica/HeartBeat-Web-server-com-Alta-Disponibilidade-(HA)

e muita busca no google

Comentários
Pesquisar
Paulo Favalli  - Analista de Sotware     |150.163.132.xxx |20-10-2009 11:20:48
Muito bom artigo.
Simples e objetivo
moretto  - Criar espelhamento completo   |Registered |23-11-2009 06:23:22
Ótimo artigo, segui passo a passo e funcionou perfeitamente.
Pórem, ele só
irá replicar a partição /dev/sda2, ou seja, somente os dados estarão
replicados. Se o servidor principal parar de funcionar e o segundo assumir, não
teremos por ex. os usuários que cadastramos e nem softwares instalados no
segundo servidor, caso não façamos isso manualmente no segundo servidor
também. Como poderiamos resolver isso?
admin  - Olá     |SAdministrator |23-11-2009 09:39:14
Olá

Nesse link você pode verificar alguns exemplos de uso do heartbeat
com outros serviços além do samba (apenas para monitorar e
levantar os serviços se necessário).

http://www.linux-ha.org/GettingStarted#configur...


Em relação a replicação dos usuários ou programas, estou
verificando algumas coisas e assim que obtiver respostas
te informarei.

Obrigado
Somente usuários registrados podem escrever comentários!

3.25 Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

Última atualização em Seg, 05 de Outubro de 2009 14:53
 
Copyright © 2010 The Polux. Todos os direitos reservados.
Joomla! é um Software Livre com licença GNU/GPL v2.0.