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 2 | #Si utilizáis 'sudo' sólo lo debéis añadir delente de los comandos yum install java-1.8.0-openjdk.x86_64 |
Una vez instalado comprobamos su versión con:
1 2 3 4 | java -version openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) 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 2 3 4 5 6 7 8 | [elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 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 2 3 4 | wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.rpm wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.rpm.sha512 shasum -a 512 -c elasticsearch-6.4.0.rpm.sha512 sudo rpm --install elasticsearch-6.4.0.rpm |
Con la siguiente salida en mi caso:
1 2 3 4 5 6 7 8 9 10 11 | Preparando... ################################# [100%] Creating elasticsearch group... OK Creating elasticsearch user... OK Actualizando / instalando... 1:elasticsearch-0:6.4.0-1 ################################# [100%] ### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd sudo systemctl daemon-reload sudo systemctl enable elasticsearch.service ### You can start elasticsearch service by executing sudo systemctl start elasticsearch.service 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 2 3 | chkconfig --add elasticsearch
service elasticsearch start
service elasticsearch stop |
En sistemas con systemd
1 2 3 4 | /bin/systemctl daemon-reload /bin/systemctl enable elasticsearch.service systemctl start elasticsearch.service systemctl stop elasticsearch.service |
Un ejemplo de la salida:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@servcentos1 yum.repos.d]# systemctl enable elasticsearch Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service. [root@servcentos1 yum.repos.d]# systemctl start elasticsearch [root@servcentos1 yum.repos.d]# systemctl status elasticsearch ● elasticsearch.service - Elasticsearch Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled) Active: active (running) since mié 2018-09-12 10:56:17 CEST; 5s ago Docs: http://www.elastic.co Main PID: 1438 (java) CGroup: /system.slice/elasticsearch.service └─1438 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccup... sep 12 10:56:17 servcentos1.localdomain systemd[1]: Started Elasticsearch. sep 12 10:56:17 servcentos1.localdomain systemd[1]: Starting Elasticsearch... sep 12 10:56:18 servcentos1.localdomain elasticsearch[1438]: OpenJDK 64-Bit Server VM wa... 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 2 3 | COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 1438 elasticsearch 193u IPv6 19248 0t0 TCP localhost:wap-wsp (LISTEN) 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [root@servcentos1 yum.repos.d]# curl localhost:9200 { "name" : "it-2G_E", "cluster_name" : "elasticsearch", "cluster_uuid" : "glkaubghRGS_0BVVsBUZ7A", "version" : { "number" : "6.4.0", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "595516e", "build_date" : "2018-08-17T23:18:47.308994Z", "build_snapshot" : false, "lucene_version" : "7.4.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "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