Risoluzione dello stato del Cluster Rosso: una guida passo passo alla risoluzione dei problemi di Elasticsearch

Risolvi e risolvi i problemi di stato del cluster Elasticsearch 'rosso' o 'giallo'. Questa guida completa fornisce diagnostica passo passo per problemi comuni come shard non assegnati, spazio su disco insufficiente e errori dei nodi. Impara a utilizzare API essenziali come `_cluster/health` e `_cluster/allocation/explain` per identificare le cause principali e implementare soluzioni efficaci, garantendo che il tuo cluster Elasticsearch rimanga sano e disponibile.

34 visualizzazioni

Risoluzione dello Stato Cluster Rosso: Guida Passo Passo alla Risoluzione dei Problemi di Elasticsearch

La salute di un cluster Elasticsearch è fondamentale per la sua efficienza operativa e la disponibilità dei dati. Quando lo stato del cluster diventa rosso o giallo, segnala un problema sottostante che richiede attenzione immediata. Lo stato rosso indica che indici o shard non sono assegnati, il che significa che i dati potrebbero essere inaccessibili o che le operazioni potrebbero fallire. Lo stato giallo significa che gli shard primari sono allocati, ma alcune repliche degli shard non sono assegnate. Sebbene meno critico del rosso, comporta comunque un rischio per la durabilità dei dati. Questa guida fornisce un approccio sistematico per diagnosticare e risolvere questi comuni problemi di salute del cluster Elasticsearch.

Comprendere la causa principale di questi problemi di stato è il primo passo verso la risoluzione. I colpevoli comuni includono spazio su disco insufficiente, nodi sovraccarichi, problemi di rete o configurazioni errate relative all'allocazione degli shard. Seguendo i passaggi diagnostici descritti di seguito, è possibile individuare il problema esatto e implementare soluzioni efficaci, ripristinando il cluster a uno stato verde salutare.

Comprendere lo Stato di Salute del Cluster Elasticsearch

Elasticsearch fornisce una Cluster Health API (API per lo Stato di Salute del Cluster) che offre un'istantanea dello stato del cluster e dell'allocazione degli shard. Questa API è il tuo strumento principale per diagnosticare problemi di salute.

GET _cluster/health

L'output di questo comando includerà un campo status, che può essere green, yellow o red. Fornisce anche informazioni sul numero di shard attivi e non assegnati.

  • Green (Verde): Tutti gli shard primari e di replica sono allocati e funzionano correttamente.
  • Yellow (Giallo): Tutti gli shard primari sono allocati, ma alcune repliche degli shard non sono assegnate.
  • Red (Rosso): Uno o più shard primari non sono assegnati, portando all'indisponibilità dei dati per tali shard.

Cause Comuni e Passaggi per la Risoluzione dei Problemi per lo Stato Rosso/Giallo

Quando il tuo cluster non è green, è il momento di indagare. Ecco i motivi più comuni per gli shard non assegnati e come risolverli:

1. Spazio su Disco Insufficiente

Elasticsearch dispone di misure di sicurezza per prevenire la corruzione dei dati dovuta a dischi pieni. Se un nodo esaurisce lo spazio su disco, impedirà l'allocazione di nuovi shard o il ripristino di quelli esistenti.

Diagnosi:

  • Verificare l'utilizzo del disco su ciascun nodo.
  • Utilizzare la Cluster Allocation Explain API per capire perché gli shard non sono assegnati.
GET _cluster/allocation/explain

Questa API fornirà motivazioni dettagliate, spesso indicando i watermark del disco (soglie di spazio su disco).

Risoluzione:

  • Liberare spazio su disco: Eliminare vecchi indici, eseguire la fusione dei segmenti o rimuovere dati non necessari.
  • Aggiungere più spazio su disco: Aumentare la capacità di archiviazione dei nodi.
  • Configurare i watermark del disco: Regolare le impostazioni cluster.routing.allocation.disk.watermark.low, high e flood_stage per controllare quando Elasticsearch inizia a considerare un disco pieno. Prestare attenzione con queste impostazioni, poiché possono mascherare problemi di capacità sottostanti.

