Instalar Elasticsearch en Centos 7

Hola amigas y amigos, tal y como os dije hace unas semanas, voy a dedicar una serie de artículos a Elasticsearch. Si no sabes de lo que te hablo, puedes consultar el primer artículo de esta serie, llamado: “¿Qué es y cómo funciona Elasticsearch?» Pues bien, hoy veremos como instalarlo sobre un sistema operativo GNU/Linux, con paquetería RPM, esto es, Centos 7. Cabe decir que la mayoría de pasos son comunes para todas las distribuciones con este tipo de paquetería, ya sea OpenSUSE, Fedora o ScientificLinux

Instalación de Elasticsearch en Centos 7

Un requisito previo indispensable es instalar OpenJDK de Java, en Centos 7, instalaremos el siguiente paquete:

  1. #Si utilizáis 'sudo' sólo lo debéis añadir delente de los comandos
  2. yum install java-1.8.0-openjdk.x86_64

Una vez instalado comprobamos su versión con:

  1. java -version
  2. openjdk version "1.8.0_181"
  3. OpenJDK Runtime Environment (build 1.8.0_181-b13)
  4. OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

Antes de nada, debemos añadir los repositorios oficiales del producto. Para ello debemos importar la llave PGP, que más adelante necesitará el repositorio.

Como sigue:

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

Una vez hecho esto, creamos el fichero con la información del repositorio, para la versión 6.

En estos momentos es la versión 6.4.0, en la ubicación /etc/yum.repos.d/, creamos el fichero elasticsearch.repo, con la información:

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

Guardamos el fichero y volvemos a la consola de comandos.

Actualizamos e instalamos los paquetes de Elasticsearch.

  1. yum install elasticsearch

Otra opción, si nos interesa, es descargar el paquete con extensión RPM desde las fuentes oficiales. Esta opción también nos puede servir con otras distribuciones que utilizan este paquetería, como por ejemplo Fedora, Scientific Linux u OpenSuse

  1. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.rpm
  2. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.rpm.sha512
  3. shasum -a 512 -c elasticsearch-6.4.0.rpm.sha512  
  4. sudo rpm --install elasticsearch-6.4.0.rpm

Con la siguiente salida en mi caso:

  1. Preparando...                         ################################# [100%]
  2. Creating elasticsearch group... OK
  3. Creating elasticsearch user... OK
  4. Actualizando / instalando...
  5.    1:elasticsearch-0:6.4.0-1          ################################# [100%]
  6. ### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
  7.  sudo systemctl daemon-reload
  8.  sudo systemctl enable elasticsearch.service
  9. ### You can start elasticsearch service by executing
  10.  sudo systemctl start elasticsearch.service
  11. Created elasticsearch keystore in /etc/elasticsearch

Además, si queremos descargar el paquete únicamente con las partes que utilizan la licencia Apache 2.0, sería desde aquí:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-6.4.0.rpm

Creación automática de índices por parte de X-Pack

Antes de nada, ¿Qué es X-Pack?

Se trata de una extensión que agrupa las capacidades de seguridad, alerta, monitoreo, informes y gráficos.

X-Pack intentará crear de forma automática índices dentro de Elasticsearch. De forma predeterminada Elasticsearch está configurado para permitir la creación automática de índices y no requiere pasos adicionales.

Sin embargo , si hemos desactivado la creación automática de índices, debemos configurar “action.auto_create_index” en el fichero de configuración “elasticsearch.yml”, para así permitir que X-Pack pueda generar los índices.

Habilitar al inicio

Elasticsearch no se añade al arranque automáticamente en el sistema operativo, ya sea si utilizamos Init o systemd, debemos añadirlo de manera manual.

En sistemas con SysV init

  1. chkconfig --add elasticsearch
  2. service elasticsearch start
  3. service elasticsearch stop

En sistemas con systemd

  1. /bin/systemctl daemon-reload
  2. /bin/systemctl enable elasticsearch.service
  3. systemctl start elasticsearch.service
  4. systemctl stop elasticsearch.service

