En este módulo, aprenderemos cómo escalar Elasticsearch para manejar grandes volúmenes de datos y consultas de manera eficiente. La escalabilidad es crucial para mantener el rendimiento y la disponibilidad de tu clúster a medida que crece. Abordaremos conceptos clave, estrategias y mejores prácticas para escalar Elasticsearch.

Conceptos Clave

  1. Escalabilidad Horizontal vs. Vertical

  • Escalabilidad Horizontal: Añadir más nodos al clúster para distribuir la carga de trabajo.
  • Escalabilidad Vertical: Aumentar los recursos (CPU, RAM, almacenamiento) de los nodos existentes.

  1. Tipos de Nodos

  • Nodos Maestro: Gestionan el clúster y realizan tareas administrativas.
  • Nodos de Datos: Almacenan datos y manejan operaciones de búsqueda y análisis.
  • Nodos Coordinadores: Distribuyen las solicitudes de búsqueda y agregación a los nodos de datos.
  • Nodos Ingestores: Procesan datos antes de indexarlos.

  1. Shards y Réplicas

  • Shards: Fragmentos de un índice que permiten distribuir datos y operaciones.
  • Réplicas: Copias de shards que proporcionan redundancia y alta disponibilidad.

Estrategias de Escalabilidad

  1. Añadir Nodos al Clúster

  • Nodos de Datos: Incrementar el número de nodos de datos para distribuir la carga de almacenamiento y procesamiento.
  • Nodos Maestro: Asegurar que hay al menos tres nodos maestro para evitar problemas de quorum.
  • Nodos Coordinadores: Añadir nodos coordinadores para manejar grandes volúmenes de solicitudes de búsqueda.

  1. Ajustar el Número de Shards y Réplicas

  • Shards: Dividir índices grandes en más shards para mejorar el rendimiento de búsqueda y escritura.
  • Réplicas: Aumentar el número de réplicas para mejorar la disponibilidad y la tolerancia a fallos.

  1. Uso de Índices por Tiempo

  • Crear índices basados en periodos de tiempo (diarios, semanales, mensuales) para manejar grandes volúmenes de datos históricos.

  1. Optimización de Consultas

  • Filtros en Caché: Utilizar filtros en caché para mejorar el rendimiento de consultas repetitivas.
  • Paginación Eficiente: Evitar paginación profunda utilizando search_after en lugar de from y size.

Ejemplo Práctico: Añadir Nodos al Clúster

Paso 1: Configurar un Nuevo Nodo

  1. Instala Elasticsearch en el nuevo servidor.
  2. Configura el archivo elasticsearch.yml:
    cluster.name: my_cluster
    node.name: node-4
    network.host: 0.0.0.0
    discovery.seed_hosts: ["node-1", "node-2", "node-3"]
    cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
    

Paso 2: Iniciar el Nuevo Nodo

  • Inicia el servicio de Elasticsearch en el nuevo nodo:
    sudo systemctl start elasticsearch
    

Paso 3: Verificar el Estado del Clúster

  • Utiliza la API de _cat/nodes para verificar que el nuevo nodo se ha unido al clúster:
    curl -X GET "localhost:9200/_cat/nodes?v"
    

Ejercicio Práctico

Ejercicio 1: Añadir un Nodo Coordinador

  1. Configura un nuevo nodo como nodo coordinador.
  2. Verifica que el nodo se ha unido correctamente al clúster.
  3. Realiza una búsqueda y observa cómo el nodo coordinador distribuye la carga.

Solución del Ejercicio 1

  1. Configura el archivo elasticsearch.yml del nuevo nodo:

    cluster.name: my_cluster
    node.name: coordinator-1
    node.master: false
    node.data: false
    node.ingest: false
    network.host: 0.0.0.0
    discovery.seed_hosts: ["node-1", "node-2", "node-3"]
    cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
    
  2. Inicia el servicio de Elasticsearch en el nuevo nodo:

    sudo systemctl start elasticsearch
    
  3. Verifica el estado del clúster:

    curl -X GET "localhost:9200/_cat/nodes?v"
    
  4. Realiza una búsqueda:

    curl -X GET "localhost:9200/my_index/_search?q=field:value"
    

Conclusión

En esta sección, hemos aprendido sobre la importancia de la escalabilidad en Elasticsearch y las diferentes estrategias para escalar un clúster. Hemos cubierto cómo añadir nodos, ajustar shards y réplicas, y optimizar consultas para mejorar el rendimiento. Con estos conocimientos, estarás mejor preparado para manejar grandes volúmenes de datos y mantener un clúster de Elasticsearch eficiente y disponible.

© Copyright 2024. Todos los derechos reservados