Para comenzar, descargaremos la versión 7.10.0 de Elasticsearch desde el sitio oficial de Elastic. Una vez descargado el archivo tar.gz, lo transferimos a nuestro servider Ubuntu mediante SFTP o la herramienta que prefieras.
Creamos un directorio para alojar el motor de búsqueda y descomprimimos el paquete:
mkdir -p /opt/es-cluster
tar -xzf elasticsearch-7.10.0-linux-x86_64.tar.gz -C /opt/es-cluster/
Ajustes del sistema operativo
Elasticsearch requiere modificar el límite de mapeo de memoria virtual. Editamos el archivo sysctl.conf:
sudo nano /etc/sysctl.conf
Agregamos al final del archivo:
vm.max_map_count=262144
Aplicamos el cambio inmediatamente:
sudo sysctl -p
También necesitamos incrementar el número máximo de descriptores de archivo. Editamos limits.conf:
sudo nano /etc/security/limits.conf
Añadimos las siguientes líneas:
* soft nofile 65536
* hard nofile 65536
Estos cambios requieren reiniciar el sistema para surtir efecto.
Configuración de Elasticsearch
Editamos el archivo principal de configuración:
sudo nano /opt/es-cluster/elasticsearch-7.10.0/config/elasticsearch.yml
Configuramos los siguientes parámetros:
cluster.name: cluster-busqueda
node.name: instancia-principal
path.data: /opt/es-cluster/elasticsearch-7.10.0/data
path.logs: /opt/es-cluster/elasticsearch-7.10.0/logs
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["instancia-principal"]
http.cors.enabled: true
http.cors.allow-origin: "*"
Debemos crear el directorio data manualmente si no existe. Es importante respetar los espacios después de los dos puntos en cada parámetro.
Permisos y arranque
Elasticsearch no puede ejecutarse como root, por lo que asignamos la propiedad del directorio a nuestro usuario:
sudo chown -R usuario:usuario /opt/es-cluster
cd /opt/es-cluster/elasticsearch-7.10.0/bin
./elasticsearch
Para verificar que el servicio está activo, accedemos desde el navegador a la dirección IP del servidor por el puerto 9200. Si todo está correcto, veremos un JSON con la información del nodo.
Comandos de gestión
# Iniciar en primer plano
./elasticsearch
# Iniciar en segundo plano
./elasticsearch -d
# Localizar proceso
ps aux | grep elasticsearch
# Detener servicio
kill -9 [PID]
Instalación de Kibana
Descargamos Kibana en la misma versión que Elasticsearch desde el sitio oficial. Transferimos el archivo al servidor y lo descomprmiimos:
tar -xzf kibana-7.10.0-linux-x86_64.tar.gz -C /opt/es-cluster/
Configuración de Kibana
Editamos el archivo de configuración:
sudo nano /opt/es-cluster/kibana-7.10.0-linux-x86_64/config/kibana.yml
Definimos los parámetros de conexión:
server.port: 5601
server.host: "0.0.0.0"
server.name: "panel-visualizacion"
elasticsearch.hosts: ["http://localhost:9200"]
i18n.locale: "zh-CN"
Asignamos permisos al usuario correspondiente:
sudo chown -R usuario:usuario /opt/es-cluster/kibana-7.10.0-linux-x86_64
Iniciamos Kibana asegurándonos de que Elasticsearch ya esté corriendo:
cd /opt/es-cluster/kibana-7.10.0-linux-x86_64/bin
./kibana
Accedemos al panel visual mediante el puerto 5601 en el navegador.
Configuración de clúster con múltiples nodos
Para desplegar un clúster de tres nodos en un mismo servidor, comenzamos creando una estructura de directorios adecuada:
mkdir -p /opt/es-cluster/cluster-nodes/nodo-1
mkdir -p /opt/es-cluster/cluster-nodes/nodo-2
mkdir -p /opt/es-cluster/cluster-nodes/nodo-3
mkdir -p /opt/es-cluster/cluster-nodes/datos-compartidos
mkdir -p /opt/es-cluster/cluster-nodes/logs-compartidos
Descomprimimos el paquete de Elasticsearch tres veces, una para cada nodo:
tar -xzf elasticsearch-7.10.0-linux-x86_64.tar.gz -C /opt/es-cluster/cluster-nodes/nodo-1 --strip-components=0
tar -xzf elasticsearch-7.10.0-linux-x86_64.tar.gz -C /opt/es-cluster/cluster-nodes/nodo-2 --strip-components=0
tar -xzf elasticsearch-7.10.0-linux-x86_64.tar.gz -C /opt/es-cluster/cluster-nodes/nodo-3 --strip-components=0
Asignamos permisos para todos los nodos:
sudo chown -R usuario:usuario /opt/es-cluster/cluster-nodes
Configuración individual de cada nodo
Nodo 1:
cluster.name: cluster-busqueda
node.name: nodo-maestro-01
node.master: true
node.data: true
path.data: /opt/es-cluster/cluster-nodes/datos-compartidos
path.logs: /opt/es-cluster/cluster-nodes/logs-compartidos
network.host: 0.0.0.0
http.port: 9201
transport.tcp.port: 9700
discovery.seed_hosts: ["localhost:9700", "localhost:9800", "localhost:9900"]
cluster.initial_master_nodes: ["nodo-maestro-01", "nodo-maestro-02", "nodo-maestro-03"]
Nodo 2:
cluster.name: cluster-busqueda
node.name: nodo-maestro-02
node.master: true
node.data: true
path.data: /opt/es-cluster/cluster-nodes/datos-compartidos
path.logs: /opt/es-cluster/cluster-nodes/logs-compartidos
network.host: 0.0.0.0
http.port: 9202
transport.tcp.port: 9800
discovery.seed_hosts: ["localhost:9700", "localhost:9800", "localhost:9900"]
cluster.initial_master_nodes: ["nodo-maestro-01", "nodo-maestro-02", "nodo-maestro-03"]
Nodo 3:
cluster.name: cluster-busqueda
node.name: nodo-maestro-03
node.master: true
node.data: true
path.data: /opt/es-cluster/cluster-nodes/datos-compartidos
path.logs: /opt/es-cluster/cluster-nodes/logs-compartidos
network.host: 0.0.0.0
http.port: 9203
transport.tcp.port: 9900
discovery.seed_hosts: ["localhost:9700", "localhost:9800", "localhost:9900"]
cluster.initial_master_nodes: ["nodo-maestro-01", "nodo-maestro-02", "nodo-maestro-03"]
Optimización de memoria JVM
Para evitar consumos excesivos en un entorno de desarrollo, reducimos la memoria asignada a cada nodo editando jvm.options:
nano /opt/es-cluster/cluster-nodes/nodo-1/elasticsearch-7.10.0/config/jvm.options
Modificamos los valores de heap:
-Xms256m
-Xmx256m
Repetimos este proceso para los nodos 2 y 3.
Inicio del clúster
Lanzamos cada nodo en segundo plano de forma secuencial:
cd /opt/es-cluster/cluster-nodes/nodo-1/elasticsearch-7.10.0/bin && ./elasticsearch -d
cd /opt/es-cluster/cluster-nodes/nodo-2/elasticsearch-7.10.0/bin && ./elasticsearch -d
cd /opt/es-cluster/cluster-nodes/nodo-3/elasticsearch-7.10.0/bin && ./elasticsearch -d
Para verificar el estado del clúster, consultamos el endpoint de salud:
curl http://192.168.78.131:9201/_cat/health?v
La respuesta debería mostrar el estado green con un total de 3 nodos.
Conexión de Kibana al clúster
Modificamos la configuración de Kibana para que apunte a los tres nodos:
server.port: 5601
server.host: "0.0.0.0"
server.name: "panel-visualizacion"
elasticsearch.hosts: ["http://localhost:9201", "http://localhost:9202", "http://localhost:9203"]
i18n.locale: "zh-CN"
Iniciamos Kibana y accedemos al panel por el puerto 5601:
cd /opt/es-cluster/kibana-7.10.0-linux-x86_64/bin
./kibana