Necesito cambiar el nombre de varios índices en un clúster (su nombre debe cambiarse, no puedo usar alias ).
Vi que no hay formas compatibles de hacer eso, lo más cercano que encontré es cambiar el nombre del directorio del índice , probé esto en un clúster.
El clúster tiene 3 máquinas A
, B
y C
y los fragmentos se replican en cada uno de ellos. Apago el elasticsearch A
, rebautizado /var/lib/elasticsearch/security/nodes/0/indices/oldindexname
a /var/lib/elasticsearch/security/nodes/0/indices/newindexname
y reiniciado A
.
El estado del clúster era amarillo y elasticsearch estaba haciendo algo de magia para restaurar un estado correcto. Después de un tiempo terminé con
oldindexname
estar disponible y completamente replicado (recuperado deB
yC
supongo)newindexname
estando disponible (puedo buscarlo) pero el complemento principal muestra que sus fragmentos están en un estado "Sin asignar" y que están atenuados (no replicados)
Durante la recuperación security.log
mostró el siguiente mensaje:
[2015-02-20 11:02:33,461][INFO ][gateway.local.state.meta ] [A.example.com] dangled index directory name is [newindexname], state name is [oldindexname], renaming to directory name
Si bien newindexname
se puede buscar, ciertamente no se encuentra en un estado normal.
Volví al estado anterior eliminando newindexname
. El clúster vuelve a ponerse verde sin ninguna entrada "No asignada".
Dado eso, ¿cómo puedo cambiar el nombre oldindexname
a newindexname
en un clúster?
Nota: la solución definitiva que tengo en mente es al desplazamiento de copias oldindex
en newindex
y eliminar oldindex
después. Esto llevará tiempo, así que si hay una solución más directa, sería genial.
fuente
_source: {enabled: false}
?_reindex
utiliza_source
como datos del documento original.twitter
quenew_twitter
por lo que yo sé.Para cambiar el nombre de su índice, puede usar el módulo Elasticsearch Snapshot.
Primero debe tomar una instantánea de su índice. Mientras lo restaura, puede cambiar el nombre de su índice.
rename_replacement: -Nuevo nombre de índice en el que desea hacer una copia de seguridad de sus datos.
fuente
_source
estar habilitado en el índice. He cambiado el nombre de algunos índices de múltiples TB de esta manera sin ningún problema.Como tal, no existe un método directo para copiar o cambiar el nombre del índice en ES (busqué extensamente mi propio proyecto)
Sin embargo, una opción muy fácil es utilizar una herramienta de migración popular [Elastic-Exporter].
http://www.retailmenot.com/corp/eng/posts/2014/12/02/elasticsearch-cluster-migration/
[PD: este no es mi blog, solo lo encontré y lo encontré bien]
De este modo, puede copiar el índice / tipo y luego eliminar el anterior.
fuente
Si no puede REINDEX, una solución alternativa es usar alias . Del oficial documentación :
Las API en elasticsearch aceptan un nombre de índice cuando se trabaja con un índice específico y varios índices cuando corresponde. La API de alias de índice permite alias de un índice con un nombre, y todas las API convierten automáticamente el nombre de alias en el nombre del índice real. Un alias también se puede asignar a más de un índice y, al especificarlo, el alias se expandirá automáticamente a los índices de alias. También se puede asociar un alias con un filtro que se aplicará automáticamente al buscar y enrutar valores. Un alias no puede tener el mismo nombre que un índice.
Tenga en cuenta que esta solución no funciona si utiliza la función Más como este. https://github.com/elastic/elasticsearch/issues/16560
fuente
I need to rename several indexes in a cluster (their name must be changed I cannot use aliases).
Por @WoJalias
requiere que planifique con anticipación y cree el nombre del índice originalas an alias
en un índice real. Luego, puede crear un nuevo nombre de alias y reutilizar el nombre de alias anterior para otra cosa. Pero pierde el acceso a old_data si solo tiene un real_index, cree un alias, elimine el antiguo real_index. El alias ahora no apunta a nada.Otra forma diferente de lograr el cambio de nombre o las asignaciones de un índice es reindexar usando logstash. Aquí hay una muestra de la configuración de logstash 2.1:
fuente
Como se indica en la referencia de Elasticsearch para el módulo de instantáneas ,
fuente
Por si acaso alguien todavía lo necesita. La forma exitosa, no oficial, de cambiar el nombre de los índices es:
Si obtiene este error "el nombre del directorio de índice colgante es", elimine la carpeta de índice en todos los nodos maestros (no en los nodos de datos) y reinicie uno de los nodos de datos.
fuente