Instalar e configurar DRBD no CentOS/Oracle Linux 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
- 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
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.
Não consegue formatar /dev/drbd1: assegure-se de que o recurso está Primary no nó onde deseja formatar.
Sincronização lenta: verifique rede, MTU, e se o dispositivo não está saturado por I/O. Monitore com iostat e ifstat.
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.
Materiais semelhantes

Como postar e ver fotos 360° no Facebook

Converter vídeos com VLC: guia rápido

Como colocar foto de perfil personalizada no Netflix

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

Instalar OTRS 5 no CentOS 7
