Esperienze con lapidi in Apache Cassandra
Rileva e previeni lapidi
Le lapidi possono essere rilevate nei log e monitorando metriche specifiche. La loro durata è definita dall’impostazione della tabella gc_grace_seconds.
Impostazioni della tabella Tune
- gc_grace_seconds
L’impostazione predefinita per gc_grace_seconds è 864000 (10 giorni). Per noi aveva senso abbassare quel valore a 345600 (4 giorni). Nel caso in cui si decide di modificare il periodo di grazia, assicurarsi di eseguire le riparazioni entro tale intervallo di tempo.
Puoi semplicemente modificare il valore per le tabelle esistenti o creare una nuova tabella come questa:
CREA spazio DELLE chiavi DELLA TABELLA.tablename CON GC_GRACE_SECONDS = 345600;
ALTER TABLE keyspace.tablename CON GC_GRACE_SECONDS = 345600;
- TTL
Dopo che TTL ha superato l’intervallo di tempo definito, le righe vengono eliminate e i valori vengono trasformati in lapidi. Per impostazione predefinita le righe / valori non scadono.
Mentre sperimentavamo i problemi di tombstone abbiamo capito che avevamo bisogno di aumentare il time-to-live dei nostri tavoli. Avendo questo valore impostato su 1 ½ giorni, i lavori di scrittura falliti hanno avuto l’effetto di eliminare tutti i dati da una tabella contemporaneamente. A causa degli aggiornamenti mancanti, ogni riga è stata contrassegnata con una lapide. Impostare il valore più alto ci consente di rieseguire i lavori nel tempo ed evitare la creazione non necessaria di una grande quantità di lapidi.
- tombstone_warn_threshold
L’avviso soglia lapide è impostato su 1.000 per impostazione predefinita e diventerà visibile nei log nel caso in cui più di 1.000 lapidi vengano scansionate da una singola query.
- tombstone_failure_threshold
La soglia di errore della lapide viene raggiunta quando 100.000 lapidi vengono scansionate da una singola query. In questo caso la query verrà interrotta, il che significa che i dati della tabella interessata non possono più essere interrogati.
Queste impostazioni di soglia possono essere modificate, ma tieni presente che se le aumenti può portare a nodi che esauriscono la memoria.
Eseguire riparazioni regolari
Cassandra è dotato di elevata tolleranza ai guasti e funziona bene anche se un nodo è temporaneamente non disponibile. Tuttavia, è consigliabile eseguire la riparazione di nodetool dopo un errore del nodo. Soprattutto se si vuole evitare la perdita di dati a tutti i costi.
Durante il processo di riparazione, il nodo che non era disponibile riceverà le scritture che si sono verificate durante i tempi di inattività.
È un buon approccio per eseguire riparazioni all’interno di gc_grace_seconds e su base regolare, altrimenti si potrebbero verificare casi in cui i dati eliminati vengono resuscitati.
Ci sono un paio di modi per eseguire le riparazioni automaticamente. Uno di loro è Cassandra Reaper. Questo strumento è dotato di una bella interfaccia utente che rende facile pianificare le riparazioni.
Configurare ed eseguire la compattazione
A rimuovere definitivamente lapidi e liberare spazio su disco, la compattazione deve essere attivata. Esistono diversi tipi di compattazioni. La compattazione minore esegue la compattazione su tutti gli sstables e viene eseguita automaticamente in Cassandra. Rimuove tutte le lapidi che sono più vecchie del periodo di grazia. Se si attiva manualmente una compattazione su tutti gli sstables, viene chiamata compattazione maggiore. Tieni presente che la compattazione deve essere attivata individualmente per ciascun nodo. Hai anche la possibilità di eseguire una compattazione definita dall’utente solo su un gruppo di sstables specificati.
Compattare i dati in C* di solito significa unire sstables in un unico nuovo sstable. Quando si eseguono letture su più righe, più sstables devono essere scansionati, più lento diventa il processo. Per evitare che ciò accada, la compattazione deve essere eseguita regolarmente.
Per avviare manualmente le compazioni è possibile utilizzare nodetool compact. Nel caso in cui non si specifichi uno spazio di chiavi o una tabella, la compattazione verrà eseguita su tutti gli spazi di chiavi e le tabelle.
nodetool compact keyspace tablename
Questo comando avvia una compattazione sulla tabella specificata. Dovresti capire quale strategia di compattazione è configurata per le tue tabelle e confrontarla con le strategie alternative. Se vuoi scoprire se un’altra strategia soddisfa meglio le tue esigenze, puoi controllare la documentazione DataStax.
Monitora le metriche della tabella
1. Nodetool
Nodetool è l’interfaccia a riga di comando di Cassandra. È utile se vuoi capire di più sulle prestazioni dei tuoi cluster. È possibile controllare l’intero elenco di possibili comandi forniti da DataStax.
I comandi Nodetool devono essere eseguiti individualmente per ciascun nodo. Eseguiamo C * su Kubernetes in modo da poter aprire una shell per il pod Cassandra in esecuzione come segue:
kubectl exec-it cassandra-0-n recommend bash
Da quel punto possiamo usare nodetool per ottenere varie informazioni sulle nostre tabelle. Il comando nodetool tablestats può essere eseguita per la stampa di statistiche per i singoli keyspaces o tabelle:
I valori Medi di lapidi per fetta’ e ‘Massima lapidi per fetta’ vi dirà quante lapidi sono stati analizzati per query negli ultimi cinque minuti. Se vedi che questo valore è molto alto, potrebbe essere necessario eseguire la compattazione più spesso per quella tabella.
2. SSTable Tools
Prima di eseguire Sstable Tools Cassandra deve essere arrestato. Il comando sstableutil ti fornirà un elenco di file sstable esistenti per una determinata tabella. Esecuzione sstablemetadata su questi file, vi fornirà informazioni utili sulla tabella specificata, come ad esempio il TTL e una stima di lapidi droppable.
3. Prometeo e Grafana
Il nostro monitoraggio per C* è impostato con Prometeo e Grafana. Dopo aver ricevuto gli avvisi soglia lapidi abbiamo deciso di aggiungere un pannello al nostro cruscotto che ci dà un’idea del comportamento lapide per ciascuna delle nostre tabelle.
Cassandra ha una metrica di tabella chiamata ‘TombstoneScannedHistogram’, che presenta l’istogramma delle lapidi che sono state scansionate per query. Mostrando il 99 ° percentile vedremo se qualcosa non va.