Resolución del estado del clúster rojo: una guía paso a paso para la solución de problemas de Elasticsearch

Soluciona y resuelve problemas de estado de clúster de Elasticsearch 'rojo' o 'amarillo'. Esta guía completa proporciona diagnósticos paso a paso para problemas comunes como fragmentos no asignados, espacio en disco insuficiente y fallos de nodos. Aprende a usar API esenciales como `_cluster/health` y `_cluster/allocation/explain` para identificar las causas raíz e implementar soluciones efectivas, asegurando que tu clúster de Elasticsearch se mantenga saludable y disponible.

36 vistas

Cómo resolver el estado de clúster rojo: Guía paso a paso para la resolución de problemas de Elasticsearch

La salud de un clúster de Elasticsearch es crucial para su eficiencia operativa y la disponibilidad de los datos. Cuando el estado del clúster se vuelve rojo o amarillo, indica un problema subyacente que requiere atención inmediata. Un estado red (rojo) indica que los índices o shards no están asignados, lo que significa que los datos podrían ser inaccesibles o que las operaciones podrían fallar. Un estado yellow (amarillo) significa que los shards primarios están asignados, pero algunos shards de réplica no lo están. Aunque es menos crítico que el rojo, sigue representando un riesgo para la durabilidad de los datos. Esta guía proporciona un enfoque sistemático para diagnosticar y resolver estos problemas comunes de salud del clúster de Elasticsearch.

Comprender la causa raíz de estos problemas de estado es el primer paso hacia la resolución. Los culpables comunes incluyen espacio en disco insuficiente, nodos sobrecargados, problemas de red o configuraciones incorrectas relacionadas con la asignación de shards. Siguiendo los pasos de diagnóstico que se describen a continuación, podrá identificar el problema exacto e implementar soluciones efectivas, restaurando su clúster a un estado green (verde) saludable.

Comprensión de la salud del clúster de Elasticsearch

Elasticsearch proporciona una API de Salud del Clúster que ofrece una instantánea del estado del clúster y la asignación de shards. Esta API es su herramienta principal para diagnosticar problemas de salud.

GET _cluster/health

La salida de este comando incluirá un campo status, que puede ser green (verde), yellow (amarillo) o red (rojo). También proporciona información sobre el número de shards activos y no asignados.

  • Green (Verde): Todos los shards primarios y de réplica están asignados y funcionan correctamente.
  • Yellow (Amarillo): Todos los shards primarios están asignados, pero algunos shards de réplica no lo están.
  • Red (Rojo): Uno o más shards primarios no están asignados, lo que lleva a la falta de disponibilidad de datos para esos shards.

Causas comunes y pasos de resolución de problemas para el estado rojo/amarillo

Cuando su clúster no está en estado green (verde), es hora de investigar. Estas son las razones más comunes de los shards no asignados y cómo abordarlas:

1. Espacio en disco insuficiente

Elasticsearch tiene salvaguardas para evitar la corrupción de datos debido a discos llenos. Si un nodo se queda sin espacio en disco, impedirá que se asignen nuevos shards o que se recuperen los existentes.

Diagnóstico:

  • Compruebe el uso del disco en cada nodo.
  • Utilice la API de Explicación de Asignación del Clúster para comprender por qué los shards no están asignados.
GET _cluster/allocation/explain

Esta API proporcionará un razonamiento detallado, a menudo señalando las marcas de agua de disco.

Resolución:

  • Libere espacio en disco: Elimine índices antiguos, realice la fusión de segmentos o elimine datos innecesarios.
  • Agregue más espacio en disco: Aumente la capacidad de almacenamiento de sus nodos.
  • Configure las marcas de agua de disco: Ajuste la configuración cluster.routing.allocation.disk.watermark.low, high y flood_stage para controlar cuándo Elasticsearch comienza a considerar un disco lleno. Tenga cuidado con estas configuraciones, ya que pueden enmascarar problemas de capacidad subyacentes.

2. El nodo abandonó el clúster (expulsión de nodo)

Los nodos pueden abandonar un clúster debido a problemas de red, fallos o ser eliminados intencionalmente. Si un nodo que contiene shards (especialmente shards primarios) se va, esos shards quedan sin asignar.

Diagnóstico:

  • Compruebe los registros del clúster en busca de nodos que se hayan ido recientemente.
  • Supervise la conectividad de red entre los nodos.
  • Asegúrese de que todos los nodos sean detectables entre sí (verifique las configuraciones discovery.seed_hosts y cluster.initial_master_nodes).

Resolución:

  • Reinicie el nodo: Si el nodo falló o dejó de responder, intente reiniciarlo.
  • Aborde los problemas de red: Resuelva cualquier problema de conectividad de red entre los nodos.
  • Vuelva a agregar el nodo: Si el nodo se eliminó intencionalmente, asegúrese de que esté configurado correctamente antes de unirse nuevamente al clúster.

3. Filtrado y concienciación de asignación de shards

Las reglas de asignación de shards configuradas incorrectamente pueden impedir que los shards se asignen a los nodos disponibles.

Diagnóstico:

  • Revise sus configuraciones cluster.routing.allocation.*, particularmente los filtros cluster.routing.allocation.include, exclude y require.
  • Verifique cluster.routing.allocation.awareness.attributes si está utilizando la conciencia de zona o rack.

Resolución:

  • Ajuste los filtros de asignación: Modifique los filtros para permitir que los shards se asignen a los nodos apropiados.
  • Corrija los atributos de conciencia: Asegúrese de que los nodos estén correctamente etiquetados con atributos de conciencia si se utilizan, y de que sus reglas de asignación los respeten.

