Contexto: Esta práctica configura DRBD (Distributed Replicated Block Device) en dos nodos (denominados nodo-a y nodo-b) con Debian 13.4, para replicar un volumen de datos entre ambos en tiempo real. Cada nodo cuenta con una partición adicional (p.ej. /dev/sdb1) de tamaño idéntico destinada a DRBD. El objetivo es lograr un «RAID-1 de red»: cualquier cambio en el nodo Primario se replicará al Secundario de forma continua, manteniendo ambas copias sincronizadas. DRBD es un módulo del kernel de Linux que se ubica entre el planificador de I/O (parte inferior) y el sistema de archivos (parte superior), actuando como controlador de un dispositivo de bloque virtual. Esto significa que las aplicaciones leen y escriben datos sin saber que, en la capa de bloques, esos datos están siendo duplicados por red en otro servidor — la replicación es transparente para ellas.

A continuación se explica cada paso en detalle, indicando qué se hace, por qué se hace y qué ocurre internamente en la pila de I/O de Linux (aplicación → sistema de archivos → dispositivo DRBD → disco → red), junto con verificaciones, advertencias y errores comunes.


Paso 1: Instalación de DRBD en ambos nodos

Qué se hace: Se instala el paquete de utilidades de DRBD en los dos servidores. En Debian, el paquete se denomina drbd-utils y contiene las herramientas de espacio de usuario (drbdadm, drbdsetup, drbdmeta) necesarias para configurar y manejar DRBD. En Debian, la porción de módulo de DRBD se distribuye con los kernels de Debian, por lo que instalar drbd-utils generalmente es suficiente sin compilar nada adicional. El comando es:

sudo apt update && sudo apt install -y drbd-utils

Esto se ejecuta en nodo-a y nodo-b. La opción -y auto-confirma la instalación. Se instalan las herramientas de administración que se comunican con el módulo del kernel para configurar y administrar los recursos DRBD.

Por qué se hace: DRBD tiene dos componentes: un módulo en el kernel (el driver de bloque replicado, con número mayor de dispositivo 147) y herramientas en user-space para su administración. Sin instalar drbd-utils, no tendríamos los comandos necesarios para crear metadatos, levantar recursos ni monitorear el estado de la replicación.

Internamente (capa afectada): Aquí solo añadimos software; aún no cambia nada en la pila de I/O. Tras la instalación, el módulo kernel estará disponible para cargarse al usarlo más adelante, y las herramientas de administración quedarán listas.

Verificación:

Errores comunes:

ProblemaSíntomaSolución
Repositorios o redapt falla al descargar paquetesVerificar conexión a internet y que /etc/apt/sources.list tenga repositorios válidos
Permisos insuficientesError de permisos al instalarEjecutar como root o con sudo
Módulo kernel ausente (entorno virtual)modprobe drbd falla con «Module not found»En kernels virtuales, instalar linux-modules-extra-$(uname -r)
Versiones distintas entre nodosError de protocolo al conectar nodosAsegurar que ambos nodos tengan la misma versión de drbd-utils

Paso 2: Preparación del disco o partición en cada nodo

Qué se hace: Se designa un dispositivo de bloque dedicado en cada servidor para la replicación. En producción se suele usar un disco entero; en laboratorio, una partición (p.ej. /dev/sdb1). Es fundamental que esta partición: (a) tenga el mismo tamaño en ambos nodos, y (b)no esté montada ni en /etc/fstab. La verificación se realiza con:

lsblk -f

Este comando lista los dispositivos de bloque. Debe confirmarse que /dev/sdb1 existe en ambos nodos, que no tenga punto de montaje asignado y que su tamaño sea idéntico.

Por qué se hace: DRBD replica bloques de datos crudos. Necesitamos almacenamiento dedicado que DRBD controlará exclusivamente. Ambas particiones deben ser de tamaño idéntico para que la réplica funcione correctamente. DRBD soporta cualquier dispositivo de bloque soportado por Linux: partición o disco duro completo, RAID por software, LVM o EVMS.

Internamente (capa afectada): Solo preparamos la capa de almacenamiento físico (el nivel más bajo de la pila I/O). No hemos configurado DRBD ni hay tráfico de red aún.

Verificación:

Errores comunes:

ProblemaSíntomaSolución
Partición montadadrbdadm create-md falla al bloquear dispositivoDesmontar con umount y verificar que ningún proceso la use (lsof /dev/sdb1)
Tamaño inconsistenteDRBD ajusta al menor, dejando espacio desperdiciadoReparticionar al mismo tamaño antes de continuar
Confundir disco y particiónApuntar a /dev/sdb cuando debe ser /dev/sdb1Verificar con lsblk y usar exactamente la ruta que aparece en la configuración
Datos previos en la particiónAdvertencia de destrucción de datos al inicializarSi los datos no son necesarios, confirmar; si lo son, respaldarlos primero

Paso 3: Configuración básica del recurso DRBD (/etc/drbd.d/web.res)

Qué se hace: Se crea un archivo de configuración que define el recurso DRBD (el nombre lógico de la pareja de discos replicados). El archivo /etc/drbd.d/web.res debe ser idéntico en ambos nodosy contiene:

resource webdata {
    protocol    C;

    on nodo-a {
        device      /dev/drbd0;
        disk        /dev/sdb1;
        address     192.168.1.10:7789;
        meta-disk   internal;
    }

    on nodo-b {
        device      /dev/drbd0;
        disk        /dev/sdb1;
        address     192.168.1.11:7789;
        meta-disk   internal;
    }
}

Explicación línea por línea

Comparativa rápida de protocolos:

ProtocoloTipoConfirmación de escrituraRiesgo ante fallo del Primary
A (Asíncrono)Tras disco local + paquete en buffer TCPPosible pérdida de las actualizaciones más recientes
B (Semisíncrono)Tras disco local + recepción en memoria remotaDatos normalmente seguros; riesgo si ambos nodos fallan simultáneamente
C (Síncrono) ✅Tras disco local + disco remotoCero pérdida de datos

Por qué se hace: Esta configuración define cómo se conectará y comportará el recurso replicado: qué disco local usar, a qué compañero conectarse por red, con qué garantías de sincronización y dónde guardar los metadatos internos.

Internamente (capa afectada): Solo se modifica la capa de configuración (espacio de usuario). Todavía no se han creado dispositivos ni comunicaciones de red. Estamos preparando la «hoja de ruta» que DRBD seguirá.

Verificación:

Errores comunes / Advertencias:

ProblemaSíntomaSolución
Error de sintaxis en .resdrbdadm indica número de línea con errorRevisar corchetes, puntos y coma, y ortografía
Nombre de host incorrecto«No valid configuration found for this host»uname -n debe coincidir con la sección on <nombre> en el archivo
Archivo no copiado al segundo nodoSegundo nodo queda en StandAlone, no reconoce recursoCopiar con scp el archivo .res al otro nodo
Puerto bloqueado por firewallLos nodos no conectan (cs:Timeout)Abrir el puerto TCP configurado en ambos nodos

Paso 4: Inicializar el recurso DRBD en ambos nodos (metadatos y arranque)

Se ejecutan dos comandos en cada nodo: primero se crean los metadatos, luego se activa el recurso.

Comando 4.1 — Crear metadatos: drbdadm create-md webdata

Este comando inicializa el área de metadatos de DRBD en el dispositivo de respaldo (/dev/sdb1). Al ejecutarlo, si la partición contiene datos previos, DRBD mostrará una advertencia y pedirá confirmación explícita (debe escribirse la palabra completa yes):

About to create a new drbd meta data block on /dev/sdb1.
  ==> This might destroy existing data! <==
Do you want to proceed? [need to type 'yes' to confirm] yes
Creating meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block successfully created.

create-md escribe estructuras de control al final de la partición: un bitmap de seguimiento de bloques modificados, un activity log para la consistencia de escrituras y campos como el UUID del conjunto de datos. Solo se ejecuta una vez, antes del primer uso del recurso.

Comando 4.2 — Activar recurso: drbdadm up webdata

Este comando adjunta el dispositivo de bloque real al driver DRBD y levanta el dispositivo virtual/dev/drbd0 en cada nodo. Efectúa internamente la carga de la configuración del recurso, el attach del disco y el intento de conexión al nodo par.

Por qué se hace: Sin los metadatos, DRBD no podría rastrear qué bloques han sido modificados para la replicación diferencial. Sin drbdadm up, el dispositivo virtual no existe y los nodos no se comunican. Este paso pone en marcha el motor de DRBD.

Internamente (capas afectadas):

Estado esperado tras drbdadm up en ambos nodos: Al no haber definido aún un Primario, ambos nodos quedan como Secondary/Secondary con discos Inconsistent/Inconsistent. Esta salida es normal y esperada en una configuración nueva:

0: cs:Connected  ro:Secondary/Secondary  ds:Inconsistent/Inconsistent  C

