Guía paso a paso para configurar un clúster básico de tres nodos

Aprenda a configurar rápidamente un clúster básico de Elasticsearch resiliente de tres nodos. Este tutorial paso a paso cubre la configuración esencial en `elasticsearch.yml`, el arranque del descubrimiento del clúster usando `cluster.initial_master_nodes`, el inicio de los servicios y la verificación de la salud y la replicación de shards entre los nodos mediante comandos prácticos de cURL.

50 vistas

Guía Paso a Paso para Configurar un Cluster Básico de Tres Nodos

Configurar un cluster de Elasticsearch resiliente es fundamental para lograr alta disponibilidad y escalabilidad horizontal en su infraestructura de búsqueda y análisis. Un cluster de tres nodos ofrece un excelente punto de partida, brindando la redundancia necesaria para soportar la falla de un solo nodo sin interrupción del servicio. Esta guía completa lo guiará a través del proceso de instalación, configuración y verificación de un cluster básico de Elasticsearch de tres nodos, ideal para entornos de desarrollo o implementaciones de producción a pequeña escala.

Al finalizar este tutorial, tendrá un cluster funcional donde los datos pueden distribuirse y replicarse de forma segura, aprovechando las capacidades distribuidas centrales de Elasticsearch.


Requisitos Previos

Antes de comenzar la configuración, asegúrese de tener lo siguiente:

  1. Tres Servidores/VM Separados: Cada uno alojará un nodo. Para esta guía, asumimos que tiene tres máquinas distintas o contenedores Docker listos.
  2. Kit de Desarrollo de Java (JDK): Elasticsearch requiere un JDK compatible instalado en todos los nodos (ej., JDK 17, dependiendo de su versión de Elasticsearch).
  3. Conectividad de Red: Asegúrese de que los tres nodos puedan comunicarse entre sí a través de los puertos necesarios (puerto HTTP predeterminado: 9200, puerto de transporte predeterminado: 9300).
  4. Instalación Idéntica de Elasticsearch: Descargue y extraiga la misma versión de Elasticsearch en los tres nodos.

Paso 1: Configuración del elasticsearch.yml de Cada Nodo

El archivo de configuración, elasticsearch.yml, ubicado en el directorio config/ de su instalación de Elasticsearch, es crucial para definir cómo se comporta cada nodo dentro del cluster. Debe ajustar la configuración específica para cada nodo.

Definiremos tres roles implícitamente: un nodo elegible como maestro y tres nodos elegibles como datos. Para un cluster de tres nodos, es práctica común permitir que todos los nodos posean roles de maestro, datos e ingestión.

Configuraciones Comunes para Todos los Nodos

Asegúrese de que estas configuraciones sean idénticas en los tres archivos de configuración:

# Cluster Name: Debe ser el mismo en todos los nodos
cluster.name: my-three-node-cluster

# Configuración de Descubrimiento (Crucial para la unión inicial)
# Use una lista semilla de nodos conocidos para iniciar el descubrimiento
discovery.seed_hosts: ["node1_ip:9300", "node2_ip:9300", "node3_ip:9300"]

# Requerido para el quorum (N/2 + 1). Para 3 nodos, necesitamos 2 votos.
cluster.initial_master_nodes: ["node1_name", "node2_name", "node3_name"]

# Configuración de Red (Asegúrese de vincular a la IP correcta)
network.host: 0.0.0.0 # O la IP privada específica del host

# Puerto HTTP (Acceso externo)
http.port: 9200

# Puerto de Transporte (Comunicación interna del cluster)
transport.port: 9300

Configuraciones Únicas por Nodo

Cada nodo requiere un node.name único y, potencialmente, una path.data única si se ejecuta en la misma máquina o comparte almacenamiento.

Configuración del Nodo 1 (node1_ip)

# Identificador Único para el Nodo 1
node.name: node-1

# Si las rutas difieren
# path.data: /var/lib/elasticsearch/data_node1