Un ejemplo de la salida:

  1. [root@servcentos1 yum.repos.d]# systemctl enable elasticsearch
  2. Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
  3. [root@servcentos1 yum.repos.d]# systemctl start elasticsearch
  4. [root@servcentos1 yum.repos.d]# systemctl status elasticsearch
  5. ● elasticsearch.service - Elasticsearch
  6.    Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
  7.    Active: active (running) since mié 2018-09-12 10:56:17 CEST; 5s ago
  8.      Docs: http://www.elastic.co
  9.  Main PID: 1438 (java)
  10.    CGroup: /system.slice/elasticsearch.service
  11.            └─1438 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccup...
  12.  
  13. sep 12 10:56:17 servcentos1.localdomain systemd[1]: Started Elasticsearch.
  14. sep 12 10:56:17 servcentos1.localdomain systemd[1]: Starting Elasticsearch...
  15. sep 12 10:56:18 servcentos1.localdomain elasticsearch[1438]: OpenJDK 64-Bit Server VM wa...
  16. Hint: Some lines were ellipsized, use -l to show in ful

Comprobar que Elasticsearch está funcionando

Elasticsearch funciona por el puerto 9200, por lo que podemos comprobar que efectivamente esto es así, de la siguiente manera:

  1. lsof -i :9200

Con el resultado:

  1. COMMAND  PID          USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  2. java    1438 elasticsearch  193u  IPv6  19248      0t0  TCP localhost:wap-wsp (LISTEN)
  3. java    1438 elasticsearch  195u  IPv6  19249      0t0  TCP localhost:wap-wsp (LISTEN)

O bien consultar la IP del host por el mismo puerto. Lo podemos hacer vía navegador web o bien utilizando curl:

  1. [root@servcentos1 yum.repos.d]# curl localhost:9200
  2. {
  3.   "name" : "it-2G_E",
  4.   "cluster_name" : "elasticsearch",
  5.   "cluster_uuid" : "glkaubghRGS_0BVVsBUZ7A",
  6.   "version" : {
  7.     "number" : "6.4.0",
  8.     "build_flavor" : "default",
  9.     "build_type" : "rpm",
  10.     "build_hash" : "595516e",
  11.     "build_date" : "2018-08-17T23:18:47.308994Z",
  12.     "build_snapshot" : false,
  13.     "lucene_version" : "7.4.0",
  14.     "minimum_wire_compatibility_version" : "5.6.0",
  15.     "minimum_index_compatibility_version" : "5.0.0"
  16.   },
  17.   "tagline" : "You Know, for Search"

Configuración de Elasticsearch

Elasticsearch usa de forma predeterminada la ubicación /etc/elasticsearch para la configuración de tiempo de ejecución. La propiedad de este directorio y todos los archivos de este directorio se establecen en la raíz: elasticsearch , en la instalación del paquete y el directorio tiene establecido el indicador setgid para que los archivos y subdirectorios creados en /etc/elasticsearch, también se crean con esta propiedad (por ejemplo, si se crea un almacén de claves con la herramienta de almacén de claves). Se espera que esto se mantenga para que el proceso Elasticsearch pueda leer los archivos en este directorio a través de los permisos del grupo.

Elasticsearch carga su configuración desde el archivo /etc/elasticsearch/elasticsearch.yml de forma predeterminada.

El RPM también tiene un archivo de configuración del sistema /etc/sysconfig/elasticsearch, que le permite establecer los siguientes parámetros:

  • JAVA_HOME -> Establece una ruta de Java predeterminada
  • MAX_OPEN_FILES -> Número máximo de archivos abiertos, por defecto 65536
  • MAX_LOCKED_MEMORY -> Tamaño máximo de memoria bloqueada.
  • MAX_MAP_COUNT -> Número máximo de áreas de mapa de memoria que puede tener acceso.
  • ES_PATH_CONF -> Directorio de archivos de configuración, por defecto es /etc/elasticsearch
  • ES_JAVA_OPTS -> Cualquier propiedad adicional del sistema JVM que deseemos aplicar.
  • RESTART_ON_UPGRADE -> Configurar el reinicio en la actualización del paquete, el valor predeterminado es falso.

Las distribuciones que usan systemd requieren que los límites de recursos del sistema se configuren mediante systemd en lugar de a través del archivo /etc/sysconfig/elasticsearch.

Para ampliar la información sobre estas opciones y toda la instalación de Elasticsearch vía RPM, os recomiendo este enlace oficial en inglés, que es en el que me he basado para elaborar el artículo y realizar las pruebas:

Elastic.co – Install Elasticsearch with RPM

Además me he servido de la siguiente documentación en Internet :

DigitalOcean – How the install Java in CentOS and Fedora