2. Il Nodo Ha Lasciato il Cluster (Espulsione del Nodo)

I nodi possono lasciare un cluster a causa di problemi di rete, crash o rimozione intenzionale. Se un nodo che contiene shard (specialmente shard primari) se ne va, quegli shard diventano non assegnati.

Diagnosi:

  • Controllare i log del cluster per i nodi che hanno lasciato di recente.
  • Monitorare la connettività di rete tra i nodi.
  • Assicurarsi che tutti i nodi siano rilevabili l'uno dall'altro (controllare le impostazioni discovery.seed_hosts e cluster.initial_master_nodes).

Risoluzione:

  • Riavviare il nodo: Se il nodo è crashato o è diventato non responsivo, provare a riavviarlo.
  • Affrontare i problemi di rete: Risolvere eventuali problemi di connettività di rete tra i nodi.
  • Ria-aggiungere il nodo: Se il nodo è stato rimosso intenzionalmente, assicurarsi che sia configurato correttamente prima di ricongiungersi al cluster.

3. Filtri di Allocazione e Consapevolezza degli Shard

Regole di allocazione degli shard configurate in modo errato possono impedire l'assegnazione degli shard ai nodi disponibili.

Diagnosi:

  • Rivedere le impostazioni cluster.routing.allocation.*, in particolare i filtri cluster.routing.allocation.include, exclude e require.
  • Controllare cluster.routing.allocation.awareness.attributes se si sta utilizzando la consapevolezza di zona o rack (zone or rack awareness).

Risoluzione:

  • Regolare i filtri di allocazione: Modificare i filtri per consentire l'allocazione degli shard ai nodi appropriati.
  • Correggere gli attributi di consapevolezza: Assicurarsi che i nodi siano correttamente etichettati con gli attributi di consapevolezza (awareness attributes), se utilizzati, e che le regole di allocazione li rispettino.

4. Spazio su Disco Insufficiente per l'Allocazione (Post-Creazione dell'Indice)

Anche se un disco non è pieno, Elasticsearch potrebbe impedire l'allocazione degli shard se prevede che il disco supererà i watermark alti dopo l'allocazione. Questo è correlato ai watermark del disco ma ha un impatto specifico sulle nuove allocazioni.

Diagnosi:

  • L'API _cluster/allocation/explain è inestimabile in questo caso.
  • Controllare lo spazio libero disponibile rispetto alla dimensione prevista degli shard.

Risoluzione:

  • Simile al problema generale dello spazio su disco: liberare spazio, aggiungere più spazio di archiviazione o regolare i watermark con cautela.

5. Dimensione degli Shard e Capacità dei Nodi

Shard molto grandi o un gran numero di shard possono mettere a dura prova le risorse dei nodi (CPU, memoria) e influire sull'allocazione. Inoltre, se un nodo ha raggiunto il limite di shard (cluster.routing.allocation.total_shards_per_node), i nuovi shard non verranno allocati su di esso.

Diagnosi:

  • Controllare le dimensioni degli shard (GET _cat/shards?v).
  • Monitorare l'utilizzo delle risorse del nodo (CPU, memoria).
  • Rivedere l'impostazione cluster.routing.allocation.total_shards_per_node.

Risoluzione:

  • Ridurre la dimensione degli shard: Considerare la reindicizzazione dei dati in indici con meno shard o shard di dimensioni inferiori. Puntare a dimensioni degli shard comprese tra 10 GB e 50 GB come linea guida generale.
  • Aumentare la capacità del nodo: Aggiungere nodi più potenti o nodi con più memoria/CPU.
  • Regolare il limite degli shard: Se necessario e si dispone di risorse sufficienti, aumentare cluster.routing.allocation.total_shards_per_node.

6. Problemi del Nodo Master

