Este es un tutorial sobre cómo instalar ElasticSearch en Centos 7 y comentar los problemas que tuve durante la instalación que no se explican en la documentación oficial.

Como siempre ocurre, en las documentaciones oficiales de los sistemas que queremos instalar todo funciona a la primera, pero nunca se acuerdan de incluir posibles errores que podamos tener los demás para documentarlos y poder así completar con la instalación de dicho sistema.

Por eso, en este caso me ocurrió eso. Al instalar ElasticSearch tuve el problema de que no quería arrancar y tuve que buscarme la vida para solucionar el problema. Y es lo que os vengo a contar en este tutorial.

También te puede interesar:
Instalar PHP en Centos
Configurar la red en linux
Copiar archivos de un servidor a otro en linux con el comando SCP
Aprende Diseño Web con Divi y WordPress

Qué es ElasticSearch

Si estáis comenzando con el diseño de nuevas aplicaciones basadas en microservicios habréis escuchado hablar de ElasticSearch. Pues ElasticSearch no es más que un componente más que os será muy útil en vuestro sistema basado en microservicios ya que os ayudará a tener centralizado de alguna manera todos los logs de los microservicios.

Si vuestra aplicación consta de muchos microservicios, controlar todos los logs de cada uno de ellos puede ser una tarea ardua. Por eso, este componente llamado ElasticSearch viene a facilitarnos la vida en ese sentido.

ElasticSearch suele instalarse en compañía con Logstash y Kibana para formar un sistema completo de gestión de logs. Pero en este tutorial solo veremos la instalación de ElasticSearch y cómo solucioné el problema que tuve que puede que os pase a más gente.

qué es elasticsearch logstash kibana

Cómo se instala ElasticSearch en Centos 7

Aquí os dejo un enlace a la documentación oficial de instalación de ElasticSearch. Pero os voy a resumir brevemente los pasos.

Instalar la clave pública de ElasticSearch con la que están firmados todos sus paquetes para asegurarnos de que nos descargamos el paquete correcto.

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Crear un repositorio nuevo en nuestro Centos 7 para poder descargarnos el paquete de ElasticSearch. Para ello hay que crear el siguiente fichero /etc/yum.repos.d/elasticsearch.repo con este contenido:

[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

Ahora iniciamos la instalación con el siguiente comando:

sudo yum install --enablerepo=elasticsearch elasticsearch

Una vez instalado vamos a realizar algunos cambios en la configuración de ElasticSearch editando el fichero /etc/elasticsearch/elasticsearch.yml. En este fichero nos centraremos ahora mismo solo en este bloque:

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 10.x.x.x
#
# Set a custom port for HTTP:
#
http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
discovery.seed_hosts: ["127.0.0.1", "[::1]"]

Donde en la IP de nuestro host pondremos la IP correspondiente.

Una vez instalado y configurado, ya podemos iniciar el servicio de ElasticSearch con el comando:

sudo -i service elasticsearch start

Si queremos que se inicie automáticamente por si reiniciamos la máquina, hacemos lo siguiente:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

Para poder parar y arrancar ElasticSearch usaremos los siguientes comandos:

sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service

Y con eso ya tendremos instalado ElasticSearch en nuestro sistema basado en microservicios.

Ubicación de los logs de ElasticSearch

Los logs de ElasticSearch se encuentran en:

/var/log/elasticsearch/

Comprobar si está funcionando

Para comprobar si está funcionando podemos hacer lo siguiente.

O lanzamos un status del servicio de esta forma:

sudo -i service elasticsearch status

status service elasticsearch

O hacemos un curl a la url del servidor de ElsasticSearch por el puerto 9200:

curl http://nuestra_ip:9200

y nos debe de dar el siguiente resultado:

estado elasticsearch arrancado

Y también podemos comprobarlo desde un navegador web usando la misma url que antes:

estado elasticsearch arrancado web

ElasticSearch no arranca

Si tenemos problemas para arrancar ElasticSearch y nos muestra un mensaje como el siguiente:

elasticsearch not run

Debemos analizar lo que dice. En este caso dice que hay un problema de timeout relacionado con el arranque de ElasticSearch.

Por una parte yo pensé que podía ser problema de visibilidad con la url que aparece arriba de elasticsearch.co, y era cierto que desde la máquina no se tenía acceso, pero aun dándole acceso seguía mostrando el mismo error.

Si nos fijamos bien, habla de un archivo llama override.conf. Esa es la clave. En ese fichero es donde debemos ampliar el tiempo de timeout. Veamos cómo.

Problema de timeout de ElasticSearch

Gracias a esta página pude encontrar el problema del timeout, pero os voy resumir brevemente lo que hay que hacer para ir al grano. Si necesitáis más detalle ahí tenéis el enlace con más información.

Primero vamos a comprobar la propiedad de timeout de elasticsearch:

[root@srvmicroint01 elasticsearch.service.d]# sudo systemctl show elasticsearch | grep ^Timeout

TimeoutStartUSec=1,5min

TimeoutStopUSec=0

La solución al problema de timeout de ElasticSearch cuando queremos arrancar el servicio es ampliando ese tiempo de espera. Parece que un minuto y medio no es suficientes, y vamos a ampliarlo a 3 minutos.

Para ello tenemos que meter una propiedad en el fichero de configuración override.conf que se encuentra en /etc/systemd/system/elasticsearch.service.d/.

cd /etc/systemd/system/elasticsearch.service.d/

Mostramos el contenido del fichero de configuración override.conf:

[root@srv elasticsearch.service.d]# cat override.conf

[Service]

LimitMEMLOCK=infinityq

Por una parte, vi que tenía una errata en mi fichero. Y es que la palabra infinity no debe terminar en una Q. Eliminé la Q pero seguía sin arrancar.

Después añadí la siguiente propiedad TimeoutStartSec para ampliar el timeout a 3 minutos:

TimeoutStartSec=180

Quedando el contenido de override.conf de esta manera:

[root@srv elasticsearch.service.d]# cat override.conf

[Service]

LimitMEMLOCK=infinity

TimeoutStartSec=180

Si volvemos a comprobar la propiedad de timeout de elasticsearch:

[root@srvmicroint01 elasticsearch.service.d]# sudo systemctl show elasticsearch | grep ^Timeout

TimeoutStartUSec=3min

TimeoutStopUSec=0

Ya muestra los 3 minutos.

Ahora volvamos a arrancar de nuevo. Pero tenemos que previamente hacer un reload del demonio:

sudo systemctl daemon-reload

Y ahora sí arrancamos el servicio de elasticsearch:

sudo systemctl start elasticsearch

Ya no debería mostrar errores y arrancar correctamente.

Conclusiones

Espero que os haya servido, sobre todo la parte del problema del timeout que a mí me llevó bastante tiempo resolver ya que no hay mucha información al respecto.