Guia de tecnologias

Instalar e configurar DRBD no CentOS/Oracle Linux 6

7 min read Administração Atualizado 19 Oct 2025
Instalar e configurar DRBD no CentOS 6
Instalar e configurar DRBD no CentOS 6

Importante: siga as etapas em ambos os nós quando indicado. Este tutorial usa OEL641 (192.168.43.101) e OEL642 (192.168.43.102) como exemplos.

O que é DRBD

DRBD (Distributed Replicated Block Device) é uma solução de replicação de blocos baseada em software. Espelha o conteúdo de dispositivos de bloco (discos, partições, volumes lógicos) entre servidores distintos. É muito usado para alta disponibilidade (failover) e recuperação de desastres. Definição curta: DRBD replica blocos em tempo real entre dois nós, criando um dispositivo /dev/drbdX que pode ser formatado e montado como um disco local.

1. Nota preliminar

Neste tutorial eu uso CentOS/Oracle Linux 6 (32 bits nos exemplos). O procedimento é compatível com qualquer variante RHEL/CentOS/Oracle Linux 6. É necessário que cada servidor disponha de um dispositivo de bloco livre. Nos exemplos usamos /dev/sdb1.

Arquitetura usada (esquema):

+———————————–+ +—————————–+ | [ DRBD Server A ] | 192.168.43.101 | 192.168.43.102 | [ DRBD Server B ] | | OEL641 +———————-+———————–+ OEL642 | | folderA | | folderB | +———————————–+ +—————————–+

Nota: substitua nomes de host, IPs e caminhos conforme seu ambiente.

2. Fase de instalação

Objetivo: atualizar o sistema e instalar dependências, compilar os pacotes DRBD e instalar os RPMs gerados.

Passo 1 — atualizar e instalar dependências (execute em ambos os servidores):

yum -y update   
yum -y install gcc make automake autoconf libxslt libxslt-devel flex rpm-build kernel-devel

Saída típica (exemplo):

Setting up Install Process  
Package gcc-4.4.7-3.el6.i686 already installed and latest version  
Package 1:make-3.81-20.el6.i686 already installed and latest version  
Package automake-1.11.1-4.el6.noarch already installed and latest version  
Package autoconf-2.63-5.1.el6.noarch already installed and latest version  
Package libxslt-1.1.26-2.0.2.el6_3.1.i686 already installed and latest version  
Package libxslt-devel-1.1.26-2.0.2.el6_3.1.i686 already installed and latest version  
Package flex-2.5.35-8.el6.i686 already installed and latest version  
Package rpm-build-4.8.0-32.el6.i686 already installed and latest version  
Package kernel-devel-2.6.32-358.el6.i686 already installed and latest version

Passo 2 — preparar diretório rpmbuild (em ambos os nós):

mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

Passo 3 — baixar os sources do DRBD (executar num nó, copiar ao segundo caso necessário):

wget http://oss.linbit.com/drbd/drbd-utils-latest.tar.gz http://oss.linbit.com/drbd/8.4/drbd-8.4.7-1.tar.gz

Passo 4 — extrair os arquivos:

tar -zxvf drbd-8.4.7-1.tar.gz  
tar -zxvf drbd-utils-latest.tar.gz

Passo 5 — compilar o kernel module e gerar RPMs do drbd:

cd drbd-8.4.7-1   
# dentro do diretório fonte
make km-rpm

Saída indicativa (arquivos RPM gerados):

You have now:  
/root/rpmbuild/RPMS/i686/drbd-km-debuginfo-8.4.7-1.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-km-2.6.32_358.el6.i686-8.4.7-1.i686.rpm

Passo 6 — compilar drbd-utils e gerar RPMs:

cd ..  
cd drbd-utils-8.9.6   
./configure   
make rpm

Saída indicativa (vários RPMs):

You have now:  
/root/rpmbuild/RPMS/i686/drbd-utils-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-debuginfo-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-heartbeat-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-xen-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-km-debuginfo-8.4.7-1.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-pacemaker-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-bash-completion-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-km-2.6.32_358.el6.i686-8.4.7-1.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-udev-8.9.6-1.el6.i686.rpm

Passo 7 — instalar RPMs (em cada servidor):