Esto indica: nodos conectados (cs:Connected), ambos en rol Secundario (ninguno es Primario), y discos inconsistentes (DRBD no sabe cuál tiene datos válidos porque falta la sincronización inicial).

En DRBD 9 con drbdadm status, la salida equivalente tiene un formato más legible:

webdata role:Secondary
  disk:Inconsistent
  nodo-b role:Secondary
    disk:Inconsistent

Verificación:

Errores comunes:

ProblemaSíntomaSolución
No confirmar yes en create-mdComando se aborta sin cambiosRelanzar y escribir la palabra completa yes (no «y», no Enter solo)
Solo un nodo ejecutó upEstado WFConnection (esperando al par)Ejecutar drbdadm up webdata también en el otro nodo
Módulo no cargadoError «can’t open device»Ejecutar modprobe drbd manualmente antes de drbdadm up
Firewall bloquea puertocs:Timeout o Connecting persistenteVerificar y abrir el puerto TCP 7789 en ambos nodos
Dispositivo inexistenteError al adjuntar discoVerificar que la ruta /dev/sdb1 es correcta con lsblk

Paso 5: Forzar un nodo Primario (sincronización inicial)

Qué se hace: Designamos a nodo-a como Primario para arrancar la replicación inicial. En nodo-a se ejecuta:

drbdadm — –overwrite-data-of-peer primary webdata

La construcción con doble guion -- indica a drbdadm que pase la opción --overwrite-data-of-peer al comando subyacente drbdsetup. Esta opción le dice a DRBD: «Promociona este nodo a Primary, considerando que mis datos son la copia buena y sobreescribiendo la del peer». Se debe ejecutar una sola vez, solo en el nodo elegido como fuente, y solo durante la configuración inicial del recurso.

Por qué se hace: DRBD necesita saber qué lado tiene los datos «correctos» para comenzar a replicar. La guía oficial de LINBIT advierte: «Si se realiza la sincronización inicial en la dirección equivocada, se perderán esos datos. Proceda con precaución». En una configuración nueva con discos vacíos, la elección es arbitraria; pero en producción, si un nodo ya tuviera datos valiosos, se debe elegir ese como Primario inicial.

Sin esta orden, ningún nodo se dejará promover a Primario: DRBD rechaza el cambio con el error «State change failed: (-2) Need access to UpToDate data», protegiéndonos contra la promoción de un nodo sin datos válidos.

Internamente (capas afectadas):

Dato importante: Según la documentación oficial de LINBIT, «su dispositivo DRBD está totalmente operativo incluso antes de que la sincronización inicial haya terminado (aunque con rendimiento ligeramente reducido). Si se partió de discos vacíos, ya es posible crear un sistema de archivos en el dispositivo». No obstante, para esta práctica de laboratorio es recomendable esperar al 100% para confirmar que todo funciona antes de continuar.

Verificación: Observar el progreso de la sincronización con cualquiera de estos métodos:

0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C
[>....................] sync'ed: 0.4% (1048508/1048508)K
finish: 0:43:41 speed: 0 (0) K/sec

El estado final esperado al completar la sincronización:

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C

Donde UpToDate/UpToDate confirma que ambos nodos tienen datos idénticos y el recurso está totalmente operativo.

Errores comunes / Advertencias:

ProblemaSíntomaSolución
Omitir este pasoNo se puede formatear ni montar: «Need access to UpToDate data»Ejecutar el comando de promoción con --overwrite-data-of-peer
Parámetros mal escritosError de sintaxis o rechazoVerificar exactamente: -- --overwrite-data-of-peer (doble guion, espacio, doble guion + opción)
Ejecutar en ambos nodosSplit-brain: dos primarios divergentes → DRBD corta la conexiónNunca ejecutar la promoción forzada en más de un nodo. Si ocurrió, se requiere resolución manual de split-brain
Sincronización muy lentaProgreso bajo (K/sec)Verificar velocidad de red entre nodos; considerar configurar syncer { rate <velocidad>; } en el archivo de recursos

Paso 6: Crear el sistema de archivos en el dispositivo DRBD (nodo Primario)

Qué se hace: Con el recurso sincronizado (UpToDate/UpToDate) y en rol Primary en nodo-a, se formatea /dev/drbd0 con ext4:

sudo mkfs.ext4 /dev/drbd0

Este comando se ejecuta solo en el nodo Primario (nodo-a), una única vez. Crea las estructuras del sistema de archivos ext4 (superbloque, tabla de inodos, mapas de bits, etc.) sobre el dispositivo de bloque replicado.

