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,highyflood_stagepara 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_hostsycluster.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 filtroscluster.routing.allocation.include,excludeyrequire. - Verifique
cluster.routing.allocation.awareness.attributessi 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/explaines 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/healthyGET _cluster/allocation/explaincomo 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.