cd /root/rpmbuild/RPMS/i686  
rpm -Uvh drbd-xen* drbd-udev* drbd-pacemaker* drbd-bash-completion* drbd-utils-*.rpm drbd-km-*.rpm drbd-8*

Saída esperada (exemplo):

Preparing... ########################################### [100%]  
1:drbd-utils ########################################### [ 13%]  
2:drbd-xen ########################################### [ 25%]  
3:drbd-udev ########################################### [ 38%]  
4:drbd-pacemaker ########################################### [ 50%]  
5:drbd-bash-completion ########################################### [ 63%]  
6:drbd ########################################### [ 75%]  
7:drbd-km-2.6.32_358.el6.########################################### [ 88%]  
8:drbd-km-debuginfo ########################################### [100%]

Repita a compilação/instalação no segundo servidor (OEL642) conforme indicado.

3. Verificação básica do módulo DRBD

No servidor OEL641: verifique o hostname — o recurso DRBD usará o mesmo nome no arquivo de configuração.

uname -n

Saída exemplo:

OEL641

Carregue o módulo e verifique:

modprobe drbd  
lsmod | grep drbd

Saída exemplo:

drbd 341783 0  
libcrc32c 841 1 drbd

4. Criar partição para DRBD

No exemplo temos um disco /dev/sdb. Criamos uma partição /dev/sdb1 e usaremos como disco do DRBD.

Listar discos:

fdisk -l

Exemplo de saída curta:

Disk /dev/sdb: 1073 MB, 1073741824 bytes  
255 heads, 63 sectors/track, 130 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Sector size (logical/physical): 512 bytes / 512 bytes  
I/O size (minimum/optimal): 512 bytes / 512 bytes  
Disk identifier: 0x00000000

Criar a partição:

fdisk /dev/sdb

No prompt do fdisk:

Command (m for help): n  
Command action  
e extended  
p primary partition (1-4)  
p  
Partition number (1-4): 1  
First cylinder (1-130, default 1):  
Using default value 1  
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130):  
Using default value 130

Mostrar tabela e gravar:

Command (m for help): p

Saída:

Device Boot Start End Blocks Id System  
/dev/sdb1 1 130 1044193+ 83 Linux
Command (m for help): w  
The partition table has been altered!

Releia e verifique:

fdisk -l

Repita os mesmos passos no OEL642.

5. Configuração do DRBD

Objetivo: declarar o recurso DRBD, apontar dispositivos e endereços de cada nó, criar metadados e ativar o serviço.

Crie o arquivo de recurso em /etc/drbd.d/s1.res em ambos os nós (ou crie em um e copie ao outro):

cd /etc/drbd.d/  
vi s1.res

Conteúdo do arquivo s1.res:

resource s1 {  
on OEL641 {  
device /dev/drbd1;  
disk /dev/sdb1;  
address 192.168.43.101:7799;  
meta-disk internal;  
}  
on OEL642 {  
device /dev/drbd1;  
disk /dev/sdb1;  
address 192.168.43.102:7799;  
meta-disk internal;  
}  
}

Copie para o segundo servidor:

scp /etc/drbd.d/s1.res root@OEL642:/etc/drbd.d/s1.res

Criar metadados para o recurso (ambos os nós):

drbdadm create-md s1

Saída exemplo:

initializing activity log  
NOT initializing bitmap  
Writing meta data...  
New drbd meta data block successfully created.  
success

Carregue serviço e verifique status no primeiro nó (OEL641):

/etc/init.d/drbd status

Exemplo de saída e início:

drbd driver loaded OK; device status:  
version: 8.4.7-1 (api:1/proto:86-101)  
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44  
m:res cs ro ds p mounted fstype  
[root@OEL641 ~]# /etc/init.d/drbd start  
Starting DRBD resources: [  
create res: s1  
prepare disk: s1  
adjust disk: s1  
adjust net: s1  
]  
..........  
***************************************************************  
DRBD's startup script waits for the peer node(s) to appear.  
- If this node was already a degraded cluster before the  
reboot, the timeout is 0 seconds. [degr-wfc-timeout]  
- If the peer was available before the reboot, the timeout  
is 0 seconds. [wfc-timeout]  
(These values are for resource 's1'; 0 sec -> wait forever)  
To abort waiting enter 'yes' [ 26]:  
.

