Estoy ejecutando un clúster de 2 nodos con DRBD (activo/pasivo) administrado por el servicio drbd systemd y un pequeño script que monta volúmenes cada vez que un recurso se vuelve primario.
Quiero configurar el DRBD de tal manera que siempre resuelva cualquier cerebro dividido y siempre tenga al menos un nodo que sea primario y capaz de servir en cualquier caso, siempre y cuando ambas máquinas no estén inactivas.
Probé la siguiente configuración (dónde pri-lost-after-sb
está "reboot"
)
after-sb-0pri discard-younger-primary;
after-sb-1pri discard-secondary;
after-sb-2pri call-pri-lost-after-sb;
y on-suspended-primary-outdated force-secondary
algunas otras combinaciones.
Pero siempre encuentro un escenario en el que el grupo entra en mal estado y no se recupera de un cerebro dividido. Por lo general, accedo StandAlone
a los nodos y force-io-failures
al secundario (por lo que, después de otro fallo del primario, este secundario no funcionará incluso si está conectado).
¿Hay algo más que pueda hacer para mejorar la solidez de esta configuración considerando que priorizo el tiempo de actividad del servicio y no evitar la pérdida de datos?
Respuesta1
En el pasado, intenté varias veces configurar un clúster similar. Eso fue hasta que entendí que DRBD está roto por diseño y se llama "cerebro dividido" como segundo nombre. En DRBD9, las cosas mejoraron un poco (sólo en comparación con 8.xx, que fue una pesadilla) pero todavía no se puede usar en producción. Solo veo una solución: ahorre tiempo y migre a algo más confiable. Por ejemplo, Cefe.