Por qué se hace: Necesitamos un sistema de archivos para almacenar ficheros de forma estructurada. Ext4 es una elección estándar en Linux. DRBD presenta /dev/drbd0 como un disco convencional al sistema, por lo que mkfs.ext4 funciona igual que sobre cualquier disco local. En configuraciones single-primary como la nuestra, se usan sistemas de archivos convencionales (ext4, XFS). Un sistema de archivos de clúster (GFS2, OCFS2) solo se necesitaría en configuraciones dual-primary, ya que DRBD no puede agregar capacidad activo-activo a sistemas de archivos que no la poseen nativamente.

Internamente (capas afectadas): El comando actúa a nivel de capa de sistema de archivos sobre el dispositivo de bloque virtual DRBD. Los cambios producidos por mkfs son interceptados por DRBD en nodo-a, que los replica por red a nodo-b en tiempo real. Al finalizar, ambos discos físicos contienen una copia idéntica del sistema de archivos ext4 recién creado, aunque nodo-b no puede acceder a esos datos todavía (permanece en rol Secondary).

Verificación:

Errores comunes / Advertencias:

ProblemaSíntomaSolución
Ejecutar en nodo SecundarioError de permisos o dispositivo ocupadoEjecutar solo en el nodo que está en rol Primary
Formatear /dev/sdb1 en vez de /dev/drbd0⚠️ Crítico: datos escritos fuera de DRBD, nodo-b no recibe nada → inconsistencia permanenteToda operación debe hacerse sobre /dev/drbdX, nunca sobre el dispositivo crudo, ya que DRBD usa la última parte del dispositivo crudo para metadatos y el acceso directo causará datos inconsistentes
Formatear en ambos nodosInnecesario y peligroso → se necesitaría re-promover al otro nodo, rompiendo la sincroníaFormatear solo una vez, en el Primary. El Secondary ya tiene la réplica a nivel de bloque
Usar un FS de clúster (GFS2/OCFS2) sin dual-primaryError o comportamiento inesperadoEn modo single-primary, usar ext4 o XFS es lo correcto

Paso 7: Montar el sistema de archivos replicado solo en el nodo Primario activo

Qué se hace: En nodo-a (Primary) se monta el nuevo sistema de archivos ext4 en el directorio de destino:

sudo mount /dev/drbd0 /var/www/html

Tras esto, el directorio /var/www/html en nodo-a queda respaldado por el dispositivo DRBD replicado. En nodo-b no se monta nada: su DRBD sigue en modo Secondary.

Por qué se hace: Montar el dispositivo permite que las aplicaciones (p.ej. un servidor Apache) utilicen el sistema de archivos replicado. Solo el Primario monta el sistema de archivos en configuraciones activo/pasivo, ya que un dispositivo DRBD en rol Secondaryprohíbe completamente el acceso, tanto de lectura como de escritura. La razón de prohibir incluso la lectura es la necesidad de mantener la coherencia de caché, que sería imposible si un recurso secundario fuera accesible de cualquier forma.

Internamente (capas afectadas): Montar implica que la capa de sistema de archivos (ext4) entra en juego sobre el dispositivo de bloque DRBD en nodo-a. Las escrituras realizadas por las aplicaciones producen operaciones de I/O sobre /dev/drbd0. DRBD en nodo-a intercepta cada escritura y la envía por la red a nodo-b (que la persiste en su disco local), manteniendo la sincronización en tiempo real. Las lecturas se atienden localmente desde el disco de nodo-a, sin latencia de red adicional.

Verificación:

Errores comunes / Advertencias:

ProblemaSíntomaSolución
⚠️ Montar en AMBOS nodos con ext4Corrupción de datos garantizada: ext4 no soporta acceso concurrente multi-nodoJamás montar el FS en el nodo Secondary con un FS convencional
Intentar montar en nodo SecondaryError de permisos / dispositivo inaccesibleMontar solo en el nodo en rol Primary
Directorio destino no existeError «mount point does not exist»Crear el directorio previamente: mkdir -p /var/www/html
Montar manualmente y luego usar PacemakerConflicto entre el montaje manual y el gestor de clústerSi se planea usar Pacemaker (siguiente fase), no montar manualmente — Pacemaker se encargará de controlar montaje/desmontaje

Tabla resumen: Comando → Función → Verificación → Error frecuente

