Skip to main content

MariaDB Galera Status

Comandos para verificar el estatus de un Cluster de Galera con MariaDB

Desde el cliente de la base de datos, puede verificar el estado de la replicación del conjunto de escritura en todo el clúster mediante consultas estándar. Las variables de estado relacionadas con la replicación del conjunto de escritura tienen el prefijo wsrep_, lo que significa que puede mostrarlas todas utilizando las siguiente consultas. Para ejecutarlas, lo primero que deberemos realizar es hacer login en el MariaDB De uno de los nodos

Login en MariaDB

root@mail:~# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1883
Server version: 10.1.44-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Comandos de Cluster

SHOW GLOBAL STATUS LIKE 'wsrep_%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| wsrep_protocol_version | 5     |
| wsrep_last_committed   | 202   |
| ...                    | ...   |
| wsrep_thread_count     | 2     |
+------------------------+-------+

Comprobar la integridad del Cluster

El clúster tiene integridad cuando todos los nodos en él reciben y replican conjuntos de escritura de todos los demás nodos. El grupo comienza a perder integridad cuando esto se rompe, como cuando el grupo se cae, se divide o experimenta una situación de split-brain. Puede verificar la integridad del clúster utilizando las siguientes variables de estado:

wsrep_cluster_state_uuid

wsrep_cluster_state_uuid muestra el UUID del estado del clúster, que puede usar para determinar si el nodo es parte del clúster.

SHOW GLOBAL STATUS LIKE 'wsrep_cluster_state_uuid';

+--------------------------+--------------------------------------+
| Variable_name            | Value                                |
+--------------------------+--------------------------------------+
| wsrep_cluster_state_uuid | d6a51a3a-b378-11e4-924b-23b6ec126a13 |
+--------------------------+--------------------------------------+

Cada nodo en el clúster debe proporcionar el mismo valor. Cuando un nodo lleva un valor diferente, esto indica que ya no está conectado al resto del clúster. Una vez que el nodo restablece la conectividad, se vuelve a alinear con los otros nodos.

wsrep_cluster_conf_id

wsrep_cluster_conf_id muestra el número total de cambios de clúster que se han producido, que puede usar para determinar si el nodo forma parte o no del componente primario.

SHOW GLOBAL STATUS LIKE 'wsrep_cluster_conf_id';

+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| wsrep_cluster_conf_id | 32    |
+-----------------------+-------+

Cada nodo en el clúster debe proporcionar el mismo valor. Cuando un nodo lleva un diferente, esto indica que el clúster está particionado. Una vez que el nodo restablece la conectividad de la red, el valor se alinea con los demás.

wsrep_cluster_size

wsrep_cluster_size muestra el número de nodos en el clúster, que puede usar para determinar si falta alguno.

SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3    |
+--------------------+-------+

Puede ejecutar esta verificación en cualquier nodo. Cuando la verificación devuelve un valor inferior al número de nodos en su clúster, significa que algunos nodos han perdido la conectividad de red o han fallado.

wsrep_cluster_status

wsrep_cluster_status muestra el estado primario del componente del clúster en el que se encuentra el nodo, que puede usar para determinar si su clúster está experimentando una partición.

SHOW GLOBAL STATUS LIKE 'wsrep_cluster_status';

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

El nodo solo debe devolver un valor de Primario. Cualquier otro valor indica que el nodo es parte de un componente no operativo. Esto ocurre en casos de múltiples cambios de membership que resultan en una pérdida de quórum o en casos de situaciones de split-brain.

Cuando estas variables de estado verifican y devuelven los resultados deseados en cada nodo, el clúster está activo y tiene integridad. Lo que esto significa es que la replicación puede ocurrir normalmente en cada nodo. El siguiente paso es verificar el estado del nodo para asegurarse de que todos estén funcionando correctamente y puedan recibir conjuntos de escritura.

Comandos de Nodo

Además de verificar la integridad del clúster, también puedes monitorizar el estado de los nodos individuales. Esto muestra si los nodos reciben y procesan actualizaciones de los conjuntos de escritura del clúster y pueden indicar problemas que pueden impedir la replicación.

wsrep_ready

wsrep_ready muestra si el nodo puede aceptar consultas.

SHOW GLOBAL STATUS LIKE 'wsrep_ready';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wsrep_ready   | ON    |
+---------------+-------+

Cuando el nodo devuelve un valor de ON, puede aceptar conjuntos de escritura del clúster. Cuando devuelve el valor OFF, casi todas las consultas fallan con el error:

ERROR 1047 (08501) Unknown Command

wsrep_connected wsrep_connected muestra si el nodo tiene conectividad de red con otros nodos.

SHOW GLOBAL STATUS LIKE 'wsrep_connected';

+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| wsrep_connected | ON    |
+-----------------+-------+

Cuando el valor está activado, el nodo tiene una conexión de red a uno o más nodos que forman un componente de clúster. Cuando el valor es OFF, el nodo no tiene conexión con ningún componente del clúster.

Nota: La razón de una pérdida de conectividad también puede relacionarse con una configuración incorrecta. Por ejemplo, si el nodo usa valores no válidos para los parámetros wsrep_cluster_address o wsrep_cluster_name.

Verifica el registro de errores para obtener el diagnóstico.

wsrep_local_state_comment

wsrep_local_state_comment muestra el estado del nodo en un formato legible para humanos.

SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';

