¿Cómo configurar STONITH en un clúster de marcapasos HA / linux activo / pasivo de 2 nodos?

12

Estoy tratando de configurar un clúster activo / pasivo (2 nodos) Linux-HA con corosync y marcapasos para mantener una base de datos PostgreSQL en funcionamiento. Funciona a través de DRBD y un servicio de ip. Si el nodo1 falla, el nodo2 debería hacerse cargo. Lo mismo si PG se ejecuta en el nodo 2 y falla. Todo funciona bien, excepto la cosa STONITH.

Entre los nodos hay una conexión HA dedicada (10.10.10.X), por lo que tengo la siguiente configuración de interfaz:

eth0            eth1            host
10.10.10.251    172.10.10.1     node1
10.10.10.252    172.10.10.2     node2

Stonith está habilitado y estoy probando con un agente ssh para matar nodos.

crm configure property stonith-enabled=true
crm configure property stonith-action=poweroff
crm configure rsc_defaults resource-stickiness=100
crm configure property no-quorum-policy=ignore

crm configure primitive stonith_postgres stonith:external/ssh \
                params hostlist="node1 node2"
crm configure clone fencing_postgres stonith_postgres

crm_mon -1 muestra:

============
Last updated: Mon Mar 19 15:21:11 2012
Stack: openais
Current DC: node2 - partition with quorum
Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
2 Nodes configured, 2 expected votes
4 Resources configured.
============

Online: [ node2 node1 ]

Full list of resources:

 Master/Slave Set: ms_drbd_postgres
     Masters: [ node1 ]
     Slaves: [ node2 ]
 Resource Group: postgres
     fs_postgres        (ocf::heartbeat:Filesystem):    Started node1
     virtual_ip_postgres        (ocf::heartbeat:IPaddr2):       Started node1
     postgresql (ocf::heartbeat:pgsql): Started node1
 Clone Set: fencing_postgres
     Started: [ node2 node1 ]

El problema es: cuando corto la conexión entre las interfaces eth0, mata ambos nodos . Creo que es un problema con el quórum, porque solo hay 2 nodos. Pero no quiero agregar un tercer nodo solo para calcular el quórum correcto.

¿Hay alguna idea para resolver este problema?

MMás
fuente
¿Cómo se ve la salida de crm_moncuando su clúster está en un estado fallido?
Larsks
1
Ahora estoy usando un dispositivo stonith que no se ejecuta en el mismo nodo como postgres. ¡Este trabajo es como se esperaba!
MMore

Respuestas:

21

Esta es una pregunta un poco más antigua, pero el problema presentado aquí se basa en una idea errónea sobre cómo y cuándo funciona la conmutación por error en clústeres, especialmente en clústeres de dos nodos.

La esencia es: no puede realizar pruebas de conmutación por error deshabilitando la comunicación entre los dos nodos. Hacerlo dará como resultado exactamente lo que está viendo, un escenario de cerebro dividido con STONITH mutuo adicional. Si desea probar las capacidades de cercado, killall -9 corosynclo hará un simple en el nodo activo. Otras formas son crm node fenceo stonith_admin -F.

De la descripción no bastante completa de su clúster (¿dónde está la salida de crm configure showy cat /etc/corosync/corosync.conf?) Parece que está utilizando las direcciones 10.10.10.xx para la mensajería, es decir, comunicación Corosync / cluster. Las direcciones 172.10.10.xx son sus direcciones de red regulares / de servicio y usted accedería a un nodo determinado, por ejemplo utilizando SSH, por su dirección 172.10.10.xx. DNS también parece resolver un nombre de host de nodo como node1172.10.10.1.

Usted ha configurado STONITH para usar SSH, lo cual no es una muy buena idea en sí mismo, pero probablemente solo esté probando. No lo he usado, pero supongo que el agente SSH STONITH inicia sesión en el otro nodo y emite un comando de apagado, como ssh root@node2 "shutdown -h now"o algo equivalente.

Ahora, ¿qué sucede cuando corta la comunicación de clúster entre los nodos? Los nodos ya no ven cada nodo como vivo y bien, porque no hay más comunicación entre ellos. Por lo tanto, cada nodo asume que es el único sobreviviente de algún evento desafortunado e intenta convertirse (o permanecer) en el nodo activo o primario. Este es el escenario clásico y temido de cerebro dividido .

Parte de esto es asegurarse de que el otro nodo, obviamente y presumiblemente fallido, esté inactivo para siempre, que es donde entra STONITH. Tenga en cuenta que ambos nodos ahora están jugando el mismo juego: tratando de volverse (o permanecer) activos y tomar sobre todos los recursos del clúster, así como disparar al otro nodo en la cabeza.

Probablemente puedas adivinar lo que sucede ahora. node1hace ssh root@node2 "shutdown -h now"y node2hace ssh root@node1 "shutdown -h now". Esto no utiliza la red de comunicación del clúster 10.10.10.xx sino la red de servicio 172.10.10.xx. Dado que ambos nodos están vivos y bien, no tienen problemas para emitir comandos o recibir conexiones SSH, por lo que ambos nodos se disparan entre sí al mismo tiempo. Esto mata a ambos nodos.

Si no usa STONITH, un cerebro dividido podría tener consecuencias aún peores, especialmente en el caso de DRBD, donde podría terminar con ambos nodos convirtiéndose en Primario. Es probable que ocurra corrupción de datos y el cerebro dividido debe resolverse manualmente.

Recomiendo leer el material en http://www.hastexo.com/resources/hints-and-kinks que está escrito y mantenido por los chicos que contribuyeron (y aún contribuyen) una gran parte de lo que hoy llamamos "el Linux HA apilar".

TL; DR : Si está cortando la comunicación del clúster entre sus nodos para probar su configuración de cercado, lo está haciendo mal . Uso killall -9 corosync, crm node fenceo en su stonith_admin -Flugar. Cortar la comunicación del clúster solo dará como resultado un escenario de cerebro dividido, que puede y conducirá a la corrupción de datos.

narciso
fuente
2

Puede intentar agregar auto_tie_breaker: 1a la sección de quórum de /etc/corosync/corosync.conf

Cuando ATB está habilitado, el clúster puede sufrir hasta el 50% de los nodos que fallan al mismo tiempo, de manera determinista. La partición del clúster, o el conjunto de nodos que todavía están en contacto con el nodo que tiene el nodeid más bajo, permanecerá en quorate. Los otros nodos serán consultados.

1mi
fuente
0

Intente leer el capítulo Quórum y clústeres de dos nodos de la documentación de Pacemaker.

larsks
fuente
Creo que te refieres a la cosa 'política sin quórum = ignorar'. Ya lo configuré (edité también mi primera publicación). No me ayuda aquí. ¿Puedes ponerle un punto más fino, por favor?
MMore
Bueno, la documentación sugiere que el marcapasos registrará algunos mensajes específicos si hay problemas de quórum con el clúster. ¿Ves eso en tus registros? ¿Qué crm_monmuestra?
Larsks
No puedo encontrar algo. interesante en los registros. Edité mi primera publicación con información de crm_mon -1.
MMore