Cassandra: manutenzione


9

Ho poca esperienza con Cassandra, ma ho una certa esperienza con i database relazionali basati su SQL.

Non sono stato in grado di trovare informazioni sulle migliori pratiche su come mantenere Cassandra una volta distribuito. È necessario VACUUM il database? Dovrei pensare che i carichi di lettura / scrittura causino la frammentazione nella memoria.

O più in generale: quali sono le migliori pratiche per mantenere una distribuzione della produzione Cassandra? Cosa si deve fare a intervalli regolari per mantenere la salute del sistema? Il manuale delle operazioni non tratta davvero questo aspetto.

Grazie.


Bene, ora capisco che la compattazione è un grosso problema e funziona automagicamente; tuttavia, ci sono altre cose di cui preoccuparsi quando si esegue un cluster su Linux per lunghi periodi di tempo?
Mayur Patel,

Risposte:


14

In generale, un cluster ben progettato può vivere per ANNI senza essere toccato. Ho avuto cluster che hanno funzionato per anni senza mani. Tuttavia, ecco alcune linee guida:

Il monitoraggio è estremamente importante:

1) Monitorare le latenze. Usa opscenter o i tuoi strumenti di misurazione preferiti per tenere traccia delle latenze. Le latenze in aumento possono essere segni di problemi in arrivo, tra cui pause GC (più comuni nei carichi di lavoro in lettura rispetto ai carichi di lavoro in scrittura), problemi instabili e simili.

2) Monitorare i conteggi impostabili. I conteggi SSTable aumenteranno se si supera la compattazione (ogni sstable viene scritta esattamente una volta - le eliminazioni vengono gestite combinando i vecchi sstable in nuovi sstable attraverso la compattazione).

3) Monitorare i cambiamenti di stato del nodo (su / giù, ecc.). Se vedi che i nodi si agitano, investiga, poiché non è normale.

4) Tieni traccia del tuo utilizzo del disco - tradizionalmente, devi rimanere sotto il 50% (specialmente se usi la compattazione STCS).

Ci sono alcune cose di base che dovresti e non dovresti fare regolarmente:

1) Non eseguire esplicitamente nodetool compact. Dici che l'hai fatto, non è fatale, ma crea scale molto grandi, che quindi hanno meno probabilità di partecipare alla compattazione andando avanti. Non è necessario continuare a eseguirlo, ma a volte può essere utile eliminare i dati cancellati / sovrascritti.

2) nodetool repairè in genere raccomandato ogni gc_grace_seconds(10 giorni per impostazione predefinita). Esistono carichi di lavoro in cui questo è meno importante: il motivo principale per cui è NECESSARIO riparare è assicurarsi che i marker di eliminazione ( tombstones) vengano trasmessi prima della scadenza (vivono per gc_grace_seconds, se un nodo è inattivo quando si verifica l'eliminazione, i dati potrebbero tornare alla vita senza la riparazione!). Se non si eseguono cancellazioni e si esegue una query con un livello di coerenza sufficiente (ad esempio, legge e scrive su QUORUM), puoi effettivamente vivere una vita senza riparazioni.

3) Se hai intenzione di riparare, prendi in considerazione l'uso della riparazione incrementale e ripara piccoli intervalli alla volta.

4) Le strategie di compattazione contano molto. STCS è ottimo per le scritture, LCS è ottimo per le letture. DTCS ha alcune stranezze.

5) I modelli di dati contano - proprio come gli ambienti RDBMS / SQL si mettono nei guai quando le query non indicizzate colpiscono tabelle di grandi dimensioni, Cassandra può essere problematico con file / partizioni molto grandi.

6) Le istantanee sono economiche. Molto a buon mercato. Quasi istantanei, solo collegamenti reali, non costano quasi immediatamente spazio su disco. Utilizzare lo snapshot prima di aggiornare le versioni, in particolare le versioni principali.

7) Prestare attenzione con le eliminazioni. Come suggerito in # 2, delete crea più dati sul disco e non li libera per ALMENO gc_grace_seconds.

Quando tutto il resto fallisce:

Ho visto articoli che suggeriscono che Cassandra in prod richiede un responsabile dedicato per gestire qualsiasi cluster di dimensioni: non so che sia necessariamente vero, ma se sei preoccupato, potresti voler assumere un consulente di terze parti (TheLastPickle, Pythian ) o avere un contratto di supporto (Datastax) per darti un po 'di tranquillità.


1
Jeff è tardi, dormi un po '!
Aaron,

1
Amico, non ho notato la data su questo. Era davvero in ritardo, no?
Jeff Jirsa,

2

Secondo la documentazione di riparazione Cassandra , nodetool repairdovrebbe essere eseguito nelle seguenti situazioni:

  • Come best practice, è necessario pianificare le riparazioni settimanalmente. Nota: se non si verificano mai eliminazioni, è comunque necessario pianificare riparazioni regolari. Tenere presente che l'impostazione di una colonna su null è un'eliminazione.
  • Durante il ripristino del nodo. Ad esempio, quando si riporta un nodo nel cluster dopo un errore.
  • Sui nodi contenenti dati che non vengono letti frequentemente.
  • Per aggiornare i dati su un nodo inattivo.

Dovrei pensare che i carichi di lettura / scrittura causino la frammentazione nella memoria.

I dati in Cassandra non "frammentano" nel modo in cui stai pensando. Tuttavia, le eliminazioni attivano il posizionamento delle pietre tombali e il normale processo compatto elimina le pietre tombali.

Capisco ora che la compattazione è un grosso problema e funziona automaticamente

Corretta. Un rappresentante DataStax mi ha detto che una volta eseguito compactmanualmente, dovrai sempre eseguirlo manualmente. Il motivo è che la compattazione funziona "compattando" tutti gli SSTABLES esistenti in uno spazio chiavi in ​​un singolo file SSTABLE. Potresti avere alcune famiglie di colonne in quel file SSTABLE che sono piccole e impiegheranno così tanto tempo ad aumentare oltre la soglia di compattazione, che la probabilità che la compattazione automatica venga mai eseguita di nuovo è molto bassa.

In sostanza, assicurati di pianificare una regolare nodetool repair, mai eseguita nodetool compacte di implementare una strategia di backup (istantanee, backup incrementali o entrambi).


Quindi, se ho corso nodetool compact, sono condannato per sempre a meno che non screditi il ​​mio cluster? O c'è un modo per ottenere la compattazione automatica per ricominciare a lavorare?
ore 2

1
@ 2rs2ts Beh, non per "per sempre". Dopo aver eseguito una compattazione manuale ... "sì", dovrai continuare a eseguirla periodicamente (lo faremmo sempre subito dopo la nostra riparazione settimanale). Chiariscilo con un rappresentante DataStax, ma penso che se hai un evento che riscrive i file SSTABLE (come l'aggiornamento quando esegui upgradesstables) che potrebbe resettare le cose abbastanza da salvarti da "inferno di compattazione manuale".
Aaron,

Grazie, ha senso suppongo. Sfortunato però.
ore 2

1
La compattazione automatica alla fine creerà sstable che sono abbastanza grandi da compattare naturalmente con l'output di nodetool compact. Inoltre, ora puoi usare sstablesplit per sbarazzarti di quel sstable innaturalmente grande, in modo da poter "annullare" il file nodetool compact.
Jeff Jirsa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.