Cómo configurar tu primer clúster de Elasticsearch para desarrollo
Comenzar con Elasticsearch puede parecer desalentador debido a su naturaleza distribuida, pero configurar un clúster básico para el desarrollo local es sencillo. Esta guía te guiará a través de los pasos esenciales necesarios para desplegar y configurar rápidamente un clúster funcional de Elasticsearch, ya sea que optes por una configuración simple de un solo nodo o un entorno de múltiples nodos más representativo. Comprender esta configuración inicial es crucial para indexar, consultar y explorar tus datos sin problemas utilizando las potentes capacidades de búsqueda y análisis de Elasticsearch.
Nos centraremos en los aspectos de configuración principales necesarios para un entorno de desarrollo, asegurando que tengas una base sólida antes de pasar a las consideraciones de producción.
Prerrequisitos
Antes de comenzar, asegúrate de cumplir con los siguientes prerrequisitos:
- Kit de desarrollo de Java (JDK): Elasticsearch requiere un JDK compatible instalado en tu sistema. Las versiones 7.x y posteriores de Elasticsearch suelen requerir JDK 11 o superior.
- Descargar Elasticsearch: Obtén la distribución binaria de la versión deseada de Elasticsearch del sitio web oficial de Elastic.
- Recursos del sistema: Para pruebas de desarrollo básicas, 2 GB de RAM son generalmente suficientes, aunque se recomiendan más para pruebas de 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 quieras 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 (predeterminado de 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 una configuración explícita, especialmente en lo que respecta a la seguridad y la configuración de memoria, incluso para el 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 predeterminado es 9200)
http.port: 9200
# Importante para desarrollo: desactiva la seguridad inicialmente (¡Úsalo con precaución en producción!)
xpack.security.enabled: false
Advertencia sobre seguridad: Desactivar
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 las versiones modernas de Elasticsearch (7.x y posteriores), 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):
.in\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 se esté ejecutando, puedes verificar el estado del clúster usando curl contra el puerto HTTP predeterminado (9200).
Comprobación del estado del clúster
Este comando verifica el estado general del clúster:
curl -X GET "http://localhost:9200/_cat/health?v"
Fragmento de salida esperado:
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, lo que indica un clúster de un solo nodo saludable.
Comprobación de la 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 o pruebas más realistas de asignación de shards, 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 enlaza a la instalación principal.
Diferencias de configuración de 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
path.data: node1_data # Ruta de datos única
xpack.security.enabled: false
# Esta línea indica 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
path.data: node2_data # Ruta de datos única
xpack.security.enabled: false
# Esta línea indica 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 recuento 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 esperado:
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 se ha formado correctamente.
Mejores prácticas para entornos de desarrollo
- Usa rutas de datos dedicadas: Configura siempre
path.dataexplícitamente para cada nodo, especialmente en configuraciones de múltiples nodos, para evitar la contaminación accidental de datos entre instancias. - Puertos efímeros: Usa puertos HTTP (
http.port) únicos para cada nodo para que no entren en conflicto cuando se ejecuten localmente. - Bloqueo de memoria: Para el desarrollo, asegúrate de no encontrar limitaciones en el tamaño del 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 predeterminados suelen ser suficientes para pruebas básicas).
Próximos pasos: Indexar datos
Con tu clúster en funcionamiento, el siguiente paso lógico es crear un índice y mapear configuraciones. 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 utilizando bibliotecas cliente o Kibana.