Zkušenosti s Náhrobky v Apache Cassandra
Detekovat a zabránit náhrobky
Náhrobky mohou být detekovány v protokolech a sledováním konkrétních metrik. Jejich životnost je definována nastavením tabulky gc_grace_seconds.
Ladit nastavení tabulky
- gc_grace_seconds
výchozí nastavení pro gc_grace_seconds je 864000 (10 dní). Pro nás to dávalo smysl snížit tuto hodnotu na 345600 (4 dny). V případě, že se rozhodnete změnit dobu odkladu, nezapomeňte provést opravy v tomto časovém rozmezí.
můžete jednoduše změnit hodnotu existujících tabulek nebo vytvořit novou tabulku, jako je tato:
vytvořit tabulku keyspace.tablename s GC_GRACE_SECONDS = 345600;
ALTER TABLE keyspace.tablename S GC_GRACE_SECONDS = 345600;
- TTL
Po TTL předává definované časové rozmezí, řádky jsou odstraněny a hodnoty jsou obrátil do náhrobky. Ve výchozím nastavení řádky / hodnoty nevyprší.
když jsme se setkali s problémy s náhrobkem, zjistili jsme, že musíme zvýšit čas na život našich stolů. Tím, že tato hodnota nastavena na 1 ½ dny, selhání zápisu úlohy mělo za následek odstranění všech dat z tabulky najednou. Kvůli chybějícím aktualizacím byl každý řádek označen náhrobkem. Nastavení vyšší hodnoty nám umožňuje opakovat úlohy včas a vyhnout se zbytečnému vytváření velkého množství náhrobků.
- tombstone_warn_threshold
náhrobku práh varování je nastavena na 1.000 ve výchozím nastavení, a to bude viditelné na vaše záznamy v případě více než 1.000 náhrobky jsou snímány jeden dotaz.
- tombstone_failure_threshold
náhrobku selhání je dosaženo prahové hodnoty až 100.000 náhrobky jsou snímány jeden dotaz. V tomto případě bude dotaz přerušen, což znamená, že data z postižené tabulky již nelze dotazovat.
tato nastavení prahu lze změnit, ale uvědomte si, že pokud je zvýšíte, může to vést k vyčerpání paměti uzlů.
Spustit pravidelné opravy
Cassandra je dodáván s vysokou odolnost a funguje dobře, i když uzel je dočasně nedostupné. Přesto je nejlepším postupem spustit opravu nodetool po selhání uzlu. Zvláště pokud se chcete za každou cenu vyhnout ztrátě dat.
během procesu opravy uzel, který nebyl k dispozici, obdrží zápisy, ke kterým došlo během jeho prostoje.
To je dobrý přístup, spustit opravy v rámci gc_grace_seconds a pravidelně, jinak může dojít případech, kdy smazaných dat je vzkříšen.
existuje několik způsobů, jak spustit opravy automaticky. Jednou z nich je Cassandra Reaper. Tento nástroj je dodáván s pěkným uživatelským rozhraním, které usnadňuje plánování oprav.
Konfigurovat a spustit zhutnění
konečně odstranit náhrobky a uvolnit místo na disku, zhutnění musí být spuštěna. Existují různé druhy kompresí. Menší zhutnění provádí zhutnění přes všechny sstables a běží automaticky v Cassandře. Odstraní všechny náhrobky, které jsou starší než doba odkladu. Pokud spustíte zhutnění ručně přes všechny sstables se nazývá hlavní zhutnění. Mějte na paměti, že zhutnění musí být spuštěno pro každý uzel jednotlivě. Máte také možnost Spustit uživatelem definované zhutnění jen na skupině zadaných sstables.
zhutnění dat v C* obvykle znamená sloučení sstables do jednoho nového sstablu. Při provádění čtení na více řádcích, čím více sstables je třeba skenovat, tím pomalejší proces dostane. Aby se tomu zabránilo, musí zhutnění běžet pravidelně.
Chcete-li spustit komprese ručně, můžete použít nodetool compact. V případě, že nezadáte klíčový prostor nebo tabulku, zhutnění poběží na všech klíčových prostorech a tabulkách.
nodetool compact keyspace tablename
tento příkaz spustí zhutnění na zadané tabulce. Měli byste zjistit, která strategie zhutnění je nakonfigurována pro vaše tabulky, a porovnat ji s alternativními strategiemi. Pokud chcete zjistit, zda jiná strategie lépe vyhovuje vašim potřebám, můžete se podívat na dokumentaci DataStax.
metriky tabulky monitoru
1. Nodetool
Nodetool je rozhraní příkazového řádku Cassandry. Hodí se, pokud chcete zjistit více o výkonu klastrů. Můžete se podívat na celý seznam možných příkazů poskytovaných Datastaxem.
příkazy Nodetool musí být provedeny pro každý uzel jednotlivě. Provozujeme C* na Kubernetes, takže můžeme otevřít shell pro běh Cassandra pod takto:
kubectl exec -cassandra-0 -n doporučujeme bash
Z tohoto bodu můžeme použít nodetool získat různé informace o naší tabulky. Příkaz nodetool tablestats může být provedena k tisku statistiky pro jednotlivé keyspaces nebo tabulky:
hodnoty pro Průměrné náhrobky na plátek ” a “Maximální náhrobky na plátek’ vám řekne, kolik náhrobky byly naskenovány na dotaz v posledních pěti minutách. Pokud vidíte, že tato hodnota je velmi vysoká, možná budete muset pro tuto tabulku spustit zhutnění častěji.
2. Sstable Tools
před provedením Sstable Tools musí být Cassandra zastavena. Příkaz sstableutil vám poskytne seznam souborů sstable existujících pro určitou tabulku. Spuštění sstablemetadata na těchto souborech, vám poskytne užitečné informace o zadané tabulce, jako například TTL a odhad droppable náhrobky.
3. Prometheus a Grafana
naše monitorování C* je nastaveno pomocí Prometheus a Grafana. Po obdržení varování o prahu náhrobků jsme se rozhodli přidat do našeho řídicího panelu panel, který nám dává představu o chování náhrobku pro každou z našich tabulek.
Cassandra má metriku tabulky nazvanou “TombstoneScannedHistogram”, která představuje histogram náhrobků, které jsou skenovány na dotaz. Zobrazením 99. percentilu uvidíme, jestli něco není v pořádku.