Cómo Configurar tu Primer Clúster de Elasticsearch para Desarrollo
Configura un clúster local de Elasticsearch para desarrollo, verifica su estado y evita errores comunes en configuraciones de un solo nodo y múltiples nodos.
Cómo Configurar tu Primer Clúster de Elasticsearch para Desarrollo
Configurar tu primer clúster de Elasticsearch se trata principalmente de elegir una configuración de desarrollo segura y verificar que el nodo realmente se haya unido al clúster que esperabas. Una configuración de un solo nodo es suficiente para pruebas básicas de indexación y búsqueda; una configuración local de múltiples nodos te ayuda a aprender sobre descubrimiento y asignación de fragmentos.
El enfoque aquí es el desarrollo local. No reutilices estas configuraciones relajadas para un clúster público o de producción.
Prerrequisitos
Antes de comenzar, asegúrate de cumplir con los siguientes requisitos previos:
- Entorno de ejecución Java: Las distribuciones recientes de Elasticsearch incluyen un JDK integrado. Si usas un paquete o distribución que no lo incluye, instala la versión de Java requerida por esa versión de Elasticsearch.
- Descargar Elasticsearch: Obtén la distribución binaria de la versión deseada de Elasticsearch desde el sitio web oficial de Elastic.
- Recursos del sistema: Para pruebas básicas de desarrollo, 2GB de RAM son generalmente suficientes, aunque se recomienda más para pruebas con múltiples nodos.
Paso 1: Descargar y Extraer Elasticsearch
Una vez descargado (generalmente como un archivo .zip o .tar.gz), extrae el archivo en un directorio donde desees alojar los archivos de tu clúster (por ejemplo, ~/elasticsearch-8.12.0). Este directorio se conoce como el Directorio de Inicio de Elasticsearch.
Paso 2: Configurar un Clúster de un Solo Nodo (Configuración por Defecto para Desarrollo)
Por defecto, cuando ejecutas Elasticsearch por primera vez, intenta iniciarse como un clúster de un solo nodo. Sin embargo, las versiones modernas a menudo requieren configuración explícita, especialmente en lo que respecta a la seguridad y la configuración de memoria, incluso para desarrollo local.
Los archivos de configuración se encuentran en el directorio config/ dentro de tu Directorio de Inicio de Elasticsearch.
Configuración Esencial (config/elasticsearch.yml)
El archivo de configuración principal es elasticsearch.yml. Para una configuración local de un solo nodo, debes configurar al menos el nombre del clúster y el nombre del nodo.
# Configuración del clúster
cluster.name: dev-cluster
# Configuración del nodo
node.name: node-1
# Configuración de red (Usa localhost para desarrollo)
network.host: 127.0.0.1
# Puerto HTTP (El valor por defecto es 9200)
http.port: 9200
# Importante para desarrollo: Deshabilitar la seguridad inicialmente (¡Usar con precaución en producción!)
xpack.security.enabled: false
Advertencia sobre Seguridad: Deshabilitar
xpack.security.enabledes común para la configuración inicial de desarrollo para simplificar las pruebas. Nunca ejecutes esta configuración en un entorno accesible públicamente. Para versiones modernas de Elasticsearch (7.x+), a menudo necesitarás ejecutar comandos de configuración primero para generar contraseñas iniciales si la seguridad permanece habilitada.
Iniciar el Nodo Único
Navega a la raíz de tu directorio extraído y ejecuta el script de inicio apropiado. En Linux/macOS:
./bin/elasticsearch
En Windows usando PowerShell:
.\bin\elasticsearch.bat
Espera a que los registros indiquen que el nodo se ha iniciado correctamente, generalmente mostrando un mensaje como started.
Paso 3: Verificar el Estado del Clúster
Una vez que el proceso esté en ejecución, puedes verificar el estado del clúster usando curl contra el puerto HTTP por defecto (9200).
Verificar la Salud del Clúster
Este comando verifica la salud general del clúster:
curl -X GET "http://localhost:9200/_cat/health?v"
Fragmento de Salida Esperada:
epoch timestamp cluster status node.total node.data shards prio initialized
1678886400 10:00:00 dev-cluster green 1 1 0 0 1
El campo status debe ser green, indicando un clúster saludable de un solo nodo.
Verificar Información del Nodo
También puedes verificar la información del nodo:
curl -X GET "http://localhost:9200/_cat/nodes?v"
Paso 4: Configurar un Clúster de Múltiples Nodos (Para Pruebas Realistas)
Para un desarrollo más realista o pruebas de asignación de fragmentos, necesitas al menos dos nodos. Esto requiere ejecutar múltiples instancias separadas de Elasticsearch, cada una con configuraciones distintas.
Estructura de Directorios
Crea directorios separados para cada nodo dentro de tu área de trabajo principal (por ejemplo, es_data/node1, es_data/node2). Copia la distribución base de Elasticsearch en cada uno de estos directorios, o enlázalos a la instalación principal.
Diferencias en la Configuración de los Nodos
Para cada nodo, crea un archivo config/elasticsearch.yml único:
Configuración del Nodo 1 (es_data/node1/config/elasticsearch.yml)
cluster.name: dev-cluster
node.name: node-1
network.host: 127.0.0.1
http.port: 9200
transport.port: 9300
path.data: node1_data # Ruta de datos única
xpack.security.enabled: false
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
# Esta línea le dice al nodo 1 cómo encontrar otros miembros
cluster.initial_master_nodes: ["node-1", "node-2"]
Configuración del Nodo 2 (es_data/node2/config/elasticsearch.yml)
cluster.name: dev-cluster
node.name: node-2
network.host: 127.0.0.1
http.port: 9201 # Debe usar un puerto HTTP diferente
transport.port: 9301 # Debe usar un puerto de transporte diferente
path.data: node2_data # Ruta de datos única
xpack.security.enabled: false
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
# Esta línea le dice al nodo 2 cómo encontrar otros miembros
cluster.initial_master_nodes: ["node-1", "node-2"]
Iniciar el Clúster de Múltiples Nodos
- Inicia el Nodo 1: Navega a
es_data/node1y ejecuta./bin/elasticsearch. - Inicia el Nodo 2: Navega a
es_data/node2y ejecuta./bin/elasticsearch.
Verificar el Clúster de Múltiples Nodos
Verifica el número de nodos usando la API contra cualquier puerto HTTP en ejecución (por ejemplo, 9200):
curl -X GET "http://localhost:9200/_cat/nodes?v"
Fragmento de Salida Esperada:
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 15 50 0 0.01 0.02 0.01 mdi * node-1
127.0.0.1 16 51 0 0.00 0.01 0.01 mdi - node-2
Si ves dos entradas bajo name, tu clúster de múltiples nodos está correctamente formado.
Mejores Prácticas para Entornos de Desarrollo
- Usa Rutas de Datos Dedicadas: Siempre configura
path.dataexplícitamente para cada nodo, especialmente en configuraciones de múltiples nodos, para evitar la contaminación accidental de datos entre instancias. - Puertos Únicos: Usa puertos HTTP únicos (
http.port) y puertos de transporte únicos (transport.port) para cada nodo local para que no entren en conflicto. - Bloqueo de Memoria: Para desarrollo, asegúrate de no estar encontrando limitaciones de tamaño de heap. Si encuentras errores de inicio relacionados con la memoria, es posible que necesites ajustar el tamaño del heap de la JVM en el archivo
jvm.options(aunque los valores por defecto suelen ser suficientes para pruebas básicas).
Próximos Pasos: Indexar Datos
Con tu clúster en ejecución, el siguiente paso lógico es crear un índice y configurar sus ajustes. Por ejemplo, para crear un índice simple llamado products:
curl -X PUT "http://localhost:9200/products?pretty"
Esta configuración fundamental te permite comenzar a interactuar con Elasticsearch usando bibliotecas cliente o Kibana.