Solucionar Problemas Galera MariaDB

Comprobaciones del quórum

Aunque es poco probable, es posible que sus nodos ya no se consideren parte del componente primario. Podría haber habido un fallo en la red, quizás más de la mitad del clúster falló, Ha habido un apagado de todos los servidores del cluster, o hay una situación de split-brain. En estos casos, el nodo llega a sospechar que hay otro Componente Primario, al que ya no están conectados.

Esta pérdida de integridad puede ser un problema. Cuando ocurre, los nodos comenzarán a devolver un error de comando Desconocido a todas las consultas que se les dé que ejecutar: simplemente dejan de realizar sus tareas por temor a empeorar la situación al estar demasiado sincronizados con su verdadero clúster .

Comprobación del estado del Cluster

Puede ver si esto sucede ejecutando la instrucción SHOW STATUS y verificando la variable de estado wsrep_cluster_status. Específicamente, esto se realiza ejecutando la siguiente instrucción SQL en cada nodo:

SHOW GLOBAL STATUS LIKE 'wsrep_cluster_status';

+----------------------+---------+
| Variable_name        | Value   |
+----------------------+---------+
| wsrep_cluster_status | Primary |
+----------------------+---------+

El valor de retorno Primario indica que el nodo en el que se ejecutó es parte del Componente primario. Cuando la consulta devuelve cualquier otro valor, indica que el nodo es parte de un componente no operativo. Si ninguno de los nodos devuelve el valor Primario, debe restablecer el quórum.

Las situaciones en las que ninguno de los nodos muestra que son parte del componente primario son muy raras. Si descubre uno o más nodos con un valor Primario, puede indicar un problema con la conectividad de red, en lugar de la necesidad de restablecer el quórum. Investigue la posibilidad de conexión. Una vez que los nodos recuperan la conectividad de la red, se vuelven a sincronizar automáticamente con el componente primario.

Encontrar el nodo más avanzado

Antes de poder restablecer el quórum, debe identificar el nodo más avanzado del clúster. Es decir, debe encontrar el nodo cuya base de datos local confirmó la última transacción. Independientemente del método que utilice para restablecer el quórum, este nodo debe servir como punto de partida para el nuevo Componente primario.

Identificar el nodo más avanzado requiere que encuentre el nodo con el número de secuencia más alto (es decir, seqno). Puede determinar esto comprobando la variable de estado wsrep_last_committed. Desde el cliente de la base de datos en cada nodo, ejecute la siguiente consulta:

SHOW STATUS LIKE 'wsrep_last_committed';

+----------------------+--------+
| Variable_name        | Value  |
+----------------------+--------+
| wsrep_last_committed | 409745 |
+----------------------+--------+

El valor de retorno es el número de secuencia para la última transacción que el nodo confirmó. Si el demonio mysqld está inactivo, puede reiniciar mysqld sin iniciar Galera. Si no desea reiniciar las bases de datos, puede determinar el número de secuencia del archivo grastate.dat, ubicado en el directorio de datos.

Una vez que haya encontrado los números de secuencia de cada nodo, el que tenga el valor más alto es el más avanzado del clúster. Utilice ese nodo como punto de partida al iniciar el nuevo componente primario. Esto se explica en la siguiente sección aquí.

Recuperar Cluster Versiones Nuevas

La gente de MariaDB ha añadido un excelente binario que facilita la tarea y fácil de recordar: galera_new_cluster

root# galera_new_cluster 

# Verificamos que el nodo está activo (Primary)
root# mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_status';"
Enter password: 
+----------------------+---------+
| Variable_name        | Value   |
+----------------------+---------+
| wsrep_cluster_status | Primary |
+----------------------+---------+

# Verificamos el tamaño del clúster, solo 1 nodo
root# mysql -u root -p -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';"
Enter password: 
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

Restablecer el quórum

Cuando restablece el quórum, lo que está haciendo es arrancar el componente primario en el nodo más avanzado que tiene disponible. Este nodo funciona como el nuevo componente primario, alineando el resto del clúster con su estado.

