Guida passo-passo alla configurazione di un cluster di base a tre nodi
L'impostazione di un cluster Elasticsearch resiliente è fondamentale per ottenere alta disponibilità e scalabilità orizzontale nella vostra infrastruttura di ricerca e analisi. Un cluster a tre nodi fornisce un ottimo punto di partenza, offrendo la ridondanza necessaria per resistere al fallimento di un singolo nodo senza interruzione del servizio. Questa guida completa vi accompagnerà attraverso il processo di installazione, configurazione e verifica di un cluster Elasticsearch di base a tre nodi, ideale per ambienti di sviluppo o distribuzioni di produzione su piccola scala.
Al termine di questo tutorial, avrete un cluster funzionante in cui i dati possono essere distribuiti e replicati in modo sicuro, sfruttando le capacità distribuite principali di Elasticsearch.
Prerequisiti
Prima di iniziare la configurazione, assicurati di avere quanto segue a disposizione:
- Tre Server/VM Separate: Ognuna ospiterà un nodo. Per questa guida, presumiamo che abbiate tre macchine o container Docker distinti pronti.
- Java Development Kit (JDK): Elasticsearch richiede un JDK compatibile installato su tutti i nodi (ad esempio, JDK 17, a seconda della vostra versione di Elasticsearch).
- Connettività di Rete: Assicurati che tutti e tre i nodi possano comunicare tra loro attraverso le porte necessarie (porta HTTP predefinita: 9200, porta di trasporto predefinita: 9300).
- Installazione di Elasticsearch Identica: Scarica ed estrai la stessa versione di Elasticsearch su tutti e tre i nodi.
Passo 1: Configurazione del file elasticsearch.yml di ciascun nodo
Il file di configurazione, elasticsearch.yml, situato nella directory config/ della vostra installazione di Elasticsearch, è fondamentale per definire il comportamento di ciascun nodo all'interno del cluster. È necessario regolare le impostazioni specifiche per ogni nodo.
Definiremo tre ruoli implicitamente: un nodo idoneo a essere master e tre nodi idonei a gestire i dati. Per un cluster a tre nodi, è pratica comune consentire a tutti i nodi di detenere i ruoli di master, dati e ingestione.
Impostazioni Comuni per Tutti i Nodi
Assicurati che queste impostazioni siano identiche in tutti e tre i file di configurazione:
# Nome Cluster: Deve essere lo stesso su tutti i nodi
cluster.name: my-three-node-cluster
# Impostazioni di Scoperta (Cruciali per l'unione iniziale)
# Utilizza un elenco seed di nodi noti per l'avvio della scoperta
discovery.seed_hosts: ["node1_ip:9300", "node2_ip:9300", "node3_ip:9300"]
# Necessario per il quorum (N/2 + 1). Per 3 nodi, sono necessari 2 voti.
cluster.initial_master_nodes: ["node1_name", "node2_name", "node3_name"]
# Impostazioni di Rete (Assicurarsi di eseguire il binding sull'IP corretto)
network.host: 0.0.0.0 # O l'IP privato specifico dell'host
# Porta HTTP (Accesso esterno)
http.port: 9200
# Porta di Trasporto (Comunicazione interna del cluster)
transport.port: 9300
Impostazioni Univoche per Nodo
Ogni nodo richiede un node.name univoco e potenzialmente un path.data univoco se viene eseguito sulla stessa macchina o se condivide lo storage.
Configurazione del Nodo 1 (node1_ip)
# Identificatore univoco per il Nodo 1
node.name: node-1
# Se i percorsi differiscono
# path.data: /var/lib/elasticsearch/data_node1
Configurazione del Nodo 2 (node2_ip)
# Identificatore univoco per il Nodo 2
node.name: node-2
Configurazione del Nodo 3 (node3_ip)
# Identificatore univoco per il Nodo 3
node.name: node-3
Nota Importante su
cluster.initial_master_nodes: Questa impostazione viene utilizzata solo quando il cluster viene avviato per la primissima volta. Una volta che il cluster si forma, Elasticsearch gestisce l'elezione del master internamente. Se si dovesse mai riavviare un cluster completamente inattivo, è necessario assicurarsi che questi nomi corrispondano alla configurazione iniziale.
Passo 2: Impostazione dei Ruoli (Opzionale ma Consigliato)
Sebbene la configurazione predefinita consenta ai nodi di assumere tutti i ruoli (master, data, ingest, coordinating), nelle distribuzioni più grandi i ruoli vengono separati. Per una configurazione robusta a tre nodi, ci assicuriamo che tutti i nodi siano idonei a diventare master.
Aggiungere la seguente configurazione dei ruoli a tutti e tre i file elasticsearch.yml:
# Abilita tutti i ruoli standard su tutti i nodi per questa configurazione iniziale
node.roles: [ master, data, ingest, remote_cluster_client ]
Gestione del Quorum per la Resilienza
Con tre nodi, il cluster può tollerare la perdita di un nodo mantenendo il quorum (rimangono 2 nodi su 3). Questo è gestito dall'elenco cluster.initial_master_nodes fornito nel Passo 1.
Passo 3: Avvio dei Nodi del Cluster
Avviare Elasticsearch in sequenza su ciascun nodo. È generalmente più sicuro avviare prima i nodi elencati per primi in cluster.initial_master_nodes, sebbene le versioni moderne di Elasticsearch gestiscano bene l'avvio non ordinato.
Sul Nodo 1, Nodo 2 e Nodo 3:
Navigare alla directory di installazione di Elasticsearch ed eseguire:
# Per l'esecuzione in primo piano (utile per il debug)
bin/elasticsearch
# Per l'esecuzione in background (consigliato in produzione)
bin/elasticsearch -d
Monitorare i log (logs/elasticsearch.log) su ciascun nodo per i messaggi di avvio riuscito, in particolare quelli che indicano che si sono uniti correttamente al cluster.
Passo 4: Verifica dello Stato del Cluster
Una volta che tutti i nodi sono stati avviati, utilizzare l'API _cat/health, accessibile tramite la porta HTTP di qualsiasi nodo (9200 per impostazione predefinita), per confermare lo stato del cluster.
Accedere ad esso da una macchina in grado di raggiungere i nodi (ad esempio, tramite curl):
Verifica Stato:
curl -X GET "http://node1_ip:9200/_cat/health?v"
Estratto Output Previsto:
| 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 |
Se status è green e node.total è 3, il cluster è attivo e funzionante correttamente.
Verifica dell'Appartenenza dei Nodi
Per confermare che tutti i nodi si vedano, controllare l'elenco dei nodi:
curl -X GET "http://node1_ip:9200/_cat/nodes?v"
Si dovrebbero vedere tre voci distinte corrispondenti a node-1, node-2 e node-3, ognuna delle quali mostra i rispettivi indirizzi IP e ruoli (m per idoneo a master, d per dati).
Passo 5: Creazione di un Indice di Test con Replica
Per verificare la capacità del cluster di distribuire i dati e gestire la replica, dobbiamo creare un indice specificando almeno una replica.
In un cluster a tre nodi, impostare number_of_replicas su 1 assicura che ogni shard primario abbia una copia (replica) distribuita su un nodo diverso, fornendo tolleranza ai guasti immediata.
Comando di Creazione Indice:
```bash
curl -X PUT "http://node1_ip:9200/test_data_index?pretty" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 3