Solución:
Hay muchas razones posibles por las que no se producirá la asignación:
- Está ejecutando diferentes versiones de Elasticsearch en diferentes nodos
- Solo tiene un nodo en su clúster, pero tiene un número de réplicas configurado en algo diferente a cero.
- No tiene suficiente espacio en disco.
- Tiene la asignación de fragmentos inhabilitada.
- Tiene un firewall o SELinux habilitado. Con SELinux habilitado pero no configurado correctamente, verá fragmentos atascados en INICIALIZANDO o REUBICANDO para siempre.
Como regla general, puede solucionar problemas como este:
- Mire los nodos en su clúster:
curl -s 'localhost:9200/_cat/nodes?v'
. Si solo tiene un nodo, debe configurarnumber_of_replicas
a 0. (Consulte la documentación de ES u otras respuestas). - Mire el espacio en disco disponible en su clúster:
curl -s 'localhost:9200/_cat/allocation?v'
- Verifique la configuración del clúster:
curl 'http://localhost:9200/_cluster/settings?pretty'
y buscacluster.routing
ajustes - Mira qué fragmentos NO ESTÁN ASIGNADOS
curl -s localhost:9200/_cat/shards?v | grep UNASS
-
Intenta forzar la asignación de un fragmento
curl -XPOST -d '{ "commands" : [ { "allocate" : { "index" : ".marvel-2014.05.21", "shard" : 0, "node" : "SOME_NODE_HERE", "allow_primary":true } } ] }' http://localhost:9200/_cluster/reroute?pretty
-
Mire la respuesta y vea lo que dice. Habrá un montón de SÍ que están bien, y luego un NO. Si no hay ningún NO, es probable que sea un problema de firewall / SELinux.
Este es un problema común que surge de la configuración de índice predeterminada, en particular, cuando intenta replicar en un solo nodo. Para solucionar este problema con la configuración de clúster transitoria, haga lo siguiente:
curl -XPUT http://localhost:9200/_settings -d '{ "number_of_replicas" :0 }'
A continuación, habilite el clúster para reasignar fragmentos (siempre puede activar esto después de que todo esté dicho y hecho):
curl -XPUT http://localhost:9200/_cluster/settings -d '
{
"transient" : {
"cluster.routing.allocation.enable": true
}
}'
Ahora siéntese y observe cómo el clúster limpia los fragmentos de réplica no asignados. Si desea que esto surta efecto con índices futuros, no olvide modificar el archivo elasticsearch.yml con la siguiente configuración y rebotar el clúster:
index.number_of_replicas: 0
Esos fragmentos no asignados son en realidad réplicas no asignadas de sus fragmentos reales del nodo principal.
Para asignar estos fragmentos, debe ejecutar una nueva instancia de elasticsearch para crear un nodo secundario para llevar las réplicas de datos.
EDITAR: A veces, los fragmentos no asignados pertenecen a índices que se han eliminado, lo que los convierte en fragmentos huérfanos que nunca se asignarán independientemente de si se agregan nodos o no. ¡Pero no es el caso aquí!