4. Espacio en disco insuficiente para la asignación (después de la creación del índice)

Incluso si un disco no está lleno, Elasticsearch podría impedir la asignación de shards si predice que el disco superará las marcas de agua altas después de la asignación. Esto está relacionado con las marcas de agua de disco, pero afecta específicamente a las nuevas asignaciones.

Diagnóstico:

  • La API _cluster/allocation/explain es invaluable aquí.
  • Verifique el espacio libre disponible frente al tamaño esperado de los shards.

Resolución:

  • Similar al problema general de espacio en disco: libere espacio, agregue más almacenamiento o ajuste las marcas de agua con precaución.

5. Tamaño de los shards y capacidad del nodo

Shards muy grandes o un gran número de shards pueden sobrecargar los recursos del nodo (CPU, memoria) y afectar la asignación. Además, si un nodo ha alcanzado su límite de shards (cluster.routing.allocation.total_shards_per_node), no se le asignarán nuevos shards.

Diagnóstico:

  • Verifique los tamaños de los shards (GET _cat/shards?v).
  • Supervise la utilización de recursos del nodo (CPU, memoria).
  • Revise la configuración cluster.routing.allocation.total_shards_per_node.

Resolución:

  • Reduzca el tamaño de los shards: Considere reindexar los datos en índices con menos shards o shards de menor tamaño. Apunte a tamaños de shards entre 10 GB y 50 GB como guía general.
  • Aumente la capacidad del nodo: Agregue nodos más potentes o nodos con más memoria/CPU.
  • Ajuste el límite de shards: Si es necesario y tiene recursos suficientes, aumente cluster.routing.allocation.total_shards_per_node.

6. Problemas del nodo maestro

Un nodo maestro inestable puede provocar problemas de asignación de shards. Si el maestro no está disponible o no puede realizar sus funciones, los shards pueden quedar sin asignar.

Diagnóstico:

  • Compruebe los registros del clúster en busca de errores o advertencias relacionados con el maestro.
  • Asegúrese de tener un número impar de nodos elegibles para maestro (normalmente 3 o 5) para evitar escenarios de cerebro dividido.
  • Verifique que los nodos elegibles para maestro puedan elegir un maestro.

Resolución:

  • Estabilice el maestro: Asegúrese de que los nodos elegibles para maestro estén sanos, tengan recursos suficientes y estén bien conectados.
  • Corrija initial_master_nodes: Asegúrese de que esta configuración esté correctamente configurada en el primer inicio del clúster y permanezca estable.

Resolución de problemas avanzada con _cluster/allocation/explain

La API _cluster/allocation/explain es su herramienta más potente para comprender por qué un shard específico no está asignado.

Ejemplo:

GET _cluster/allocation/explain
{
  "index": "my-index",
  "shard": 0,
  "primary": true
}

Esto devolverá una salida JSON detallada que explica por qué el shard primario 0 de my-index no se puede asignar. Busque campos como deciders que enumeran las razones de la no asignación (por ejemplo, DISK_THRESHOLD, NODE_LEFT, NO_VALID_SHARD_COPY).

Cómo resolver el estado de clúster amarillo

Un estado amarillo significa que los shards primarios están asignados, pero las réplicas no. Esto afecta principalmente a la redundancia de datos y la tolerancia a fallos.

Causas comunes:

  • Nodos insuficientes: No tiene suficientes nodos para acomodar el número requerido de réplicas para sus índices.
  • Filtrado de asignación de shards: Similar al estado rojo, los filtros pueden estar impidiendo que se asignen réplicas.
  • Restricciones de espacio en disco: Los nodos pueden tener suficiente espacio para los shards primarios, pero no suficiente para las réplicas, especialmente si las marcas de agua de disco están activas.

Resolución:

  • Agregue más nodos: Aumente el número de nodos en su clúster.
  • Ajuste el número de réplicas: Reduzca el número de réplicas por índice (index.number_of_replicas) si la tolerancia a fallos no es crítica para todos los índices.
  • Verifique la configuración de asignación: Asegúrese de que los shards de réplica puedan asignarse a los nodos disponibles.

Mejores prácticas para mantener la salud del clúster

  • Supervise el uso del disco: Supervise proactivamente el espacio en disco en todos los nodos y configure alertas.
  • Dimensionamiento adecuado del clúster: Asegúrese de tener suficientes nodos y recursos para su volumen de datos y carga de consultas.
  • Gestión de shards: Mantenga los tamaños de los shards dentro de los rangos recomendados y evite el exceso de shards.
  • Revise regularmente la salud del clúster: Utilice GET _cluster/health y GET _cluster/allocation/explain como parte de su monitoreo rutinario.
  • Pruebe los cambios: Antes de realizar cambios significativos en la configuración de asignación o las marcas de agua de disco, pruébelos en un entorno de ensayo.

Conclusión

Resolver un estado de clúster de Elasticsearch rojo o amarillo requiere un enfoque metódico para el diagnóstico. Al aprovechar la API de Salud del Clúster, la API de Explicación de Asignación del Clúster y comprender los puntos de falla comunes como el espacio en disco, los problemas de red y las configuraciones de asignación, puede solucionar problemas de manera efectiva y restaurar su clúster a una salud óptima. El monitoreo constante y la adherencia a las mejores prácticas son clave para evitar que estos problemas surjan en primer lugar.