+---------------------------+--------+
| Variable_name             | Value  |
+---------------------------+--------+
| wsrep_local_state_comment | Joined |
+---------------------------+--------+

Cuando el nodo es parte del Componente primario, los valores de retorno típicos son Joining, Waiting on SST, Joined, Synced o Donor. Si el nodo es parte de un componente no operativo, el valor de retorno es Initialized.

Nota: Si el nodo devuelve cualquier valor distinto al que se muestra aquí, el comentario de estado es momentáneo y transitorio. Verifique la variable de estado nuevamente para una actualización.

En el caso de que cada variable de estado devuelva los valores deseados, el nodo está en funcionamiento. Esto significa que recibe conjuntos de escritura del clúster y los replica en tablas en la base de datos local.

Comprobación del estado de la replicación

La supervisión de la integridad del clúster y el estado del nodo puede mostrarle problemas que pueden prevenir o bloquear la replicación. Estas variables de estado ayudarán a identificar problemas de rendimiento e identificar áreas problemáticas para que pueda aprovechar al máximo su clúster.

Nota: A diferencia de otras variables de estado, estas son diferenciales y se restablecen en cada comando FLUSH STATUS. Galera Cluster activa un mecanismo de retroalimentación llamado Flow Control para administrar el proceso de replicación. Cuando la cola local recibida de los conjuntos de escritura supera un cierto umbral, el nodo activa el Control de flujo (Flow Control) para pausar la replicación mientras se pone al día.

Puede monitorizar la cola local recibida y el Control de flujo utilizando las siguientes variables de estado:

wsrep_local_recv_queue_avg

wsrep_local_recv_queue_avg muestra el tamaño promedio de la cola local recibida desde la última consulta de estado.

SHOW STATUS LIKE 'wsrep_local_recv_queue_avg';

+--------------------------+----------+
| Variable_name            | Value    |
+--------------------------+----------+
| wsrep_local_recv_que_avg | 3.348452 |
+--------------------------+----------+

Cuando el nodo devuelve un valor superior a 0.0, significa que no puede aplicar conjuntos de escritura tan rápido como los recibe, lo que puede conducir a la aceleración de la replicación.

Nota Además de esta variable de estado, también puede usar wsrep_local_recv_queue_max y wsrep_local_recv_queue_min para ver los tamaños máximo y mínimo que el nodo registró para la cola local recibida.

wsrep_flow_control_paused

wsrep_flow_control_paused muestra la fracción de tiempo, desde la última vez que se llamó FLUSH STATUS, que el nodo se detuvo debido al control de flujo.

SHOW STATUS LIKE 'wsrep_flow_control_paused';

+---------------------------+----------+
| Variable_name             | Value    |
+---------------------------+----------+
| wsrep_flow_control_paused | 0.184353 |
+---------------------------+----------+

Cuando el nodo devuelve un valor de 0.0, indica que el nodo no se detuvo debido al Control de flujo durante este período. Cuando el nodo devuelve un valor de 1.0, indica que el nodo pasó todo el período en pausa. Si el tiempo entre FLUSH STATUS y SHOW STATUS fue de un minuto y el nodo devolvió 0.25, indica que el nodo se detuvo por un total de 15 segundos durante ese período de tiempo.

Idealmente, el valor de retorno debería permanecer lo más cerca posible de 0.0, ya que esto significa que el nodo no se está quedando atrás del clúster. En caso de que encuentre que el nodo se detiene con frecuencia, puede ajustar el parámetro wsrep_slave_threads o puede excluir el nodo del clúster.

wsrep_cert_deps_distance

wsrep_cert_deps_distance muestra la distancia promedio entre el número de secuencia más bajo y el más alto, o seqno, valores que el nodo posiblemente puede aplicar en paralelo.

SHOW STATUS LIKE 'wsrep_cert_deps_distance';

+--------------------------+---------+
| Variable_name            | Value   |
+--------------------------+---------+
| wsrep_cert_deps_distance | 23.8889 |
+--------------------------+---------+

Esto representa el grado potencial del nodo para la paralelización. En otras palabras, el valor óptimo que puede usar con el parámetro wsrep_slave_threads, dado que no hay razón para asignar más hilos esclavos que las transacciones que puede aplicar en paralelo.

Detectando problemas de lentitud de red

Si bien verificar el estado de Flow Control y la cola recibida puede decirle cómo el servidor de la base de datos hace frente a los conjuntos de escritura entrantes, puede verificar la cola de envío para monitorear los problemas de conectividad saliente.

Nota A diferencia de otras variables de estado, estas son diferenciales y se restablecen en cada comando FLUSH STATUS.

wsrep_local_send_queue_avg

wsrep_local_send_queue_avg muestra un promedio para la longitud de la cola de envío desde la última consulta FLUSH STATUS.

SHOW STATUS LIKE 'wsrep_local_send_queue_avg';

+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| wsrep_local_send_queue_avg | 0.145000 |
+----------------------------+----------+

Los valores mucho mayores que 0.0 indican problemas de velocidad de replicación o rendimiento de la red, como un cuello de botella en el enlace de la red. El problema puede ocurrir en cualquier capa desde los componentes físicos de su servidor hasta la configuración del sistema operativo.

Nota Además de esta variable de estado, también puede usar wsrep_local_send_queue_max y wsrep_local_send_queue_min para ver los tamaños máximos y mínimos que el nodo registró para la cola de envío local.