Observação: o nó pode ficar aguardando até o peer iniciar também. Inicie o DRBD no OEL642 para que ambos se conectem.

Status típico logo após ambos os nós estarem com o drbd iniciado:

/etc/init.d/drbd status
drbd driver loaded OK; device status:  
version: 8.4.7-1 (api:1/proto:86-101)  
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44  
m:res cs ro ds p mounted fstype  
1:s1 Connected Secondary/Secondary Inconsistent/Inconsistent C

Tornar OEL641 o primary inicial (execute somente no nó que será o primário inicial):

drbdadm -- --overwrite-data-of-peer primary s1  
/etc/init.d/drbd status

Exemplo de saída mostrando sincronização:

... sync'ed: 0.8% (1037872/1044124)K  
1:s1 SyncSource Primary/Secondary UpToDate/Inconsistent C

No peer (OEL642):

/etc/init.d/drbd status
... sync'ed: 12.2% (921244/1044124)K  
1:s1 SyncTarget Secondary/Primary Inconsistent/UpToDate C

Agora OEL641 é Primary e OEL642 é Secondary. Arquivos gravados no dispositivo do Primary serão sincronizados para o Secondary.

6. Fase de testes

Objetivo: formatar, montar, criar arquivos no Primary e validar que aparecem no Secondary após failover.

No Primary (OEL641) — formate o dispositivo DRBD e monte-o:

mkfs.ext3 /dev/drbd1

Saída simplificada:

Writing inode tables: done  
Creating journal (4096 blocks): done  
Writing superblocks and filesystem accounting information: done

Criar pasta e montar:

mkdir /folderA  
mount /dev/drbd1 /folderA  
df -h

Exemplo df:

Filesystem Size Used Avail Use% Mounted on  
/dev/drbd1 1004M 18M 936M 2% /folderA

Criar arquivo de teste de 30 MiB:

dd if=/dev/zero of=/folderA/testfile bs=1M count=30

Verificar:

ls -lh /folderA

Saída:

total 31M  
drwx------. 2 root root 16K Aug 21 08:55 lost+found  
-rw-r--r--. 1 root root 30M Aug 21 09:09 testfile

Agora desmontar o Primary e colocá-lo como secondary para simular failover.

umount /folderA  
drbdadm secondary s1

Verifique status (ambos nós devem estar Secondary/Secondary):

/etc/init.d/drbd status

No OEL642, eleve para primary e monte:

mkdir /folderB  
drbdadm primary s1  
mount /dev/drbd1 /folderB  
df -h

Verifique que o arquivo testfile existe em /folderB:

ls -lh /folderB/

Resultado esperado:

total 31M  
drwx------. 2 root root 16K Aug 21 08:55 lost+found  
-rw-r--r--. 1 root root 30M Aug 21 09:09 testfile

Se estiver, a replicação funcionou.

Checklist de pré-produção (role-based)

Administrador (antes de instalar):

  • Validar compatibilidade do kernel com DRBD.
  • Reservar dispositivo de bloco livre (/dev/sdb).
  • Backups completos dos dados existentes.
  • Acesso root por SSH entre nós e sincronização de relógio (NTP).

Operações (durante a instalação):

  • Instalar dependências.
  • Compilar RPMs em ambiente controlado.
  • Copiar RPMs para o outro nó e instalar.
  • Criar s1.res idêntico em ambos os nós.
  • Criar metadados drbdadm create-md s1 (em ambos).

Testes (após instalação):

  • Iniciar serviço drbd em ambos.
  • Elevar e rebaixar primary/secondary para validar failover.
  • Validar integridade do sistema de arquivos e arquivos de teste.

Diagnóstico e problemas comuns

  1. O drbd fica “waiting for peer”: verifique conectividade TCP/porta 7799, firewall (iptables), nome de host e arquivo s1.res com endereços corretos.

Comandos úteis:

