ervaringen met grafstenen in Apache Cassandra

grafstenen detecteren en voorkomen

grafstenen kunnen worden gedetecteerd in Logboeken en door specifieke statistieken te monitoren. Hun levensduur wordt bepaald door de tabel instelling gc_grace_seconden.

Tune table settings

  • gc_grace_seconden

de standaardinstelling voor de gc_grace_seconden is 864000 (10 dagen). Voor ons was het zinvol om die waarde te verlagen naar 345600 (4 dagen). In het geval dat u besluit om de respijtperiode te wijzigen, zorg ervoor dat reparaties binnen die tijd range.

u kunt eenvoudig de waarde voor bestaande tabellen wijzigen of een nieuwe tabel maken zoals deze:

TABELSLEUTELRUIMTE aanmaken.tablename WITH GC_GRACE_SECONDS = 345600;

ALTER TABLE keyspace.tabelnaam met GC_GRACE_SECONDEN = 345600;

  • TTL

nadat TTL het gedefinieerde tijdbereik passeert, worden de rijen verwijderd en worden de waarden omgezet in grafstenen. Standaard verlopen de rijen/waarden niet.

tijdens het ervaren van de tombstone problemen kwamen we erachter dat we nodig hadden om de time-to-live van onze tabellen te verhogen. Door het hebben van deze waarde ingesteld op 1 ½ dagen, falende schrijfopdrachten had het effect van het verwijderen van alle gegevens uit een tabel in een keer. Door de ontbrekende updates werd elke rij gemarkeerd met een grafsteen. Door de waarde hoger in te stellen kunnen we op tijd opnieuw banen uitvoeren en onnodige creatie van een grote hoeveelheid grafstenen vermijden.

  • tombstone_warn_threshold

de tombstone threshold warning is standaard ingesteld op 1.000 en zal zichtbaar worden in uw logs in het geval meer dan 1.000 grafstenen worden gescand door een enkele query.

  • tombstone_failure_threshold

de drempel voor het falen van de grafsteen wordt bereikt wanneer 100.000 grafstenen worden gescand door een enkele query. In dit geval wordt de query afgebroken, wat betekent dat gegevens uit de betreffende tabel niet meer kunnen worden opgevraagd.

deze drempelinstellingen kunnen worden gewijzigd, maar als u ze verhoogt, kan dit leiden tot knooppunten die geen geheugen meer hebben.

regelmatige reparaties uitvoeren

Cassandra heeft een hoge fouttolerantie en werkt goed, zelfs als een knooppunt tijdelijk niet beschikbaar is. Toch is het de beste praktijk om nodetool repair uit te voeren na een knooppuntfout. Vooral als u het verlies van gegevens ten koste van alles wilt voorkomen.

tijdens het reparatieproces zal het knooppunt dat niet beschikbaar was de schrijfwijze ontvangen die gebeurde tijdens de downtime.

het is een goede aanpak om reparaties uit te voeren binnen de gc_grace_seconden en op regelmatige basis, anders kunt u gevallen ervaren waarin verwijderde gegevens opnieuw worden opgewekt.

er zijn een aantal manieren om reparaties automatisch uit te voeren. Een van hen is Cassandra Reaper. Deze tool wordt geleverd met een mooie gebruikersinterface die het gemakkelijk maakt om reparaties te plannen.

door Cassandra Reaper

configureer en voer verdichting

om grafstenen te verwijderen en schijfruimte vrij te maken, moet verdichting worden geactiveerd. Er zijn verschillende soorten verdikkingen. De kleine verdichting voert verdichting over alle sstables uit en draait automatisch in Cassandra. Het verwijdert alle grafstenen die ouder zijn dan de grace periode. Als u handmatig een verdichting over alle sstables triggert, wordt dit major verdichting genoemd. Houd in gedachten dat verdichting moet worden geactiveerd voor elk knooppunt afzonderlijk. Je hebt ook de optie om een door de gebruiker gedefinieerde compactie uit te voeren op een groep van gespecificeerde sstables.

het comprimeren van gegevens in C * betekent meestal het samenvoegen van sstables in een enkele nieuwe sstable. Bij het uitvoeren van reads op meerdere rijen, hoe meer sstables moeten worden gescand, hoe langzamer het proces wordt. Om dit te voorkomen moet de verdichting regelmatig worden uitgevoerd.

om compacties handmatig te starten kunt u nodetool compact gebruiken. In het geval dat u geen keyspace of tabel opgeeft, zal de verdichting op alle keyspaces en tabellen draaien.

nodetool compact keyspace tablename

dit commando start een verdichting in de opgegeven tabel. U moet uitzoeken welke verdichtingsstrategie is geconfigureerd voor uw tabellen en vergelijken met de alternatieve strategieën. Als u wilt weten of een andere strategie beter aan uw behoeften voldoet, kunt u de DataStax documentatie bekijken.

Monitor table metrics

1. Nodetool

Nodetool is Cassandra ‘ s opdrachtregelinterface. Het is handig als u meer wilt weten over uw clusters prestaties. U kunt de hele lijst van mogelijke commando ‘ s die door DataStax.

Nodetool commando ‘ s moeten voor elk knooppunt afzonderlijk worden uitgevoerd. We draaien C * op Kubernetes zodat we een shell kunnen openen voor de draaiende Cassandra pod als volgt:

kubectl exec-it cassandra-0-n recommend bash

vanaf dat punt kunnen we nodetool gebruiken om verschillende informatie over onze tabellen te krijgen. De opdracht nodetool tablestats kan worden uitgevoerd om statistieken af te drukken voor afzonderlijke sleutelruimten of tabellen:

de waarden voor ‘Average tombstones per slice’ en ‘Maximum tombstones per slice’ vertellen je hoeveel grafstenen per query in de afgelopen vijf minuten zijn gescand. Als u ziet dat deze waarde zeer hoog is, moet u wellicht vaker verdichting uitvoeren voor die tabel.

2. SSTable Tools

voor het uitvoeren van Sstable Tools moet Cassandra gestopt worden. Het sstableutil commando geeft je een lijst van sstable bestanden die bestaan voor een bepaalde tabel. Het uitvoeren van sstablemetadata op deze bestanden, zal u nuttige informatie geven over de opgegeven tabel, zoals bijvoorbeeld de TTL en een schatting van droppable tombstones.

3. Prometheus en Grafana

onze monitoring voor C * is opgezet met Prometheus en Grafana. Na ontvangst van de grafstenen drempelwaarschuwingen besloten we om een paneel toe te voegen aan ons dashboard dat ons een idee geeft van het grafstenen gedrag voor elk van onze tafels.

Cassandra heeft een tabelmetriek genaamd ‘TombstoneScannedHistogram’, dat het histogram van grafstenen weergeeft dat per zoekopdracht werd gescand. Door het 99e percentiel te tonen zullen we zien of er iets niet klopt.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.