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?
crm_mon
cuando su clúster está en un estado fallido?Respuestas:
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 corosync
lo hará un simple en el nodo activo. Otras formas soncrm node fence
ostonith_admin -F
.De la descripción no bastante completa de su clúster (¿dónde está la salida de
crm configure show
ycat /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 comonode1
172.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.
node1
hacessh root@node2 "shutdown -h now"
ynode2
hacessh 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 fence
o en sustonith_admin -F
lugar. 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.fuente
Puede intentar agregar
auto_tie_breaker: 1
a la sección de quórum de /etc/corosync/corosync.conffuente
Intente leer el capítulo Quórum y clústeres de dos nodos de la documentación de Pacemaker.
fuente
crm_mon
muestra?crm_mon -1
.Verifique esto para el clúster HA utilizando Pacemaker: http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Clusters_from_Scratch/index.html
fuente