¿Todavía no conoces Elasticsearch? Únete a nuestro webinar de los Primeros pasos con Elasticsearch. También puedes iniciar una prueba gratuita en el cloud o prueba Elastic en tu máquina ahora mismo.
Cuando deseas actualizar un clúster de Elasticsearch, a veces es más fácil crear un clúster nuevo e independiente y transferir datos del clúster anterior al nuevo. Esto brinda a los usuarios el beneficio de poder probar todos sus datos y configuraciones en el nuevo clúster con todas sus aplicaciones sin ningún riesgo de tiempo de inactividad o pérdida de datos.
Las desventajas de ese enfoque son que requiere cierta duplicación de hardware y podría crear dificultades al intentar transferir y sincronizar sin problemas todos los datos.
También puede ser necesario realizar un procedimiento similar si necesita migrar aplicaciones de un centro de datos a otro.
En este artículo, analizaremos y detallaremos tres formas de transferir datos entre clústeres de Elasticsearch.
¿Cómo migrar datos entre clusters de Elasticsearch?
Hay 3 formas de transferir datos entre clústeres de Elasticsearch:
- Reindexación desde un clúster remoto
- Transferencia de datos mediante instantáneas
- Transferencia de datos mediante Logstash
El uso de instantáneas suele ser la forma más rápida y confiable de transferir datos. Sin embargo, tenga en cuenta que solo puede restaurar una instantánea en un clúster de una versión igual o superior y nunca con una diferencia de más de una versión principal. Esto significa que puede restaurar una instantánea 6.x en un clúster 7.x, pero no en un clúster 8.x.
Si necesita aumentar en más de una versión principal, deberá volver a indexar o usar Logstash.
Ahora, veamos en detalle cada una de las tres opciones para transferir datos entre clústeres de Elasticsearch.
1. Reindexación de datos de un clúster remoto
Antes de comenzar a volver a indexar, recuerde que deberá configurar asignaciones adecuadas para todos los índices del nuevo clúster. Para ello, debe crear los índices directamente con las asignaciones adecuadas o emplear plantillas de índice.
Reindexación desde remoto: se requiere configuración
Para poder reindexar desde remoto, debe agregar la siguiente configuración al archivo elasticseearch.yml para el clúster que recibe los datos, que, en los sistemas Linux, generalmente se encuentra aquí: /etc/elasticsearch/elasticsearch.yml. La configuración a agregar es la siguiente:
Si emplea SSL, debe agregar el certificado de CA a cada nodo e incluir lo siguiente en el comando para cada nodo de elasticsearch.yml:
Alternativamente, puede agregar la siguiente línea a todos los nodos de Elasticsearch para deshabilitar la verificación SSL. Sin embargo, ese enfoque es menos recomendable ya que no es tan seguro como la opción anterior:
Deberá realizar estas modificaciones en cada nodo y realizar un resetear continuo. Para obtener más información sobre cómo hacerlo, consulte nuestra guía.
Comando de reindexación
Luego de definir el host remoto en el archivo elasticsearch.yml y agregar los certificados SSL si es necesario, puede comenzar a reindexar datos con el siguiente comando:
Al hacerlo, es posible que se enfrente a errores de tiempo de espera, por lo que puede ser útil establecer valores generosos para los tiempos de espera en lugar de depender de los valores predeterminados.
Ahora, echemos un vistazo a algunos otros errores comunes que puede encontrar al reindexar desde el control remoto.
Errores comunes al reindexar desde el control remoto
1. Reindexación no incluida en la lista blanca
Si encuentra este error, muestra que no definió la dirección IP del host remoto o el nombre DNS del nodo en Elasticsearch como se describió anteriormente u olvidó resetear los servicios de Elasticsearch.
Para solucionar eso para el clúster de Elasticsearch, debe agregar el host remoto a todos los nodos de Elasticsearch y resetear los servicios de Elasticsearch.
2. Excepción de protocolo de enlace SSL
Este error significa que olvidó agregar el reindex.ssl.certificate_authorities a elasticsearch.yml como se describió anteriormente. Para agregarlo:
2. Transferencia de datos mediante instantáneas
Recuerde, como se mencionó anteriormente, solo puede restaurar una instantánea en un clúster de una versión igual o superior y nunca con una diferencia de más de una versión principal
Si necesita aumentar en más de una versión principal, deberá volver a indexar o usar Logstash.
Se requieren los siguientes pasos para transferir datos a través de instantáneas:
Paso 1. Agregar el complemento del repositorio al primer clúster de Elasticsearch: para transferir datos entre clústeres a través de instantáneas, debe cerciorar de que se pueda acceder al repositorio tanto desde los clústeres nuevos como desde los antiguos. Los repositorios de espacio en la nube como AWS, Google y Azure son generalmente ideales para esto. Para tomar instantáneas, consulte nuestra guía y siga los pasos que describe.
Paso 2. Resetear el servicio Elasticsearch (resetear continuo).
Paso 3. Crea un repositorio para el primer cluster de Elasticsearch.
Paso 4- Agrega el plugin del repositorio al segundo clúster de Elasticsearch.
Paso 5: Agregar repositorio como de solo lectura al segundo clúster de Elasticsearch: deberá agregar un repositorio repitiendo los mismos pasos que realizó para crear el primer clúster de Elasticsearch.
Nota importante: Al conectar el segundo clúster de Elasticsearch al mismo repositorio de AWS S3, debe definir el repositorio como un repositorio de solo lectura:
Esto es importante porque desea evitar el riesgo de mezclar versiones de Elasticsearch dentro del mismo repositorio de instantáneas.
Paso 6- Restauración de datos en el segundo clúster de Elasticsearch: luego de seguir los pasos anteriores, puede restaurar los datos y transferirlos al nuevo clúster. Siga los pasos descritos en este artículo para restaurar los datos en el nuevo clúster.
3. Transferencia de datos mediante Logstash
Antes de comenzar a transferir los datos con logstash, recuerde que deberá configurar las asignaciones adecuadas para todos los índices del nuevo clúster. Para ello, deberá crear los índices directamente o emplear plantillas de índice.
Para transferir datos entre dos clústeres de Elasticsearch, puedes configurar un servidor temporal de Logstash y usarlo para transferir tus datos entre dos clústeres. Para clústeres pequeños, una instancia de RAM de 2 GB debería ser suficiente. Para clústeres más grandes, puede usar CPU de cuatro núcleos con 8 GB de RAM.
Para obtener orientación sobre la instalación de Logstash, consulte aquí.
Configuración de Logstash para transferir datos de un clúster a otro
Una configuración básica para copiar un solo índice del clúster A al clúster B es:
Para elasticsearch seguro, puede usar la siguiente configuración:
Metadatos de índice
Los comandos anteriores escribirán en un único índice con nombre. Si desea transferir varios índices y conservar los nombres de índice, deberá agregar la siguiente línea a la salida de Logstash:
Además, si desea conservar la identificación original del documento, deberá agregar:
Tenga en cuenta que configurar el ID del documento hará que la transferencia de datos sea significativamente más lenta, así que solo conserve el ID original si es necesario.
Sincronización de actualizaciones
Todos los métodos descritos anteriormente tardarán un periodo de tiempo relativamente largo y es posible que los datos del clúster original se actualizaron mientras espera que se complete el proceso.
Existen varias estrategias para habilitar la sincronización de cualquier actualización que pueda ocurrir durante el proceso de transferencia de datos, y debe pensar en estos problemas antes de iniciar ese proceso. En individuo, debe pensar en:
- ¿Qué método tiene para identificar cualquier dato que se actualizó/agregado desde el inicio del proceso de transferencia de datos (por ejemplo, un campo "last_update_time" en los datos)?
- ¿Qué método puede emplear para transferir el último dato?
- ¿Existe el riesgo de que se dupliquen los registros? Por lo general, lo hay, a menos que el método que está empleando establezca el ID del documento durante la reindexación en un valor conocido).
A continuación se describen los diferentes métodos para habilitar la sincronización de actualizaciones.
1. Uso de sistemas de colas
Algunos sistemas de ingesta/actualización emplean colas que permiten "reproducir" las modificaciones de datos recibidas en los últimos x días. Eso puede proporcionar un medio para sincronizar cualquier cambio realizado.
2. Reindexar desde remoto
Repita el proceso de reindexación para todos los elementos en los que "last_update_time" > hace x días. Para ello, agregue un parámetro "query" a la solicitud de reindexación.
3. Logstash
En la entrada de Logstash, puede agregar una consulta para filtrar todos los elementos donde "last_update_time" > hace x días. Sin embargo, este proceso provocará duplicados en los datos que no sean de seriales temporales a menos que estableció el document_id.
4. Instantáneas
No es posible restaurar solo una parte de un índice, por lo que tendría que usar uno de los otros métodos de transferencia de datos descritos anteriormente (o un script) para actualizar los cambios que se produjeron desde que se llevó a cabo el proceso de transferencia de datos.
Sin embargo, la restauración de instantáneas es un proceso mucho más rápido que la reindexación/Logstash, por lo que puede ser posible suspender las actualizaciones durante un breve periodo de tiempo mientras se transfieren las instantáneas para evitar el problema por completo.




