Un apunte sobre la configuración de Elasticsearch
Elasticsearch es un buen motor para agilizar la búsqueda entre miles de artículos de una web o de millones de productos de un comercio electrónico, pero como contrapartida tiene que puede llegar a ser un agujero negro de recursos de los servidores. Para que no ocurra esto, tenemos que modificar la configuración que se instala por defecto, ya que al menos en las versiones más recientes, al desplegar Elasticsearch, se instala ocupando por defecto prácticamente la mitad de los recursos de nuestro servidor o más y no siempre queremos que ocurra eso, sobre todo en proyectos en los que Elasticsearch comparte espacio y recursos con una plataforma como Magento.
Aunque nosotros desaconsejamos que estén ambos en el mismo servidor, no siempre el cliente puede permitirse tener un servidor exclusivamente para Elasticsearch, por ejemplo.
A continuación veremos cómo gestionar la configuración del tamaño mínimo y máximo del JVM Heap, que es el espacio de memoria dinámica único que se crea al inicio de la máquina virtual de Java.
El tamaño del Heap Elasticsearch lo define por defecto basándose en el tamaño de memoria total del sistema y el el rol que va a desempeñar el nodo (máster, de datos, etc). Para un sistema Magento, como es nuestro caso, suele tomar la mitad de la RAM, por lo que o el sistema tiene mucha RAM, o Elasticseaarch terminará ahogando a Magento, o Magento dejará al sistema caído, ya que son dos sistemas que competirán por el máximo de los recursos disponibles.
Esta solución es la óptima en el caso de que Elasticsearch empiece a dar errores de «no alive nodes found in your cluster», lo que implica que Elasticsearch deja de estar disponible y las búsquedas en la plataforma no funcionarán. La solución más fácil será la de incrementar la memoria en el servidor, pero a veces, bastará con decrementar el tamaño del JVM Heap, ya que los recursos pueden estar bien dimensionados, y simplemente Elasticsearch no debe necesitar tanto recurso. Entonces, lo primero que haremos será cerciorarnos de que el tamaño del Heap es mayor del que desearíamos. Para ello ejecutamos
curl -X GET localhost:9200/_nodes/_all/jvm?pretty
Y nos dará un listado de valores, entre los que veremos estas dos variables:
Xms
Xmx
Si el valor de éstas son la mitad de nuestra memoria y necesitamos más memoria de la que nos deja libre para Magento, crearemos el siguiente archivo:
/etc/elasticsearch/jvm.options.d/heap.options
Y escribiremos en él
-Xms4g
-Xmx4g
o el tamaño que queramos darle (en este caso estamos asignando 4Gigas)
Lo guardamos y reiniciamos el servicio de Elasticsearch, y si queremos comprobar el cambio, sólo tenemos que volver a lanzar la instrucción
curl -X GET localhost:9200/_nodes/_all/jvm?pretty
0 comments