Come Configurare il Tuo Primo Cluster Elasticsearch per lo Sviluppo

Configura un cluster Elasticsearch locale per lo sviluppo, verifica lo stato di salute ed evita i comuni errori di configurazione sia a nodo singolo che multi-nodo.

Come Configurare il Tuo Primo Cluster Elasticsearch per lo Sviluppo

Configurare il tuo primo cluster Elasticsearch riguarda principalmente la scelta di una configurazione di sviluppo sicura e la verifica che il nodo si sia effettivamente unito al cluster previsto. Una configurazione a nodo singolo è sufficiente per test di base di indicizzazione e ricerca; una configurazione locale multi-nodo ti aiuta a imparare la scoperta e l'allocazione degli shard.

L'attenzione qui è sullo sviluppo locale. Non riutilizzare queste impostazioni rilassate per un cluster pubblico o di produzione.

Prerequisiti

Prima di iniziare, assicurati di avere i seguenti prerequisiti:

  1. Runtime Java: Le distribuzioni recenti di Elasticsearch includono un JDK integrato. Se usi un pacchetto o una distribuzione che non lo include, installa la versione Java richiesta da quella versione di Elasticsearch.
  2. Scarica Elasticsearch: Ottieni la distribuzione binaria della versione di Elasticsearch desiderata dal sito ufficiale di Elastic.
  3. Risorse di Sistema: Per test di sviluppo di base, 2GB di RAM sono generalmente sufficienti, anche se è consigliata più RAM per test multi-nodo.

Passo 1: Scaricare ed Estrarre Elasticsearch

Una volta scaricato (di solito come file .zip o .tar.gz), estrai l'archivio in una directory dove vuoi ospitare i file del tuo cluster (es., ~/elasticsearch-8.12.0). Questa directory è chiamata Directory Home di Elasticsearch.

Passo 2: Configurare 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, specialmente per quanto riguarda le impostazioni di sicurezza e 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

Avvertenza sulla Sicurezza: Disabilitare xpack.security.enabled è comune per la configurazione di sviluppo iniziale per semplificare i test. Non eseguire mai questa configurazione in un ambiente accessibile pubblicamente. Per le versioni moderne di Elasticsearch (7.x+), spesso dovrai eseguire comandi di configurazione prima per generare le password iniziali se la sicurezza rimane abilitata.

Avviare il Nodo Singolo

Naviga nella directory principale della tua cartella 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 con successo, di solito mostrando un messaggio come started.

Passo 3: Verificare lo Stato del Cluster

Una volta che il processo è in esecuzione, puoi verificare lo stato del cluster usando curl sulla porta HTTP predefinita (9200).

Controllare la Salute del Cluster

Questo comando controlla la salute generale del cluster:

curl -X GET "http://localhost:9200/_cat/health?v"

Esempio di 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, indicando un cluster a nodo singolo sano.

Controllare le Informazioni del Nodo

Puoi anche verificare le informazioni del nodo:

curl -X GET "http://localhost:9200/_cat/nodes?v"

Passo 4: Configurare un Cluster Multi-Nodo (Per Test Realistici)

Per uno sviluppo o test più realistico dell'allocazione degli shard, hai bisogno di almeno due nodi. Questo 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 (es., es_data/node1, es_data/node2). Copia la distribuzione base di Elasticsearch in ciascuna di queste directory, o collegale all'installazione principale.

Differenze di Configurazione del Nodo

Per ogni nodo, crea un file config/elasticsearch.yml unico:

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
transport.port: 9300
path.data: node1_data  # Percorso dati unico
xpack.security.enabled: false
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
# Questa riga dice 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
transport.port: 9301  # Deve usare una porta di trasporto diversa
path.data: node2_data  # Percorso dati unico
xpack.security.enabled: false
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
# Questa riga dice al nodo 2 come trovare gli altri membri
cluster.initial_master_nodes: ["node-1", "node-2"]

Avviare il Cluster Multi-Nodo

  1. Avvia il Nodo 1: Naviga in es_data/node1 ed esegui ./bin/elasticsearch.
  2. Avvia il Nodo 2: Naviga in es_data/node2 ed esegui ./bin/elasticsearch.

Verificare il Cluster Multi-Nodo

Controlla il numero di nodi usando l'API su qualsiasi porta HTTP in esecuzione (es., 9200):

curl -X GET "http://localhost:9200/_cat/nodes?v"

Esempio di 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 Ambienti di Sviluppo

  • Usa Percorsi Dati Dedicati: Configura sempre path.data esplicitamente per ogni nodo, specialmente in configurazioni multi-nodo, per prevenire la contaminazione accidentale dei dati tra le istanze.
  • Porte Uniche: Usa porte HTTP uniche (http.port) e porte di trasporto uniche (transport.port) per ogni nodo locale in modo che non entrino in conflitto.
  • Blocco della Memoria: Per lo sviluppo, assicurati di non incorrere in limitazioni della dimensione dell'heap. Se incontri errori di avvio relativi alla memoria, potresti dover regolare la dimensione dell'heap JVM nel file jvm.options (anche se i valori predefiniti sono generalmente sufficienti per test di base).

Passi Successivi: Indicizzare Dati

Con il tuo cluster in esecuzione, il passo logico successivo è creare un indice e mappare le impostazioni. Ad esempio, per creare un indice semplice chiamato products:

curl -X PUT "http://localhost:9200/products?pretty"

Questa configurazione di base ti permette di iniziare a interagire con Elasticsearch usando librerie client o Kibana.