Error en cluster, deja de ver los nodos de datos


(Emiliano Baum) #1

Hola, tengo un cluster que esta compuesto por un nodo cliente, otros 2 de datos y un nodo master. Los nodos tienen 3gb cada uno (se que seria bueno darles mas, pero no tengo disponible en este momento). Actualmente hay unos 3000 shards en el cluster, en total cuando se replican en los dos nodos de datos son cerca de 6000.
El punto en cuestion es que hace poco empezo a fallar, deja de funcionar despues de levantarlo... ada vez que falla tengo que reniciar el nodo master para que vuelva a detectar los otros nodos.
Hasta ahora solo encontre estos errores:
a - Mensajes en el Master:
Varios similares a este:
[2015-12-28 11:59:35,951][WARN ][cluster.service ] [G-ES-MASTER-01] cluster state upda
te task [zen-disco-receive(join from node[[G-ES-DATA-02][eIWHxZG2Sh2vFyuO3voVkA][G-ES-DATA-02][
inet[/10.0.100.25:9300]]{master=false}])] took 30s above the warn threshold of 30s
[2015-12-28 11:59:41,290][DEBUG][action.admin.indices.create] [G-ES-MASTER-01] [inu08-2015.12.2
8] failed to create
org.elasticsearch.cluster.metadata.ProcessClusterEventTimeoutException: failed to process clust
er event (create-index [inu08-2015.12.28], cause [api]) within 30s
at org.elasticsearch.cluster.service.InternalClusterService$2$1.run(InternalClusterServ
ice.java:278)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
y otros de este tipo:
s[STARTED]: failed to execute [org.elasticsearch.action.admin.indices.stats.IndicesStatsRequest@46f82fc1]

b- Mensaje en el dato:

[2015-12-28 11:54:56,994][INFO ][discovery.zen ] [G-ES-DATA-01] failed to send join request to master [[G-ES-MASTER-01][KBgfkDcJQIq-kUhmQPdxvA][G-ES-MASTER-01][inet[/10.0.100.26:9300]]{data=false, master=true}], reason [RemoteTransportException[[G-ES-MASTER-01][inet[/10.0.100.26:9300]][internal:discovery/zen/join]]; nested: ElasticsearchIllegalStateException[Node [[G-ES-MASTER-01][KBgfkDcJQIq-kUhmQPdxvA][G-ES-MASTER-01][inet[/10.0.100.26:9300]]{data=false, master=true}] not master for join request from [[G-ES-DATA-01][1Q0cIGBjTHun14k9nfjPKw][G-ES-DATA-01][inet[/10.0.100.23:9300]]{master=false}]]; ], tried [3] times

Pareciera que no alcanza con un solo nodo master para mantener el cluster estable, pero no estaria seguro que sea solo eso.
Gracias!

PD: se que en el manual dice tener un minimo de 3, pero usando tan pocos nodos de datos pense que no hacia falta tanto. Por lo que lei, los requerimientos para ir escalando se aprendenen la practica.


(El Bubi) #2

Hola!
Sospecho que tienes un problema de arquitectura en ese cluster.

Efectivamente si vas a emplear Dedicados Master Nodos, deberías usar 3 al menos. Es muy probable que el cluster_state (índices state incluido) que tiene que formar el Master Node contenga muchisima informacion para ser manejada.

Entiendo que la configuración de los índices es 1shard primario y 2 réplicas para cada índice (por defecto son 5 primarios y 1 replica). No lo has comentado, pero la talla de los shards en disco es importante (mantenlas en 30Gb máximo).
El número de shards es muy grande (6000) para dos Nodos de Datos. Te aconsejaría reducir el número de shards por cada Nodo de Datos (200-400 max) y por tanto añadir más Nodos de Datos.

Los 3Gb que comentas no se si son RAM o disco duro. Tampoco capte si todo cluster corre en una misma maquina física o virtual.
Si hablas de RAM ten en cuenta que a Elasticsearch deberias asignarle la mitad del total de la memoria RAM del sistema (con un tope de 30.5 Gb).

Para conocer el límite de tu sistema, podrías empezar por hacer tests en un Data Nodo con 1 shard primario y 0 replicas. Ver hasta donde tu sistema responde aceptablemente (en las dos fases, indexación y búsqueda) y poco a poco ir añadiendo shards, réplicas y nodos.

Saludos


(Emiliano Baum) #3

Efectivamente, analizand o vi esas dos cosas.
En primer lugar reduje la cantidad de indices abiertos, ya que por la
dinamica del sistema me alcanzaria tener solo abierto los de los ultimos
dias, y por el otro agregue un nodo master, lo que mejoro el rendimiento
aparentemente.
Ahora la arquitectura del cluster esta conformada por 2 nodos de datos, dos
nodos master y un nodo cliente. Todos son chicos, ya que los recursos que
disponemos son limitados por el momento.
Para poder cerrar los nodos arme una pequeña aplicacion que verifica a que
dia corresponde cada indice y lo va cerrando selectivamente, y alguna otra
validacion mas.
Gracias por la respuesta, saludos!


(Emiliano Baum) #4

No te conteste sobre las maquinas, perdon.
Cada nodo es una virtual, son 3 gb de RAM (1.5 de HEAP), las maquinas corren en dos servidores ESXI distintos.
La memoria de almacenamiento es de 60 GB (si mal no recuerdo eso le asigne a los de datos, bastante menos a los otros).
Saludos!


(Gabriel Moskovicz) #5

Cualquier cosa estamos a las ordenes.

Saludos!


(system) #6