Introducció

En aquest tema, explorarem l'arquitectura d'Elasticsearch, que és fonamental per entendre com funciona aquest motor de cerca i anàlisi distribuït. Coneixerem els components clau com nodes, clústers, índexs, fragments i rèpliques, i com interactuen entre ells per proporcionar una cerca ràpida i escalable.

Components Clau

Nodes

Un node és una instància d'Elasticsearch que forma part d'un clúster. Cada node té un nom únic i pot tenir diferents rols, com ara:

  • Node Mestre (Master Node): Responsable de les operacions administratives, com la creació i eliminació d'índexs, i la gestió de l'estat del clúster.
  • Node de Dades (Data Node): Emmagatzema dades i executa operacions de cerca i agregació.
  • Node de Coordinació (Coordinating Node): Reenvia les sol·licituds dels clients als nodes de dades adequats.
  • Node d'Ingestió (Ingest Node): Processa les dades abans d'indexar-les, aplicant transformacions com pipelines d'ingestió.

Clúster

Un clúster és un conjunt de nodes que treballen junts per emmagatzemar dades i proporcionar capacitats de cerca i anàlisi. Cada clúster té un nom únic que s'utilitza per identificar-lo. Els nodes dins d'un clúster comparteixen la mateixa configuració i poden comunicar-se entre ells.

Índexs

Un índex és una col·lecció de documents que tenen característiques similars. Cada índex té un nom únic i es compon de múltiples fragments (shards). Els índexs són l'equivalent a les bases de dades en altres sistemes de gestió de bases de dades.

Fragments i Rèpliques

  • Fragments (Shards): Un índex es divideix en fragments per distribuir les dades i les càrregues de treball entre els nodes del clúster. Cada fragment és una instància de Lucene i pot ser gestionat per un node diferent.
  • Rèpliques (Replicas): Les rèpliques són còpies dels fragments que proporcionen alta disponibilitat i tolerància a fallades. Si un node falla, les rèpliques asseguren que les dades encara estiguin disponibles.

Diagrama de l'Arquitectura

A continuació, es mostra un diagrama simplificat de l'arquitectura d'Elasticsearch:

+-------------------+       +-------------------+
|    Node Mestre    |       |    Node Mestre    |
|                   |       |                   |
|  (Master Node)    |       |  (Master Node)    |
+-------------------+       +-------------------+
          |                         |
          |                         |
+-------------------+       +-------------------+
|    Node de Dades  |       |    Node de Dades  |
|                   |       |                   |
|  (Data Node)      |       |  (Data Node)      |
+-------------------+       +-------------------+
          |                         |
          |                         |
+-------------------+       +-------------------+
|    Node de Dades  |       |    Node de Dades  |
|                   |       |                   |
|  (Data Node)      |       |  (Data Node)      |
+-------------------+       +-------------------+

Flux de Dades

  1. Indexació de Dades:

    • Les dades s'envien a un node de coordinació.
    • El node de coordinació distribueix les dades als nodes de dades corresponents.
    • Els nodes de dades emmagatzemen les dades en fragments i creen rèpliques.
  2. Cerca de Dades:

    • Una sol·licitud de cerca s'envia a un node de coordinació.
    • El node de coordinació distribueix la sol·licitud als nodes de dades que contenen els fragments rellevants.
    • Els nodes de dades executen la cerca i retornen els resultats al node de coordinació.
    • El node de coordinació agrega els resultats i els retorna al client.

Exercici Pràctic

Exercici 1: Configuració d'un Clúster Bàsic

  1. Instal·la Elasticsearch en tres màquines diferents o en tres instàncies diferents en la teva màquina local.
  2. Configura cada instància per formar part del mateix clúster.
    • Edita el fitxer elasticsearch.yml per a cada instància:
      cluster.name: my_cluster
      node.name: node_1  # Canvia a node_2 i node_3 per a les altres instàncies
      network.host: 0.0.0.0
      discovery.seed_hosts: ["host1", "host2", "host3"]  # Canvia als noms o IPs reals
      cluster.initial_master_nodes: ["node_1", "node_2", "node_3"]
      
  3. Inicia cada instància d'Elasticsearch.
  4. Verifica que el clúster està format correctament utilitzant l'API de clúster:
    curl -X GET "localhost:9200/_cluster/health?pretty"
    

Solució

Si tot està configurat correctament, hauríeu de veure una resposta similar a aquesta:

{
  "cluster_name": "my_cluster",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 3,
  "number_of_data_nodes": 3,
  "active_primary_shards": 1,
  "active_shards": 2,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100.0
}

Conclusió

En aquest tema, hem après sobre l'arquitectura d'Elasticsearch, incloent-hi els components clau com nodes, clústers, índexs, fragments i rèpliques. També hem vist com aquests components interactuen per proporcionar una cerca ràpida i escalable. A més, hem realitzat un exercici pràctic per configurar un clúster bàsic d'Elasticsearch. Amb aquest coneixement, estem preparats per aprofundir en la indexació i cerca de dades en els següents mòduls.

© Copyright 2024. Tots els drets reservats