Despliegue de clúster de Elasticsearch con Kibana en Ubuntu

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

Etiquetas: Elasticsearch Kibana Ubuntu clúster Búsqueda distribuida

Publicado el 7-6 19:42