Las mejores prácticas de Elasticsearch y el aumento del rendimiento

Las mejores prácticas de Elasticsearch y el aumento del rendimiento
En esta publicación, intentaremos recopilar las mejores prácticas y también qué cosas para evitar al trabajar con Elasticsearch y alimentar datos en ella. De esta manera, sabremos qué cosas necesitamos para cuidar antes de comenzar a trabajar con este excelente motor de búsqueda.

Las mejores prácticas de Elasticsearch

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

Siempre defina las asignaciones de ES

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

Por ejemplo, suponga que indexa el siguiente documento:


"ID": 1,
"Título": "Instale 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,
"Título": "Es las mejores prácticas y rendimiento de ES",
"Fecha": "pendiente"

Esta vez, el tipo de campo de fecha se ha cambiado y ES lanzará un error y no permitirá que su documento se indexe. Para facilitar las cosas, puede indexar algunos documentos, ver qué campos están indexados por ES y tomar el mapeo de esta URL:

Get/index_name/doc_type/_mapping

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

Banderas de producción

El nombre de clúster predeterminado que se llama ES elasticsearch. Cuando tienes muchos nodos en tu clúster, es una buena idea mantener las banderas de nombres lo más consistentes posible, como:

grupo.Nombre: App_es_Production
nodo.Nombre: App_es_node_001

Además de esto, la configuración de recuperación para nodos también importan mucho. Supongamos que algunos de los nodos en un clúster se reinician debido a una falla y algunos nodos se reinician un poco después de otros nodos. Para mantener los datos consistentes entre todos estos nodos, tendremos que ejecutar un programa de consistencia que mantendrá a todos los grupos en un estado consistente.

puerta.Recover_after_nodes: 10

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

puerta.ESPEZ_NODES: 20
puerta.recuperar_after_time: 7m

Con la configuración correcta, una recuperación que habría 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 tomarán sus datos y la velocidad a la que fluye a Elasticsearch, porque eso decidirá la cantidad de RAM que necesitará en cada uno de los nodos del clúster y el nodo maestro también.

Por supuesto, no hay pautas específicas para lograr los números necesarios, pero podemos dar algunos pasos que nos proporcionan una buena idea. Uno de los pasos será simular el caso de uso. Haga un clúster ES y alimente con casi la misma tasa de datos que cabría esperar con su configuración de producción. El concepto de Comience en grande y escalen También puede ayudarlo a ser consistente sobre cuánto espacio se necesita.

Plantillas grandes

Cuando defina plantillas grandes indexadas, siempre enfrentará problemas relacionados con la sincronización de la plantilla a través de sus diversos nodos del clúster. Tenga en cuenta siempre que la plantilla deberá volver a definirse cada vez que ocurra un cambio de modelo de datos. Es una idea mucho mejor para Mantenga las plantillas como dinámicas. Las plantillas dinámicas actualizan automáticamente las asignaciones de campo en función de 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.

2using mlockall en servidores ubuntu

Linux utiliza el proceso de intercambio cuando necesita memoria para nuevas páginas. Cambio de hacer las cosas lento ya que los discos son más lentos que el recuerdo. El mlockall La propiedad en la configuración de ES le dice a ES que no cambie sus páginas fuera de la memoria, incluso si no son necesarios por ahora. Esta propiedad se puede configurar en el archivo YAML:

oreja.mlockall: verdadero

En el es v5.Versiones X+, esta propiedad ha cambiado a:

oreja.Memory_lock: verdadero

Si está utilizando esta propiedad, solo asegúrese de proporcionar a ES lo suficientemente grande como memoria de montón usando el -Dxmx opción o Es_heap_size.

Minimizar las actualizaciones de mapeo

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 para las asignaciones, puede usar una propiedad en el archivo de configuración de 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 la asignación anterior a los nodos, también tiene que enviar una solicitud de actualización a todos los nodos. Esto puede hacer que las cosas sean lentos. Cuando establecemos la propiedad anterior en falso, esto tiene sentido maestro que se haya realizado una actualización a la asignación 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 regularmente.

Pool de hilos optimizado

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

threadpool.a granel.Queue_Size: 2000

Esto informa el número de solicitudes en un fragmento que se puede hacer cola para su ejecución en el nodo cuando no hay un hilo disponible para procesar la solicitud. Si el número de tareas es más alto que este valor, obtendrá un RemotaTransportException. Cuanto mayor se necesitará este valor, mayor será la cantidad de espacio-espacio en su máquina de nodo y el montón JVM también se consumirá. Además, debe mantener su código listo en caso de que se lance esta excepción.

Conclusión

En esta lección, analizamos cómo podemos mejorar. Lea más artículos de Elasticsearch en Linuxhint.