iptables -L -n  # verificar regras
ss -tnlp | grep 7799  # checar listener
ping 192.168.43.102
telnet 192.168.43.102 7799
  1. Erro ao criar meta data: verifique permissão no dispositivo /dev/sdb1 e se ele não contém assinatura de LVM ou RAID que impeça escrita.

  2. Não consegue formatar /dev/drbd1: assegure-se de que o recurso está Primary no nó onde deseja formatar.

  3. Sincronização lenta: verifique rede, MTU, e se o dispositivo não está saturado por I/O. Monitore com iostat e ifstat.

  4. Saída “Inconsistent/Inconsistent”: sucedeu uma condição de split-brain — não force a sincronização sem validar dados. Em caso controlado, escolha um lado e execute drbdadm – –overwrite-data-of-peer primary s1 no nó que contém os dados válidos.

Fluxo de decisões (Mermaid)

flowchart TD
  A[Iniciar -> ambos os nós] --> B{Ambos os nós com DRBD instalado?}
  B -- Sim --> C{Metadados criados em ambos?}
  B -- Não --> Z[Instalar dependências e RPMs]
  C -- Não --> Y[drbdadm create-md s1 em ambos]
  C -- Sim --> D[Iniciar /etc/init.d/drbd start em ambos]
  D --> E{Estado Connected?}
  E -- Sim --> F[Escolher Primary inicial -> drbdadm --overwrite-data-of-peer primary s1]
  E -- Não --> G[Verificar rede/iptables/hostnames]
  F --> H[Testes: mkfs, mount, dd, failover]
  H --> I[Fim]

Quando DRBD pode não ser a melhor escolha (contraexemplos)

  • Para replicação entre regiões geográficas com alta latência, DRBD síncrono pode causar grande latência.
  • Para múltiplos nós ativos (mais de 2) sem cluster especializado, DRBD clássico não é suficiente; existem soluções de armazenamento distribuído (GlusterFS, Ceph).
  • Se você precisa de armazenamento em nível de arquivo com controle de bloqueios para muitos clientes concorrentes, um sistema de arquivos distribuído pode ser mais apropriado.

Boas práticas e recomendações

  • Use NTP para sincronizar relógios dos nós.
  • Mantenha o arquivo de recurso idêntico em todos os nós.
  • Teste failover e fallback em ambiente de staging antes de produção.
  • Monitore latência de rede e I/O regularmente.

Glossário rápido (1 linha cada)

  • DRBD: Replicação de blocos entre dois nós.
  • Primary: Nó que pode montar o dispositivo e receber gravações.
  • Secondary: Nó que mantém réplica, geralmente não montado.
  • Meta-disk internal: Área de metadados armazenada internamente no mesmo dispositivo.

Critérios de aceitação

  • Ambos os nós iniciam o serviço DRBD sem erros.
  • Um nó pode ser definido como Primary e montar /dev/drbd1.
  • Após gravação no Primary, os dados aparecem no Secondary após promoção e montagem.
  • Operações básicas (mkfs, mount, dd, failover) funcionam sem perda de dados.

Segurança e privacidade

  • Bloqueie acesso à porta DRBD (7799) apenas entre os nós do cluster.
  • Use firewalls e regras de rede para limitar comunicação.
  • Faça backup antes de operações destrutivas (mkfs/–overwrite-data-of-peer).

Resumo final

Você compilou e instalou os pacotes DRBD, configurou o recurso s1 com /dev/sdb1 em dois nós, criou metadados, iniciou o serviço, promoveu o Primary, formatou e testou a replicação. Siga o checklist antes de mover para produção e documente o procedimento de restauração.

Notas finais: adapte IPs, nomes de host e dispositivos ao seu ambiente. Teste em laboratório antes de qualquer alteração em produção.

Autor
Edição

Materiais semelhantes

Como postar e ver fotos 360° no Facebook
Tutoriais

Como postar e ver fotos 360° no Facebook

Converter vídeos com VLC: guia rápido
Tutoriais

Converter vídeos com VLC: guia rápido

Como colocar foto de perfil personalizada no Netflix
Tutoriais

Como colocar foto de perfil personalizada no Netflix

Smart cards no IPFire 2.19: PC/SC, CCID, OpenSC
Firewall

Smart cards no IPFire 2.19: PC/SC, CCID, OpenSC

Instalar OTRS 5 no CentOS 7
Administração

Instalar OTRS 5 no CentOS 7

Como baixar Netflix para ver offline
Guias

Como baixar Netflix para ver offline