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
-
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.
-
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
- Instal·la Elasticsearch en tres màquines diferents o en tres instàncies diferents en la teva màquina local.
- 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"]
- Edita el fitxer
- Inicia cada instància d'Elasticsearch.
- 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.
Curs d'Elasticsearch
Mòdul 1: Introducció a Elasticsearch
- Què és Elasticsearch?
- Instal·lant Elasticsearch
- Conceptes Bàsics: Nodes, Clústers i Índexs
- Arquitectura d'Elasticsearch
Mòdul 2: Començant amb Elasticsearch
Mòdul 3: Tècniques Avançades de Cerca
Mòdul 4: Modelatge de Dades i Gestió d'Índexs
Mòdul 5: Rendiment i Escalabilitat
- Optimitzant el Rendiment de la Cerca
- Escalant Elasticsearch
- Monitorització i Manteniment
- Còpia de Seguretat i Restauració
Mòdul 6: Seguretat i Control d'Accés
- Assegurant Elasticsearch
- Autenticació i Autorització d'Usuaris
- Control d'Accés Basat en Rols
- Auditoria i Compliment
Mòdul 7: Integracions i Ecosistema
- Elasticsearch amb Logstash
- Elasticsearch amb Kibana
- Elasticsearch amb Beats
- Elasticsearch amb Altres Eines