Búsqueda elástica

Mejores prácticas de Elasticsearch y aumento del rendimiento

Mejores prácticas de Elasticsearch y aumento del rendimiento
En esta publicación, intentaremos recopilar las mejores prácticas y también qué cosas evitar cuando trabajamos con Elasticsearch y alimentamos con datos. De esta manera, sabremos todas las cosas que debemos cuidar antes de comenzar a trabajar con este excelente motor de búsqueda.

Mejores prácticas de Elasticsearch

Comenzaremos a trabajar con las mejores prácticas a seguir con Elasticsearch y qué problemas puede crear cuando evitamos estos puntos. Empecemos.

Defina siempre las asignaciones de ES

Una cosa que ES seguramente puede hacer es trabajar sin mapeos. Entonces, cuando comience a alimentar datos JSON a su índice ES, iterará sobre los campos de datos y creará un mapeo adecuado. Esto parece directo y fácil ya que ES está seleccionando el tipo de datos en sí. Según sus datos, es posible que necesite que un campo sea de un tipo de datos específico.

Por ejemplo, suponga que indexa el siguiente documento:


"id": 1,
"title": "Instalar ElasticSearch en Ubuntu",
"enlace": "https: // linuxhint.com / install-elasticsearch-ubuntu / ",
"fecha": "2018-03-25"

De esta manera, Elasticsearch marcará el campo "fecha" como tipo "fecha". Pero cuando indexa el siguiente documento:


"id": 1,
"title": "Mejores prácticas y rendimiento de ES",
"fecha": "Pendiente"

Esta vez, el tipo de campo de fecha ha sido cambiado y ES arrojará un error y no permitirá que su documento sea indexado. Para facilitar las cosas, puede indexar algunos documentos, ver qué campos indexa ES y tomar el mapeo de esta URL:

GET / index_name / doc_type / _mapping

De esta manera, no tendrá que construir también el mapeo completo.

Banderas de producción

El nombre de clúster predeterminado que inicia ES se llama búsqueda elástica. Cuando tiene muchos nodos en su clúster, es una buena idea mantener los indicadores de nomenclatura lo más consistentes posible, como:

grupo.nombre: app_es_production
nodo.nombre: app_es_node_001

Aparte de esto, la configuración de recuperación para los nodos también es muy importante. Suponga que algunos de los nodos de un clúster se reinician debido a una falla y algunos nodos se reinician un poco después que otros nodos. Para mantener la coherencia de los datos entre todos estos nodos, tendremos que ejecutar un programa de coherencia que mantendrá todos los clústeres en un estado coherente.

puerta.recovery_after_nodes: 10

También es útil cuando le indica al clúster con anticipación cuántos nodos estarán presentes en el clúster y cuánto tiempo de recuperación necesitarán:

puerta.nodos_esperados: 20
puerta.tiempo_de_recuperación: 7m

Con la configuración correcta, una recuperación que hubiera tomado horas puede tomar tan solo un minuto y puede ahorrar mucho dinero a cualquier empresa.

Aprovisionamiento de capacidad

Es importante saber cuánto espacio ocuparán sus datos y la velocidad a la que fluyen hacia Elasticsearch, porque eso decidirá la cantidad de RAM que necesitará en cada uno de los nodos del clúster y también en el nodo maestro.

Por supuesto, no existen pautas específicas para lograr los números necesarios, pero podemos dar algunos pasos que nos brinden una buena idea. Uno de los pasos será simular el caso de uso. Cree un clúster de ES y aliméntelo con casi la misma tasa de datos que esperaría con su configuración de producción. El concepto de empezar a lo grande y reducir también puede ayudarlo a ser constante sobre cuánto espacio se necesita.

Plantillas grandes

Cuando defina plantillas grandes indexadas, siempre enfrentará problemas relacionados con la sincronización de la plantilla en los distintos nodos del clúster. Tenga siempre en cuenta que la plantilla deberá volver a definirse cada vez que se produzca un cambio en el modelo de datos. Es una idea mucho mejor mantener las plantillas tan dinámicas. Las plantillas dinámicas actualizan automáticamente las asignaciones de campos según las asignaciones que definimos anteriormente y los nuevos campos. Tenga en cuenta que no hay sustituto para mantener las plantillas lo más pequeñas posible.

2Uso de mlockall en servidores Ubuntu

Linux hace uso del proceso de intercambio cuando necesita memoria para nuevas páginas. El intercambio ralentiza las cosas, ya que los discos son más lentos que la memoria. La mlockall La propiedad en la configuración de ES le dice a ES que no intercambie sus páginas de la memoria incluso si no son necesarias por ahora. Esta propiedad se puede establecer en el archivo YAML:

oreja.mlockall: cierto

En el ES v5.x + versiones, esta propiedad ha cambiado a:

oreja.memory_lock: verdadero

Si está utilizando esta propiedad, asegúrese de proporcionar a ES una memoria de pila lo suficientemente grande utilizando el -DXmx opción o ES_HEAP_SIZE.

Minimizar las actualizaciones de mapas

El rendimiento de un clúster se ve ligeramente afectado cada vez que realiza solicitudes de actualización de mapeo en su clúster ES. Si no puede controlar esto y aún desea realizar actualizaciones a las asignaciones, puede usar una propiedad en el archivo de configuración ES YAML:

índices.grupo.send_refresh_mapping: falso

Cuando la solicitud de actualización del modelo está en cola pendiente para el nodo maestro y envía datos con el mapeo anterior a los nodos, también tiene que enviar una solicitud de actualización posteriormente a todos los nodos. Esto puede ralentizar las cosas. Cuando establecemos la propiedad anterior en falsa, esto tiene un gran sentido de que se ha realizado una actualización en el mapeo y no enviará la solicitud de actualización a los nodos. Tenga en cuenta que esto solo es útil si realiza muchos cambios en sus asignaciones con regularidad.

Grupo de subprocesos optimizado

Los nodos ES tienen muchos grupos de subprocesos para mejorar la forma en que se administran los subprocesos dentro de un nodo. Pero existen limitaciones sobre la cantidad de datos de los que puede ocuparse cada hilo. Para realizar un seguimiento de este valor, podemos usar una propiedad ES:

hilo de rosca.a granel.queue_size: 2000

Esto informa a ES la cantidad de solicitudes en un fragmento que se pueden poner en cola para su ejecución en el nodo cuando no hay un hilo disponible para procesar la solicitud. Si el número de tareas supera este valor, obtendrá un RemoteTransportException. Cuanto mayor sea este valor, mayor será la cantidad de espacio de pila que se necesitará en su máquina de nodo y la pila de JVM también se consumirá. Además, debe mantener su código listo en caso de que se produzca esta excepción.

Conclusión

En esta lección, analizamos cómo podemos mejorar el rendimiento de Elasticsearch evitando errores comunes y no tan comunes que las personas cometen. Leer más artículos de Elasticsearch sobre LinuxHint.

Las mejores aplicaciones de mapeo de gamepad para Linux
Si te gusta jugar juegos en Linux con un gamepad en lugar de un sistema de entrada de teclado y mouse típico, hay algunas aplicaciones útiles para ti....
Herramientas útiles para jugadores de Linux
Si le gusta jugar juegos en Linux, es probable que haya utilizado aplicaciones y utilidades como Wine, Lutris y OBS Studio para mejorar la experiencia...
Juegos HD remasterizados para Linux que nunca tuvieron un lanzamiento de Linux antes
Muchos desarrolladores y editores de juegos están creando una remasterización HD de juegos antiguos para extender la vida útil de la franquicia, por f...