Un nodo master instabile può portare a problemi di allocazione degli shard. Se il master non è disponibile o non è in grado di svolgere i suoi compiti, gli shard potrebbero diventare non assegnati.

Diagnosi:

  • Controllare i log del cluster per errori o avvisi relativi al master.
  • Assicurarsi di avere un numero dispari di nodi idonei al ruolo di master (in genere 3 o 5) per evitare scenari di split-brain.
  • Verificare che i nodi idonei al ruolo di master possano eleggere un master.

Risoluzione:

  • Stabilizzare il master: Assicurarsi che i nodi idonei al ruolo di master siano in salute, abbiano risorse sufficienti e siano ben collegati.
  • Correggere initial_master_nodes: Assicurarsi che questa impostazione sia configurata correttamente al primo avvio del cluster e rimanga stabile.

Risoluzione dei Problemi Avanzata con _cluster/allocation/explain

L'API _cluster/allocation/explain è lo strumento più potente per capire perché uno shard specifico non è assegnato.

Esempio:

GET _cluster/allocation/explain
{
  "index": "my-index",
  "shard": 0,
  "primary": true
}

Questo restituirà un output JSON dettagliato che spiega perché lo shard primario 0 di my-index non può essere allocato. Cercare campi come deciders che elencano i motivi della mancata assegnazione (ad esempio, DISK_THRESHOLD, NODE_LEFT, NO_VALID_SHARD_COPY).

Risoluzione dello Stato Cluster Giallo

Uno stato giallo significa che gli shard primari sono allocati, ma le repliche no. Ciò influisce principalmente sulla ridondanza dei dati e sulla tolleranza agli errori.

Cause Comuni:

  • Nodi insufficienti: Non si dispone di nodi sufficienti per ospitare il numero richiesto di repliche per gli indici.
  • Filtri di allocazione degli shard: Simile allo stato rosso, i filtri potrebbero impedire l'allocazione delle repliche.
  • Vincoli di spazio su disco: I nodi potrebbero avere spazio sufficiente per gli shard primari ma non abbastanza per le repliche, specialmente se i watermark del disco sono attivi.

Risoluzione:

  • Aggiungere più nodi: Aumentare il numero di nodi nel cluster.
  • Regolare il conteggio delle repliche: Ridurre il numero di repliche per indice (index.number_of_replicas) se la tolleranza agli errori non è critica per tutti gli indici.
  • Controllare le impostazioni di allocazione: Assicurarsi che le repliche degli shard possano essere allocate ai nodi disponibili.

Migliori Pratiche per Mantenere la Salute del Cluster

  • Monitorare l'Utilizzo del Disco: Monitorare proattivamente lo spazio su disco su tutti i nodi e impostare avvisi.
  • Dimensionare Correttamente il Cluster (Right-size): Assicurarsi di disporre di nodi e risorse sufficienti per il volume di dati e il carico di query.
  • Gestione degli Shard: Mantenere le dimensioni degli shard entro gli intervalli consigliati ed evitare l'eccessiva frammentazione (over-sharding).
  • Revisionare Regolarmente la Salute del Cluster: Utilizzare GET _cluster/health e GET _cluster/allocation/explain come parte del monitoraggio di routine.
  • Testare le Modifiche: Prima di apportare modifiche significative alle impostazioni di allocazione o ai watermark del disco, testarle in un ambiente di staging.

Conclusione

Risolvere uno stato di cluster Elasticsearch rosso o giallo richiede un approccio metodico alla diagnosi. Sfruttando la Cluster Health API, la Cluster Allocation Explain API e comprendendo i punti di guasto comuni come lo spazio su disco, i problemi di rete e le configurazioni di allocazione, è possibile risolvere efficacemente i problemi e ripristinare il cluster a uno stato di salute ottimale. Il monitoraggio costante e l'adesione alle migliori pratiche sono fondamentali per prevenire che questi problemi si presentino in primo luogo.