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:
#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:
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:
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:
[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.
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
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:
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
chkconfig --add elasticsearch
service elasticsearch start
service elasticsearch stop
En sistemas con systemd
/bin/systemctl daemon-reload
/bin/systemctl enable elasticsearch.service
systemctl start elasticsearch.service
systemctl stop elasticsearch.service
Un ejemplo de la salida:
[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:
lsof -i :9200
Con el resultado:
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:
[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 :