Configuración del Nodo 2 (node2_ip)

# Identificador Único para el Nodo 2
node.name: node-2

Configuración del Nodo 3 (node3_ip)

# Identificador Único para el Nodo 3
node.name: node-3

Nota Importante sobre cluster.initial_master_nodes: Esta configuración solo se utiliza cuando el cluster se inicia por primera vez. Una vez que el cluster se forma, Elasticsearch gestiona la elección del maestro internamente. Si alguna vez necesita reiniciar un cluster completamente inactivo (dead), debe asegurarse de que estos nombres coincidan con la configuración inicial.


Paso 2: Configuración de Roles (Opcional pero Recomendado)

Aunque la configuración predeterminada permite que los nodos asuman todos los roles (maestro, datos, ingesta, coordinación), en implementaciones más grandes, los roles se separan. Para una configuración robusta de tres nodos, nos aseguramos de que todos los nodos sean elegibles para convertirse en el maestro.

Agregue la siguiente configuración de roles a los tres archivos elasticsearch.yml:

# Habilitar todos los roles estándar en todos los nodos para esta configuración inicial
node.roles: [ master, data, ingest, remote_cluster_client ]

Manejo del Quorum para la Resiliencia

Con tres nodos, el cluster puede tolerar la pérdida de un nodo mientras mantiene el quorum (2 de 3 nodos permanecen). Esto se gestiona mediante la lista cluster.initial_master_nodes proporcionada en el Paso 1.


Paso 3: Inicio de los Nodos del Cluster

Inicie Elasticsearch secuencialmente en cada nodo. Generalmente, es más seguro comenzar por los nodos enumerados primero en cluster.initial_master_nodes, aunque el Elasticsearch moderno maneja bien el inicio desordenado.

En el Nodo 1, Nodo 2 y Nodo 3:

Navegue hasta el directorio de instalación de Elasticsearch y ejecute:

# Para ejecutar en primer plano (útil para la depuración)
bin/elasticsearch

# Para ejecutar en segundo plano (recomendado para producción)
bin/elasticsearch -d

Supervise los logs (logs/elasticsearch.log) en cada nodo para ver los mensajes de inicio exitoso, particularmente aquellos que indican que se han unido al cluster correctamente.


Paso 4: Verificación del Estado del Cluster

Una vez que todos los nodos se han iniciado, utilice la API _cat/health, accesible a través del puerto HTTP de cualquier nodo (predeterminado 9200), para confirmar el estado del cluster.

Acceda a esto desde una máquina que pueda alcanzar los nodos (ej., a través de curl):

Comprobar Estado:

curl -X GET "http://node1_ip:9200/_cat/health?v"

Fragmento de Salida Esperada:

epoch timestamp cluster status node.total node.data shards pri relo init unassigned unpersisted
1701331200 12:00:00 my-three-node-cluster green 3 3 0 0 0 0 0 0

Si status es green (verde) y node.total es 3, su cluster está activo y funcionando correctamente.

Verificación de la Pertenencia de Nodos

Para confirmar que todos los nodos se ven entre sí, verifique la lista de nodos:

curl -X GET "http://node1_ip:9200/_cat/nodes?v"

Debería ver tres entradas distintas correspondientes a node-1, node-2 y node-3, cada una mostrando sus direcciones IP y roles (m para elegible como maestro, d para datos).


Paso 5: Creación de un Índice de Prueba con Replicación

Para verificar la capacidad del cluster para distribuir datos y manejar la replicación, debemos crear un índice que especifique al menos una réplica.

En un cluster de tres nodos, establecer number_of_replicas en 1 asegura que cada shard primario tenga una copia (réplica) distribuida en un nodo diferente, proporcionando tolerancia a fallos inmediata.

Comando para Crear Índice:

```bash
curl -X PUT "http://node1_ip:9200/test_data_index?pretty" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 3