Instalar y configurar DRBD en CentOS 6 — Guía práctica
Resumen rápido
- Objetivo: replicar un dispositivo de bloque (/dev/sdb1) entre dos servidores (OEL641 y OEL642) con DRBD para alta disponibilidad y recuperación ante desastres.
- Alcance: CentOS/Red Hat/Oracle Linux 6 (32‑bit en el ejemplo). Los pasos son válidos en arquitecturas equivalentes.
- Resultado esperado: cambios en el sistema de archivos montado en el Primary se sincronizan automáticamente en el Secondary.
Importante: Antes de comenzar, haga una copia de seguridad de cualquier dato crítico. Estos pasos crean particiones y formatean dispositivos — se perderán los datos existentes.
1. ¿Qué es DRBD? (modelo mental)
DRBD (Distributed Replicated Block Device) es una solución de replicación de bloques en software que mantiene sincronizados dispositivos de bloque (discos, particiones, volúmenes lógicos) entre nodos. Piénselo como un RAID 1 distribuido a través de la red: permite tener un nodo Primary activo y uno o varios Secondaries listos para hacerse cargo.
Términos clave en una línea:
- Recurso: unidad lógica DRBD configurada (por ejemplo, s1).
- Primary/Secondary: roles que determinan si el dispositivo puede montarse y escribirse.
- Meta‑disk: metadatos de DRBD (puede ser interno o en un archivo/partición separada).
2. Nota preliminar y arquitectura de ejemplo
En el ejemplo usamos dos servidores:
- OEL641 — 192.168.43.101 — folderA (Primary inicial)
- OEL642 — 192.168.43.102 — folderB (Secondary inicial)
Arquitectura (esquema):
+———————————–+ +—————————–+ | [ DRBD Server A ] | 192.168.43.101 | 192.168.43.102 | [ DRBD Server B ] | | OEL641 +———————-+———————–+ OEL642 | | folderA | | folderB | +———————————–+ +—————————–+
Requisito: cada servidor debe disponer de un dispositivo de bloque libre (/dev/sdb1 en este ejemplo).
3. Fase de instalación — dependencias y compilación
A continuación se describen los pasos para actualizar el sistema, compilar e instalar los paquetes DRBD desde código fuente y generar RPMs. Ejecute todas las instrucciones como root.
Actualice el sistema e instale las dependencias (en ambos servidores):
yum -y update
yum -y install gcc make automake autoconf libxslt libxslt-devel flex rpm-build kernel-devel
Salida ejemplo (puede variar):
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
Crear estructura para rpmbuild en /root (ambos servidores):
mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
Descargar los tarballs de DRBD:
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
Extraer paquetes:
tar -zxvf drbd-8.4.7-1.tar.gz
tar -zxvf drbd-utils-latest.tar.gz
Compilar el módulo (ejemplo):
cd drbd-8.4.7-1
drbd-8.4.7-1]# make km-rpm
Salida de ejemplo: archivos RPM generados en /root/rpmbuild/RPMS/i686
...
...
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
Compilar drbd-utils y generar RPMs:
cd ..
cd drbd-utils-8.9.6
./configure
make rpm
Salida de ejemplo: múltiples RPMs en /root/rpmbuild/RPMS/i686
...
...
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
Instalar los RPMs generados (ejecute en ambos servidores):
cd /root/rpmbuild/RPMS/i686
rpm -Uvh drbd-xen* drbd-udev* drbd-pacemaker* drbd-bash-completion* drbd-utils-*.rpm drbd-km-*.rpm drbd-8*
Ejemplo de salida de instalación:
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 exactamente los mismos pasos en OEL642.
4. Verificación inicial del módulo DRBD
Comprobar el nombre del host (el recurso DRBD usará nombres de host):
uname -n
OEL641
Cargar el módulo DRBD y verificar que está presente:
modprobe drbd
lsmod |grep drbd
drbd 341783 0
libcrc32c 841 1 drbd
5. Crear y preparar la partición a replicar
En este ejemplo partimos de un disco nuevo /dev/sdb. Se crea una partición /dev/sdb1 y se repite el proceso en el otro nodo.
Listar discos:
fdisk -l
Salida ejemplo:
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
Crear partición en /dev/sdb:
fdisk /dev/sdb
Interacción de ejemplo:
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
Comprobar tabla y escribirla:
Command (m for help): p
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!
Calling ioctl() to re-read partition table.
Syncing disks.
Vuelva a ejecutar fdisk -l para confirmar; repita todo en OEL642.
6. Configuración de recursos DRBD
Crear el archivo de recurso en /etc/drbd.d/s1.res en ambos servidores (el mismo contenido). Ejemplo de archivo:
cd /etc/drbd.d/
vi s1.res
Contenido del archivo 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;
}
}
Copiar s1.res a OEL642 con scp (desde OEL641):
scp /etc/drbd.d/s1.res root@OEL642:/etc/drbd.d/s1.res
Inicializar la metadata DRBD en ambos nodos:
drbdadm create-md s1
Salida de ejemplo:
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
success
Repita en OEL642.
7. Iniciar el servicio DRBD y sincronizar nodos
En OEL641:
/etc/init.d/drbd status
Salida y arranque:
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]:
.
Nota: el script espera a que aparezca el par (OEL642). Inicie DRBD en OEL642; al hacerlo, OEL641 dejará de esperar.
Una vez ambos nodos arrancados, el estado puede mostrar:
/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
Poner OEL641 como Primary inicial (esto permite escribir en /dev/drbd1 en OEL641 y forzar la sincronización):
drbdadm -- --overwrite-data-of-peer primary s1
/etc/init.d/drbd status
Salida esperada (OEL641 como Primary):
... sync'ed: 0.8% (1037872/1044124)K
1:s1 SyncSource Primary/Secondary UpToDate/Inconsistent C
En OEL642 se mostrará el rol de Target/Secondary y la progresión de sincronización:
... sync'ed: 12.2% (921244/1044124)K
1:s1 SyncTarget Secondary/Primary Inconsistent/UpToDate C
Cuando la sincronización llegue a 100%, ambos estarán UpToDate.
8. Fase de pruebas (montaje, escritura y conmutación)
A continuación se prueba que los datos creados en el Primary se reflejan en el Secondary.
En OEL641 (Primary) formatee y monte DRBD:
mkfs.ext3 /dev/drbd1
Salida ejemplo:
...
...
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
Montar y comprobar uso:
mkdir /folderA
mount /dev/drbd1 /folderA
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/drbd1 1004M 18M 936M 2% /folderA
Crear archivo de prueba de 30 MB en OEL641:
cd /folderA/
ls -h
lost+found
dd if=/dev/zero of=/folderA/testfile bs=1M count=30
30+0 records in
30+0 records out
31457280 bytes (31 MB) copied, 0.178448 s, 176 MB/s
ls -lh
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
Cambiar OEL641 a Secondary para simular failover y montar en OEL642:
En OEL641:
umount /folderA
drbdadm secondary s1
Verificación (ambos deberían estar en Secondary/Secondary):
/etc/init.d/drbd status
...
1:s1 Connected Secondary/Secondary UpToDate/UpToDate C
En OEL642, promover a Primary y montar:
mkdir /folderB
cd /folderB
ls -lh
total 0
/etc/init.d/drbd status
1:s1 Connected Secondary/Secondary UpToDate/UpToDate C
Promover y montar en OEL642:
drbdadm primary s1
/etc/init.d/drbd status
1:s1 Connected Primary/Secondary UpToDate/UpToDate C
mount /dev/drbd1 /folderB
df -h
Salida ejemplo que confirma el testfile replicado:
ls -lh /folderB/
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
Si ve el archivo testfile en /folderB, la replicación funciona correctamente.
9. Buenas prácticas y checklist antes de producción
- Verifique la latencia entre nodos; DRBD replica a nivel de bloque y depende de la red.
- Reserve un dispositivo de bloque dedicado para DRBD; no use particiones del sistema raíz.
- Decida política de meta-disk (internal para pruebas; en producción puede usar un volumen separado).
- Configure firewalls para permitir el puerto configurado (7799 en este ejemplo).
- Configure inicio automático del servicio DRBD y monitorización (monitoreo y alertas sobre estado de recursos).
Lista mínima de comprobación antes de pasar a producción:
- Backups completos de datos existentes
- Dispositivo de bloque disponible en ambos nodos
- Mismo archivo s1.res desplegado en ambos nodos
- Puertos de DRBD abiertos en firewall
- Prueba de promoted/demoted y verificación de datos
10. Caja de herramientas: comandos útiles (cheat sheet)
- Mostrar estado DRBD: /etc/init.d/drbd status
- Crear metadata: drbdadm create-md s1
- Iniciar recurso: /etc/init.d/drbd start
- Forzar Primary y sobreescribir peer: drbdadm – –overwrite-data-of-peer primary s1
- Promover a Primary: drbdadm primary s1
- Poner en Secondary: drbdadm secondary s1
- Forzar resync o ver estadísticas: cat /proc/drbd
Ejemplo de ver estado completo:
cat /proc/drbd
11. Resolución de problemas comunes
- DRBD se queda esperando al peer al iniciar: compruebe conectividad IP y que el puerto configurado no esté bloqueado por firewall.
- Estado Inconsistent tras inicializar: verifique logs y deje que la sincronización termine. Use /proc/drbd para seguimiento.
- No se puede montar /dev/drbd1: asegúrese de que el nodo esté en rol Primary y que el filesystem exista (/dev/drbd1 formateado).
- Error al crear metadata: asegúrese de que /dev/sdb1 no tenga particiones montadas ni LVM activos.
Pasos de diagnóstico básicos:
- ping entre hosts
- netstat -lntp | grep 7799 para verificar puerto
- dmesg y /var/log/messages para errores de kernel o drbd
- cat /proc/drbd para ver estado y progreso de sincronización
12. Escenarios donde DRBD puede no ser la mejor opción (contraejemplos)
- Requisitos de latencia muy estrictos para aplicaciones transaccionales en tiempo real: la replicación síncrona puede agregar latencia.
- Necesidad de múltiples escritores simultáneos en el mismo volumen (Multi‑Primary) requiere configuración especial y filesystems cluster-aware (p. ej. GFS2) o soluciones distintas.
- Si ya dispone de storage replicado por hardware o soluciones SAN con replicación integrada, DRBD puede ser redundante.
13. Plantilla rápida de despliegue (SOP reducido)
- Validar hardware y red.
- Instalar dependencias y compilar RPMs en nodo A y B.
- Copiar s1.res idéntico en ambos nodos.
- drbdadm create-md s1 en ambos.
- Iniciar DRBD en ambos y promover Primary en nodo designado.
- Formatear /dev/drbd1 y montar en Primary.
- Probar escritura, demote/promote y verificar datos en Secondary.
14. Lista de verificación por rol
Administrador (instalación):
- Compilar/instalar RPMs, revisar kernel-devel
- Configurar s1.res y firewall
- Automatizar arranque del servicio
Operaciones (runbook de conmutación):
- Cómo promover: drbdadm primary s1
- Cómo demote: drbdadm secondary s1
- Qué revisar: /proc/drbd, logs, df -h
15. Glosario rápido (1 línea cada término)
- Primary: nodo con permiso de montaje y escritura sobre el recurso DRBD.
- Secondary: nodo que mantiene réplica pero no permite montaje de forma predeterminada.
- Meta‑disk: área donde DRBD guarda metadatos de replicación.
16. Diagrama de decisión básico (Mermaid)
flowchart TD
A[¿Existe dispositivo /dev/sdb1 en ambos nodos?] -->|No| B[Preparar dispositivo]
A -->|Sí| C[¿s1.res configurado idéntico?]
C -->|No| D[Sincronizar configuración]
C -->|Sí| E[Crear metadata con drbdadm create-md]
E --> F[Iniciar drbd en ambos nodos]
F --> G{¿Ambos nodos conectados?}
G -->|Sí| H[Promover Primary y formatear /dev/drbd1]
G -->|No| I[Revisar red y firewall]
17. Resumen final
Esta guía detalló desde la instalación de dependencias hasta pruebas de escritura y conmutación con DRBD en CentOS/Oracle Linux 6. Siga la checklist y las prácticas recomendadas antes de mover un despliegue a producción. DRBD es una herramienta poderosa para HA a nivel de bloque, pero su correcta operación exige pruebas de red, backups y políticas claras de promoción/democión de nodos.
Notas finales:
- Mantenga actualizado el kernel y versiones de DRBD compatibles.
- En entornos productivos considere integración con Pacemaker/Corosync para orquestar recursos y failover automático.
Hecho: su DRBD debería ahora replicar /dev/sdb1 entre OEL641 y OEL642. ¡Pruebe la conmutación varias veces en un entorno de ensayo antes de confiar en el sistema en producción!
Materiales similares

Cómo guardar tus copias de WhatsApp antes del borrado

Subir y ver fotos 360° en Facebook

Convertir vídeos y audio con VLC: guía rápida

Foto de perfil personalizada en Netflix — Guía completa

Smartcards CCID en IPFire 2.19