PasoComandoQué haceVerificaciónError frecuente
1apt install -y drbd-utilsInstala herramientas de administración DRBDdrbdadm --versionMódulo kernel ausente en entorno virtual
2lsblk -fIdentifica y verifica la partición libreSin punto de montaje, tamaño idéntico en ambos nodosPartición montada o tamaño distinto
3nano /etc/drbd.d/web.resDefine el recurso, protocolo, nodos, IPs y metadatosdrbdadm dump all sin erroresNombre de host no coincide con uname -n
4adrbdadm create-md webdataInicializa metadatos DRBD en el discoMensaje «successfully created»No escribir yes completo al confirmar
4bdrbdadm up webdataLevanta /dev/drbd0 y conecta con el parcat /proc/drbdcs:ConnectedEjecutar solo en un nodo → WFConnection
5drbdadm -- --overwrite-data-of-peer primary webdataPromociona a Primary e inicia sincronización inicialUpToDate/UpToDate tras completarError «Need access to UpToDate data» si se omite la opción
6mkfs.ext4 /dev/drbd0Crea sistema de archivos ext4 sobre el volumen replicadoblkid /dev/drbd0TYPE="ext4"Formatear /dev/sdb1 en vez de /dev/drbd0
7mount /dev/drbd0 /var/www/htmlMonta el FS replicado en el directorio de datosdf -h muestra /dev/drbd0 montadoIntentar montar en el nodo Secondary

Nota sobre la arquitectura por capas y el flujo completo

Para recapitular cómo la pila de I/O de Linux opera tras completar todos los pasos, la guía oficial de LINBIT describe la posición de DRBD mediante su «Figure 1: DRBD’s position within the Linux I/O stack»:

  Aplicación (Apache, MySQL, etc.)
         ↓ lectura/escritura de archivos
  Sistema de archivos (ext4)
         ↓ operaciones de bloque
  DRBD (/dev/drbd0)  ←——→  Red TCP/IP (puerto 7789)  ←——→  DRBD remoto (/dev/drbd0)
         ↓                                                          ↓
  Disco físico (/dev/sdb1)                                 Disco físico (/dev/sdb1)
      [nodo-a: Primary]                                     [nodo-b: Secondary]

¿Por qué aún no usamos Pacemaker?

En esta práctica se configuró DRBD de forma manual (promoción manual del Primary, montaje manual). En un entorno de producción real, esto es insuficiente: si nodo-a falla, nadie promoverá automáticamente a nodo-b. Para eso se integra DRBD con Pacemaker (gestor de recursos de clúster) usando Corosync (capa de comunicación). Pacemaker automatiza:

  1. Monitorear la salud de los nodos.
  2. Promover el Secondary a Primary si el Primary falla.
  3. Montar el sistema de archivos.
  4. Arrancar el servicio (Apache, etc.).
  5. Mover la IP virtual al nuevo nodo activo.

La configuración de Pacemaker/Corosync con DRBD será objeto de la siguiente práctica. La documentación oficial de LINBIT cubre explícitamente esta integración, incluyendo configuraciones avanzadas con LVM, GFS, OCFS2 y el software DRBD Reactor como alternativa más sencilla de configurar. Primero se debe dominar la base (DRBD manual) para entender qué hace Pacemaker «por debajo del capó».


Puntos clave para el estudiante

⚠️ NUNCA montar en ambos nodos con ext4

Un dispositivo DRBD en rol Secondary prohíbe completamente el acceso (ni lectura ni escritura) para mantener la coherencia de caché. Montar un FS convencional en ambos nodos simultáneamente causaría corrupción de datos inmediata.

⚠️ NUNCA operar sobre el disco crudo

Todas las operaciones (formatear, montar, leer, escribir) deben hacerse sobre /dev/drbd0, nunca sobre /dev/sdb1. DRBD usa la última parte del dispositivo crudo para metadatos; acceder directamente al disco subyacente causará datos inconsistentes.

🔑 DRBD replica bloques, no archivos

DRBD opera en la capa de bloques del kernel, debajo del sistema de archivos. No «sabe» qué archivos contiene el volumen — replica cada bloque modificado de forma transparente. Esto lo hace agnóstico de la carga de trabajo: sirve igual para bases de datos, servidores web o máquinas virtuales.

📊 Protocolo C = máxima seguridad

En Protocolo C, cada escritura se confirma a la aplicación solo después de que ambos nodos hayan persistido los datos en disco. Esto garantiza cero pérdida de datos ante failover, a cambio de mayor latencia por escritura (retardo de red + I/O del segundo nodo).