Hay dos métodos disponibles para usted en este proceso: automático y manual. El recomendado para restablecer el quórum es el método automático. A diferencia del método manual, el arranque automático preserva la memoria caché del conjunto de escritura, o GCache, en cada nodo. Lo que esto significa es que cuando se inicia el nuevo componente primario, algunos o todos los nodos de unión se pueden aprovisionar rápidamente utilizando el método de transferencia de estado incremental (IST), en lugar del método más lento de transferencia de instantáneas de estado (SST).

Bootstrap automático

Al restablecer el quórum se iniciará el componente primario en el nodo más avanzado. Con el método automático, esto se hace habilitando dinámicamente pc.bootstrap a través de wsrep_provider_options a través del cliente de la base de datos; no se hace a través del archivo de configuración. Una vez que establezca esta opción, hará que el nodo sea un nuevo componente primario.

Para realizar un arranque automático, ejecute el siguiente comando utilizando el cliente mysql del nodo más avanzado:

SET GLOBAL wsrep_provider_options='pc.bootstrap=YES';

El nodo ahora funciona como el nodo inicial en un nuevo componente primario. Los nodos en componentes no operativos que tienen conectividad de red intentan iniciar transferencias de estado incrementales si es posible, transferencias de instantáneas de estado si no, con este nodo, actualizando sus propias bases de datos.

En el caso de que no arranque deberemos revisar el fichero

/var/lib/mysql/grastate.dat

Revisar el valor safe_to_bootstrap que estará a 0 y ponerlo a 1

safe_to_bootstrap: 1

Matar los procesos de MariaDB o Mysql y reiniciar el cluster con el comando

galera_new_cluster

A lo mejor debemos de ejecutarlo un par de veces hasta que arranque correctamente.


Bootstrap manual

Al restablecer el quórum, se inicia el componente primario en el nodo más avanzado. Con el método manual, esto se realiza cerrando el clúster, apagando mysqld en todos los nodos, y luego iniciando mysqld con Galera en cada nodo, comenzando con el más avanzado.

Para iniciar manualmente un clúster, primero determine el nodo más avanzado ejecutando lo siguiente desde la línea de comandos en cada nodo:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_last_committed'"

Una vez que haya determinado qué nodo tiene el número de secuencia más alto, puede comenzar a cerrar el clúster. Simplemente apague mysqld en todos los nodos del clúster, dejando el nodo más avanzado hasta el final. Para los servidores que usan init, teclea lo siguiente desde la línea de comandos:

service mysql stop

Para los servidores que usan systemd, ejecuta esto desde la línea de comandos:

systemctl stop mysql

Ahora está listo para iniciar el clúster nuevamente. Inicie el nodo más avanzado con la opción --wsrep-new-cluster, no los otros nodos. Para los servidores que usan init, ejecuta el siguiente comando:

service mysql start --wsrep-new-cluster

Para los servidores que usan systemd y Galera Cluster 5.5 o 5.6, teclea en su lugar lo siguiente desde la línea de comandos:

systemctl start mysqld --wsrep-new-cluster

Para los servidores MySQL que usan systemd y al menos la versión 5.7 de Galera Cluster, puede ejecutar el siguiente script desde la línea de comandos solo en el primer nodo:

mysqld_bootstrap

Para los servidores MariaDB que usan systemd, puedes intentar ejecutar el siguiente script desde la línea de comandos, nuevamente, solo en el primer nodo:

galera_new_cluster

Con ese primer nodo ejecutándose y actuando como Componente primario, no está listo para iniciar todos los demás nodos en el clúster. Para los servidores que usan init, ejecuta el siguiente comando:

service mysql start

Para los servidores que usan systemd, teclea en su lugar lo siguiente desde la línea de comandos:

systemctl start mysqld

En todos estos scripts está escrita la opción --wsrep-new-cluster, pero se hace con cierta delicadeza. Independientemente del método o secuencia de comandos que utilice, cuando el primer nodo comienza con la opción --wsrep-new-cluster, inicializa un nuevo clúster utilizando los datos del estado más avanzado disponible del clúster anterior. A medida que los otros nodos comienzan, se conectan a este nodo y solicitan transferencias de instantáneas de estado para actualizar sus propias bases de datos. En poco tiempo, todos deberían sincronizarse y funcionar sin problemas.


Revision #1
Created 17 May 2022 14:34:53 by Admin
Updated 17 May 2022 14:35:35 by Admin