Come configurare il tuo primo cluster Elasticsearch per lo sviluppo
Iniziare con Elasticsearch può sembrare scoraggiante a causa della sua natura distribuita, ma configurare un cluster di base per lo sviluppo locale è semplice. Questa guida ti illustrerà i passaggi essenziali necessari per implementare e configurare rapidamente un cluster Elasticsearch funzionante, sia che tu scelga una semplice configurazione a nodo singolo o un ambiente multi-nodo più rappresentativo. Comprendere questa configurazione iniziale è fondamentale per indicizzare, interrogare ed esplorare i tuoi dati senza problemi utilizzando le potenti funzionalità di ricerca e analisi di Elasticsearch.
Ci concentreremo sugli aspetti di configurazione principali necessari per un ambiente di sviluppo, assicurandoti di disporre di una base solida prima di passare alle considerazioni relative alla produzione.
Prerequisiti
Prima di iniziare, assicurati di soddisfare i seguenti prerequisiti:
- Java Development Kit (JDK): Elasticsearch richiede un JDK compatibile installato sul tuo sistema. Le versioni 7.x di Elasticsearch e successive in genere richiedono JDK 11 o versioni successive.
- Scarica Elasticsearch: Ottieni la distribuzione binaria della versione di Elasticsearch desiderata dal sito web ufficiale di Elastic.
- Risorse di sistema: Per i test di sviluppo di base, 2 GB di RAM sono generalmente sufficienti, anche se se ne consigliano di più per i test multi-nodo.
Passaggio 1: Download ed estrazione di Elasticsearch
Una volta scaricato (di solito come file .zip o .tar.gz), estrai l'archivio in una directory in cui desideri ospitare i file del tuo cluster (ad esempio, ~/elasticsearch-8.12.0). Questa directory è denominata Directory Home di Elasticsearch.
Passaggio 2: Configurazione di un cluster a nodo singolo (default di sviluppo)
Per impostazione predefinita, quando esegui Elasticsearch per la prima volta, tenta di avviarsi come cluster a nodo singolo. Tuttavia, le versioni moderne spesso richiedono una configurazione esplicita, soprattutto per quanto riguarda le impostazioni di sicurezza e di memoria, anche per lo sviluppo locale.
I file di configurazione si trovano nella directory config/ all'interno della Home di Elasticsearch.
Configurazione essenziale (config/elasticsearch.yml)
Il file di configurazione principale è elasticsearch.yml. Per una configurazione locale a nodo singolo, devi configurare almeno il nome del cluster e il nome del nodo.
# Configurazione del cluster
cluster.name: dev-cluster
# Configurazione del nodo
node.name: node-1
# Impostazioni di rete (Usa localhost per lo sviluppo)
network.host: 127.0.0.1
# Porta HTTP (Il default è 9200)
http.port: 9200
# Importante per lo sviluppo: Disabilita la sicurezza inizialmente (Usare con cautela in produzione!)
xpack.security.enabled: false
Avviso sulla Sicurezza: Disabilitare
xpack.security.enabledè comune per la configurazione iniziale di sviluppo per semplificare i test. Non eseguire mai questa configurazione in un ambiente accessibile pubblicamente. Per le versioni moderne di Elasticsearch (7.x+), dovrai spesso eseguire prima i comandi di configurazione per generare le password iniziali se la sicurezza rimane abilitata.
Avvio del nodo singolo
Vai alla directory principale (root) della directory estratta ed esegui lo script di avvio appropriato. Su Linux/macOS:
./bin/elasticsearch
Su Windows (usando PowerShell):
.\bin\elasticsearch.bat
Attendi che i log indichino che il nodo è stato avviato correttamente, di solito mostrando un messaggio come started.
Passaggio 3: Verifica dello stato del cluster
Una volta che il processo è in esecuzione, puoi verificare lo stato del cluster utilizzando curl sulla porta HTTP predefinita (9200).
Controllo dello stato di salute del cluster
Questo comando verifica lo stato di salute generale del cluster:
curl -X GET "http://localhost:9200/_cat/health?v"
Estratto dell'Output atteso:
epoch timestamp cluster status node.total node.data shards prio initialized
1678886400 10:00:00 dev-cluster green 1 1 0 0 1
Il campo status dovrebbe essere green (verde), indicando un cluster a nodo singolo sano.
Controllo delle informazioni sul nodo
Puoi anche verificare le informazioni sul nodo:
curl -X GET "http://localhost:9200/_cat/nodes?v"
Passaggio 4: Configurazione di un cluster multi-nodo (per test realistici)
Per uno sviluppo più realistico o per testare l'allocazione degli shard, sono necessari almeno due nodi. Ciò richiede l'esecuzione di più istanze separate di Elasticsearch, ciascuna con configurazioni distinte.
Struttura delle directory
Crea directory separate per ogni nodo all'interno della tua area di lavoro principale (ad esempio, es_data/node1, es_data/node2). Copia la distribuzione base di Elasticsearch in ciascuna di queste directory, oppure collegale all'installazione principale.
Differenze di configurazione dei nodi
Per ogni nodo, crea un file config/elasticsearch.yml univoco:
Configurazione del Nodo 1 (es_data/node1/config/elasticsearch.yml)
cluster.name: dev-cluster
node.name: node-1
network.host: 127.0.0.1
http.port: 9200
path.data: node1_data # Percorso dati univoco
xpack.security.enabled: false
# Questa riga indica al nodo 1 come trovare gli altri membri
cluster.initial_master_nodes: ["node-1", "node-2"]
Configurazione del Nodo 2 (es_data/node2/config/elasticsearch.yml)
cluster.name: dev-cluster
node.name: node-2
network.host: 127.0.0.1
http.port: 9201 # Deve usare una porta HTTP diversa
path.data: node2_data # Percorso dati univoco
xpack.security.enabled: false
# Questa riga indica al nodo 2 come trovare gli altri membri
cluster.initial_master_nodes: ["node-1", "node-2"]
Avvio del cluster multi-nodo
- Avvia il Nodo 1: Vai a
es_data/node1ed esegui./bin/elasticsearch. - Avvia il Nodo 2: Vai a
es_data/node2ed esegui./bin/elasticsearch.
Verifica del cluster multi-nodo
Controlla il conteggio dei nodi utilizzando l'API su qualsiasi porta HTTP in esecuzione (ad esempio, 9200):
curl -X GET "http://localhost:9200/_cat/nodes?v"
Estratto dell'Output atteso:
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 15 50 0 0.01 0.02 0.01 mdi * node-1
127.0.0.1 16 51 0 0.00 0.01 0.01 mdi - node-2
Se vedi due voci sotto name, il tuo cluster multi-nodo è formato correttamente.
Best Practice per gli ambienti di sviluppo
- Utilizza percorsi dati dedicati: Configura sempre
path.datain modo esplicito per ciascun nodo, specialmente nelle configurazioni multi-nodo, per prevenire la contaminazione accidentale dei dati tra le istanze. - Porte Effimere: Utilizza porte HTTP univoche (
http.port) per ciascun nodo in modo che non entrino in conflitto durante l'esecuzione in locale. - Blocco della Memoria (Memory Locking): Per lo sviluppo, assicurati di non riscontrare limitazioni nella dimensione dell'heap. Se riscontri errori di avvio relativi alla memoria, potrebbe essere necessario regolare la dimensione dell'heap JVM nel file
jvm.options(anche se i valori predefiniti sono generalmente adeguati per i test di base).
Passaggi successivi: Indicizzazione dei dati
Con il cluster in esecuzione, il passaggio logico successivo è creare un indice e mappare le impostazioni. Ad esempio, per creare un semplice indice denominato products:
curl -X PUT "http://localhost:9200/products?pretty"
Questa configurazione fondamentale ti consente di iniziare a interagire con Elasticsearch utilizzando librerie client o Kibana.