tutorial query aws elasticsearch

query - elasticsearch tutorial



elasticsearch-qué hacer con fragmentos no asignados (6)

Esos fragmentos no asignados son en realidad réplicas no asignadas de los fragmentos reales del nodo principal.

Para asignar estos fragmentos, debe ejecutar una nueva instancia de elasticsearch para crear un nodo secundario para transportar las réplicas de datos.

EDITAR: Algunas veces, los fragmentos no asignados pertenecen a los índices que se han eliminado, lo que los convierte en fragmentos huérfanos que nunca se asignarán independientemente de agregar nodos o no. ¡Pero no es el caso aquí!

mi clúster está en estado amarillo porque algunos fragmentos no están asignados. ¿Qué hacer con esto?

Intenté establecer cluster.routing.allocation.disable_allocation = false en todos los índices, pero creo que esto no funciona porque estoy usando la versión 1.1.1.

También intenté reiniciar todas las máquinas, pero sucede lo mismo.

¿Alguna idea?

EDITAR:

  • Cluster stat:

    { cluster_name: "elasticsearch", status: "red", timed_out: false, number_of_nodes: 5, number_of_data_nodes: 4, active_primary_shards: 4689, active_shards: 4689, relocating_shards: 0, initializing_shards: 10, unassigned_shards: 758 }


Este es un problema común que surge de la configuración de índice predeterminada, en particular, cuando intentas replicar en un solo nodo. Para solucionar esto con la configuración de clúster transitorio, haga esto:

curl -XPUT http://localhost:9200/_settings -d ''{ "number_of_replicas" :0 }''

A continuación, habilite el clúster para reasignar fragmentos (siempre puede activarlo 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 rebote el clúster:

index.number_of_replicas: 0


Hay muchas razones posibles por las que no se realizará la asignación:

  1. Está ejecutando diferentes versiones de Elasticsearch en diferentes nodos
  2. Solo tiene un nodo en su clúster, pero tiene varias réplicas configuradas en algo distinto de cero.
  3. No tiene suficiente espacio en disco.
  4. Tiene la asignación de fragmentos deshabilitada.
  5. Usted tiene un firewall o SELinux habilitado. Con SELinux habilitado pero no configurado correctamente, verá fragmentos atrapados en INICIALIZAR o REUBICAR para siempre.

Como regla general, puede solucionar problemas como este:

  1. Mira los nodos en tu cluster: curl -s ''localhost:9200/_cat/nodes?v'' . Si solo tiene un nodo, debe establecer number_of_replicas en 0. (Consulte la documentación de ES u otras respuestas).
  2. Mire el espacio en disco disponible en su clúster: curl -s ''localhost:9200/_cat/allocation?v''
  3. Compruebe la configuración del clúster: curl ''http://localhost:9200/_cluster/settings?pretty'' y busque la configuración cluster.routing
  4. Mire qué fragmentos son Rizos NO ASIGNADOS curl -s localhost:9200/_cat/shards?v | grep UNASS curl -s localhost:9200/_cat/shards?v | grep UNASS
  5. Intenta forzar que se asigne 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

  6. 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.


Lo único que funcionó para mí fue cambiar number_of_replicas (tenía 2 réplicas, así que lo cambié a 1 y luego volví a cambiar a 2).

Primero:

PUT /myindex/_settings { "index" : { "number_of_replicas" : 1 } }

Entonces:

PUT /myindex/_settings { "index" : { "number_of_replicas" : 2 } }


Los primeros 2 puntos de la respuesta de Alcanzar lo hicieron por mí, pero tuve que agregar

"allow_primary" : true

al igual que

curl -XPOST http://localhost:9200/_cluster/reroute?pretty -d ''{ "commands": [ { "allocate": { "index": ".marvel-2014.05.21", "shard": 0, "node": "SOME_NODE_HERE", "allow_primary": true } } ] }''


Verifique que las versiones de ElasticSearch en cada nodo sean las mismas. Si no lo son, ES no asignará copias de réplica del índice a nodos ''anteriores''.

Usando la respuesta de @ Alcanzar, puede recuperar algunos mensajes de error de diagnóstico:

curl -XPOST ''http://localhost:9200/_cluster/reroute?pretty'' -d ''{ "commands": [ { "allocate": { "index": "logstash-2016.01.31", "shard": 1, "node": "arc-elk-es3", "allow_primary": true } } ] }''

resultado es:

{ "error" : "ElasticsearchIllegalArgumentException[[allocate] allocation of [logstash-2016.01.31][1] on node [arc-elk-es3] [Xn8HF16OTxmnQxzRzMzrlA][arc-elk-es3][inet[/172.16.102.48:9300]]{master=false} is not allowed, reason: [YES(shard is not allocated to same node or host)] [YES(node passes include/exclude/require filters)] [YES(primary is already active)] [YES(below shard recovery limit of [2])] [YES(allocation disabling is ignored)] [YES(allocation disabling is ignored)] [YES(no allocation awareness enabled)] [YES(total shard limit disabled: [-1] <= 0)] *** [NO(target node version [1.7.4] is older than source node version [1.7.5]) *** [YES(enough disk for shard on node, free: [185.3gb])] [YES(shard not primary or relocation disabled)]]", "status" : 400 }

Cómo determinar el número de versión de ElasticSearch:

adminuser@arc-elk-web:/var/log/kibana$ curl -XGET ''localhost:9200'' { "status" : 200, "name" : "arc-elk-web", "cluster_name" : "elasticsearch", "version" : { "number" : "1.7.5", "build_hash" : "00f95f4ffca6de89d68b7ccaf80d148f1f70e4d4", "build_timestamp" : "2016-02-02T09:55:30Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" }

En mi caso, configuré el repositorio de apt-get incorrectamente y no se sincronizaron en los diferentes servidores. Lo corregí en todos los servidores con:

echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list

y luego lo de siempre:

sudo apt-get update sudo apt-get upgrade

y un reinicio final del servidor.