badanie cyklu życia nagrobków w Apache Cassandra

ten post jest pierwszą częścią serii postów na blogu dotyczących cyklu życia i zarządzania nagrobkami.

usuwanie i wygasanie danych w Cassandrze jest czymś, co powinieneś dokładnie zaplanować. Zwłaszcza jeśli masz zamiar usunąć ogromną ilość danych na raz. Bez odpowiedniego planowania może to spowodować problemy w klastrze, takie jak wzrost opóźnienia odczytu i zużycie dysku. W całym tym poście opiszę sposób radzenia sobie z tym i jego zastrzeżeniami.

najpierw omówmy podstawy. W Cassandrze pliki danych (SSTables) istniejące na dysku są plikami niezmiennymi. Kiedy usuwamy coś w Cassandrze, tworzony jest nowy SSTable, który zawiera znacznik. Znacznik ten wskazuje, która partycja, wiersz lub komórka została usunięta wraz ze znacznikiem czasu dla tego usunięcia. Ten znacznik delecji nazywa się nagrobkiem.

usunięte DANE i nagrobek mogą współistnieć na dysku w okresie zwanym gc_grace_seconds, czyli domyślnie 10 dni. W tym czasie, chociaż dane mogą nadal istnieć na dysku, nie są zwracane do Klienta w przypadku zapytania. Oznacza to, że z punktu widzenia Klienta dane są usuwane natychmiast po wykonaniu instrukcji delete. Jednak z operacyjnego punktu widzenia zarówno dane, jak i nagrobek mogą nadal istnieć i zajmować miejsce na dysku. Te usunięte dane, które nadal istnieją na dysku, nazywane są ” shadowed data.”

: W poprzednim akapicie mówię, że dane i nagrobki ” mogą nadal współistnieć na płycie „(nacisk na” can”), ponieważ jeśli wystąpi zagęszczenie, które obejmuje Dane i nagrobki, dane są eksmitowane. Ale nagrobek pozostanie, jeśli gc_grace_seconds nie przejdzie.

gc_grace_seconds jest mechanizmem bezpieczeństwa, który zapewnia, że tombstone ma wystarczająco dużo czasu na replikację wszystkich węzłów, które mają replikę zacienionych danych. Aby ten mechanizm bezpieczeństwa powiódł się, musisz być w stanie naprawić klaster co gc_grace_seconds. Oznacza to, że jeśli używasz domyślnego 10 dni dla gc_grace_seconds, naprawa musi być rozpoczęta i zakończona w ciągu co 10 dni. Naprawa ma na celu zapobieganie danych zombie w klastrze. Nie będę zagłębiał się w szczegóły, jak to się może stać, ale zasadniczo dane zombie pojawiają się po usunięciu danych, ale wracają kiedyś później.

po upływie gc_grace_seconds Dane i nagrobek mogą zostać ostatecznie usunięte z dysku, odzyskując miejsce na dysku wcześniej przez nie używane (Rysunek 1). ETA do uwolnienia miejsca na dysku jest jednym z pierwszych punktów, które chcę wyjaśnić w tym poście. Podczas korzystania z Cassandry Wiele osób uważa ten mechanizm za zaskakujący, tzn. że po usunięciu danych Dane nadal istnieją na dysku. To zamieszanie jest zwykle szybko wyjaśnione, gdy tylko ludzie dowiedzą się o nagrobkach i gc_grace_seconds. Wydaje się jednak, że operatorzy mają tendencję do myślenia, że dane i nagrobki są eksmitowane zaraz po zakończeniu gc_grace_seconds. W rzeczywistości ważne jest, aby mieć świadomość, że może to nie być (i zwykle nie jest) prawdą. Zwykle trwa to dłużej niż gc_grace_seconds, aby doszło do eksmisji i odzyskano miejsce na dysku.

Rysunek 1-zagęszczanie zacienionych danych z wygasłymi i nie wygasłymi nagrobkami

eksmisja wspomniana powyżej ma miejsce, gdy dochodzi do zagęszczenia, które obejmuje SSTables, które mają zacienione Dane i nagrobek. Dopiero wtedy dane są skutecznie usuwane, a miejsce na dysku odzyskiwane. Ważne jest, aby pamiętać, że nawet jeśli gc_grace_seconds minęło i SSTable z danymi cieniowanymi jest skompaktowane z innym SSTable, który nie ma tombstone, to dane cieniowane nie są czyszczone. To samo dzieje się w przypadku znaczników nagrobnych, tj. jeśli SSTable z nagrobkiem nie jest zagęszczony ze wszystkimi SSTables, które nadal mają dane, które zostały usunięte, wtedy nagrobek nie jest eksmitowany z dysku. Dzieje się tak dlatego, że podczas zagęszczania Cassandra nie wie, co znajduje się w SSTables, które nie są zaangażowane w zagęszczanie. Więc nie ma sposobu, aby wiedzieć, że może odrzucić dane, ponieważ nie widzi nagrobka. Można to zobaczyć na rysunku 2, gdzie chociaż gc_grace_seconds minęło dla obu nagrobków, nic nie jest eksmitowane po zagęszczeniu.

Rysunek 2-zagęszczanie zacienionych danych i ich nagrobków oddzielnie

ze względu na użycie dysku przez Dane i znacznik nagrobka, nagromadzenie nagrobków może mieć wpływ na opóźnienie odczytu, ponieważ Cassandra musi odczytać wiele nagrobków przed zwróceniem danych na żywo.

usuwanie danych zwykle nie stanowi problemu, jeśli te usunięcia są małe i rzadkie. Ponieważ, w trakcie naturalnego cyklu zagęszczania, Cassandra w końcu odzyskuje miejsce na dysku i wyczyszczone nagrobki. Jeśli jednak usuwasz dużą ilość danych na raz, tworzy to wiele nagrobków i może szybko wpłynąć na opóźnienie odczytu.

jeśli chcesz usunąć dużą ilość danych ad-hoc, w następnym poście na blogu możesz podjąć pewne kroki, aby zminimalizować ryzyko.

e-mail

Autor

  • Pedro Gordo

zainteresowany współpracą z Pedro? Umów się na rozmowę.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.