Red Hat Cluster: dlm y clvmd bloqueados con un nodo caído

En un entorno de cluster de 2 nodos con Red Hat Enterprise Linux 7 (o CentOS 7) que cuenta recursos del tipo DLM y CLVMD para GFS2, cuando uno de los nodos que forman el cluster está fuera de servicio el otro nodo no podrá levantar estos recursos hasta que el nodo caído vuelva a unirse al cluster. En definitiva, todo lo que depende de clvm, dlm o gfs2 necesita que ambos nodos estén arriba.

El origen de este comportamiento es, que cuando configuramos un cluster de dos nodos con pacemaker y corosync utilizando two_node: 1 en este último (/etc/corosync/corosync.conf), automáticamente se activa otra propiedad llamada wait_for_all. Esta propiedad obliga a que cualquier nodo del cluster tenga que esperar a que el resto estén online para volver a buscar quorum y levantar los servicios. Es decir, si levantamos sólo una parte del cluster los recursos no se iniciarán hasta que se levante el resto, y esto pasaría tanto en un cluster de dos nodos (sólo levantamos uno) como en uno de cuatro levantando tres.

Una solución que se podría plantear sería utilizar la propiedad de pcs no-quorum-policy pero DLM seguiría fallando al no tener quorum.

Actualmente, la única forma de poder desbloquear el wait_for_all y que los recursos de cluster levanten aunque haya nodos caídos es utilizando la feature que Red Hat ofrece a partir de la solicitud del bug de Red Hat Bugzilla #1086233. Se trata de un parche en corosync (>= 2.3.4-4) con una nueva cmap key que permite forzar a corosync el desbloqueo de la espera y recalcular quorum:

# pcs cluster quorum unblock
quorum.cancel_wait_for_all

Tells votequorum to cancel waiting for all nodes at cluster startup. Can be used to unblock quorum if notes are known to be down. for pcs use only.

Podéis encontrar más información sobre este comportamiento en esta KB de RHEL (requiere suscripción) o en los bugs de la Red Hat Bugzilla que he indicado antes.