STONITH simple con ProxySQL y Orchestrator

Los sistemas distribuidos son difíciles, solo quiero repetirlos. En MySQL, tenemos una serie de opciones para ejecutar sistemas de alta disponibilidad. Sin embargo, los verdaderos sistemas tolerantes a fallas son difíciles de obtener.

Tomemos como ejemplo un caso de uso común de replicación de múltiples DC donde el orquestador es responsable de la administración de la topología, mientras que ProxySQL maneja el enrutamiento/proxy al servidor correcto, como se ilustra a continuación. Un caso raro que puede encontrar es que el MySQL principal
nodo 01 en DC1 podría tener un parpadeo durante un par de segundos. Debido a que Orchestrator utiliza el control de salud adaptativo, no solo el nodo en sí, sino que también consulta sus réplicas, puede reaccionar muy rápido y promover el nodo en DC2.

¿Por qué es esto problemático?

El problema ocurre cuando
nodo 01 resuelve su problema temporal. Podría ocurrir una condición de carrera en ProxySQL que podría volver a marcar como lectura-escritura. Puede extender un período «fuera de línea» en ProxySQL para asegurarse de que Orchestrator encuentre el nodo primero. Espero que lo haga leer de inmediato, pero lo que queremos es una capa adicional de comportamiento predecible. Esto normalmente viene en forma de STONITH – al dejar el otro nodo fuera de servicio, prácticamente reducimos el riesgo de conflicto a casi cero.

La solución

Orchestrator admite ganchos para hacer esto, pero también podemos hacerlo fácilmente con ProxySQL usando su programador integrado. En este caso, creamos una secuencia de comandos en la que a menudo se consulta al orquestador en busca de nodos marcados recientemente como
falta del tiempo, y también lo marcamos como tal en ProxySQL. en el guion proxy-oc-herramienta.sh se puede encontrar en Github.

¿Qué hace este guión? En el caso de nuestra topología:

  • Si por alguna razón, conéctese a MySQL
    nodo 01 falla, el orquestador elegirá
    nodo 02 como la nueva primaria.
  • Entonces
    nodo 01 es inaccesible – no se puede cambiar
    solo lectura ni actualizar la replicación – se marcará como
    falta del tiempo con
    juego terminadoenrecuperación como la razón.

  • nodo 01 vuelva a estar en línea y ProxySQL lo verá antes de que se pueda agrupar la próxima verificación de Orchestrator. Entonces es posible que tenga dos nodos grabables en el grupo host.
  • Para evitar la condición anterior, Orchestrator marca el nodo con tiempo de inactividad, el script proxy-oc-herramienta.sh lo marcare
    DESCONECTADO_SOFT por lo que nunca se encuentra
    escritor_hostgroup en ProxySQL.
  • Una vez que un operador lo repara
    nodo 01 es decir, se vuelve a adjuntar como una réplica y la elimina
    falta del tiempo marca y guion proxy-oc-herramienta.sh lo marcare de nuevo
    EN LÍNEA automáticamente.
  • Además, si DC1 está completamente desconectado de DC2 y AWS, la secuencia de comandos no podrá llegar a la cabeza de la balsa del orquestador y establecerá todos los nodos en
    DESCONECTADO_SOFT evitar la escritura aislada en DC1.

Agregar el script a ProxySQL es simple. Primero descargue y establezca los permisos. armé el guión
/usuario/compartimiento/ – pero puede colocarlo en cualquier lugar accesible desde el proceso ProxySQL.

Tenga en cuenta que deberá editar algunas variables en el script, es decir,
ORCHESTRATOR_PATH .

Luego sube al planificador:

Establecí el intervalo en cinco segundos ya que en ProxySQL, un nodo rechazado necesita unos 10 segundos antes de que se realice la siguiente verificación de solo lectura. De esta forma, este script siempre está delante de ProxySQL y puede marcar el nodo muerto como
DESCONECTADO_SOFT .

Debido a que esta es la versión más simple, existen mejoras adicionales obvias que se deben realizar en el script, como el uso del programador para especificar y
ORCHESTRATOR_PATH implementar la comprobación de errores.

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario