Czy na każdym węźle musisz uruchomić naprawę narzędzia Nodetool?

12

Czy musisz uruchomić nodetool repairna każdym węźle w klastrze, czy wystarczy uruchomić go tylko na jednym węźle, a stamtąd Cassandra zajmie się resztą?

2rs2ts
źródło

Odpowiedzi:

9

Przeglądając dokumentację, trudno mi znaleźć odniesienie do tego, ale krótka odpowiedź brzmi „tak”, musisz uruchomić nodetool repairna każdym węźle w klastrze. Najbliższa mogę znaleźć dokumentację dotyczącą naprawy węzłów, która sugeruje, że nie należy uruchamiać naprawy więcej niż jednego węzła w klastrze na raz.

Możesz także uruchomić naprawę z -prflagą, która ogranicza operację naprawy do pierwszego zakresu tokena, za który odpowiada bieżący węzeł. Ogranicza to powielanie pracy podczas uruchamiania na pozostałych węzłach.

Aaron
źródło
Więc jeśli uruchomię z -prkażdym węzłem, czy obejmie to całą przestrzeń klucza?
2rs2ts
1
@ 2rs2ts Tak, jeśli uruchomisz go -prna każdym węźle, obejmie on całą przestrzeń klawiszową.
Aaron,
1
Okej ... Zakładam, że powinieneś uruchomić go na każdym węźle, ale możesz zaoszczędzić czas z -prflagą.
2rs2ts,
1
Dodałem kilka źródeł do drugiej odpowiedzi. Źródło to jest dość jasne: „Trudnym wymaganiem dla rutynowej częstotliwości naprawy jest wartość gc_grace_seconds. Uruchom operację naprawy przynajmniej raz na każdym węźle w tym okresie”. Naprawianie węzłów
Carl G
5

To, jak się zachowuje, zależy od konfiguracji, używanej wersji Cassandry i sposobu uruchomienia polecenia naprawy.

Jeśli uruchomisz tylko jeden nodetool repairwęzeł w klastrze, spowoduje to naprawę wszystkich danych (zakresów tokenów), za które odpowiedzialny jest ten węzeł, a także innych węzłów, które są odpowiedzialne za te dane.

Na przykład, jeśli chcesz uruchomić nodetool repairpolecenie na pojedynczym węźle w danym klastrze:

  • Jeśli korzystasz z klastra trzy węzłowego ze współczynnikiem replikacji wynoszącym trzy, wszystkie węzły będą właścicielami wszystkich danych, a zatem naprawy zostaną wykonane dla wszystkich węzłów.
  • Jeśli korzystasz z klastra sześciu węzłów ze współczynnikiem replikacji 2, dane zostaną naprawione tylko w dwóch z sześciu węzłów. Naprawa będzie musiała zostać rozpoczęta w dwóch pozostałych czterech pozostałych węzłach.

To powiedziawszy, możliwe jest określenie, które hosty i centra danych będą przeprowadzać naprawy przy użyciu flag -hostsi -dc. Dodatkowo, jeśli użyjesz -prflagi (która wybierze tylko pierwszy zakres tokenów, za który odpowiedzialny jest węzeł), będziesz musiał uruchomić się nodetool repair -prna wszystkich węzłach w klastrze.

Inną flagą, o której należy pamiętać, jest -incflaga, która została uwzględniona w Cassandra 2.1. Ta opcja naprawi tylko nowe dane (dane, które nie zostały wcześniej naprawione). Zachowaj ostrożność, polegając na tym, szczególnie jeśli często usuwasz dane. ( więcej na ten temat )

Należy również pamiętać o tym, że domyślny sposób napraw w Cassandra może się różnić. Począwszy od Cassandry 2.1, po uruchomieniu nodetool repairdomyślnie wykonuje pełną sekwencyjną naprawę. Będziesz chciał sprawdzić, co robi Twoja wersja.

Więcej informacji na ten temat:

https://www.datastax.com/dev/blog/repair-in-cassandra

Gen
źródło
2
jedyna dobra odpowiedź tutaj
ruruskyi
2

Nie, nie musisz uruchamiać każdego węzła. nodetool repairdziała na zbiorze węzłów, co jest wyraźnie określone w dokumentacji .

Możesz ograniczyć węzły lub część danych, na których chcesz uruchomić naprawę. Na przykład można podać -propcję zakresu partycjonera, zakresu, za który odpowiedzialny jest węzeł, ale będzie to musiało być uruchomione dla całego klastra. Ale jeśli wybierzesz -local, węzły w lokalnym centrum danych węzła zostaną naprawione.

nkzscorpion
źródło
4
Uruchomienie nodetool repairw jednym węźle nie jest wystarczające do naprawy wszystkich zreplikowanych danych we wszystkich węzłach we wszystkich konfiguracjach. Uruchomienie nodetool repairw jednym węźle naprawi tylko dane replikowane w tym węźle. (Dodanie -propcji ogranicza naprawę do danych, dla których ten węzeł jest pierwszą repliką.) Ale jeśli masz w klastrze dane, które nie są replikowane w tym węźle, musisz uruchomić nodetool repairna dodatkowych węzłach.
Carl G,
2
„Jeśli opcja -pr nie jest określona, ​​Cassandra naprawia wszystkie zakresy replik, które wchodzą w zakres odpowiedzialności węzła.” nodetool repair docs (tj. nie naprawia danych, dla których ten węzeł nie jest odpowiedzialny za replikację). „Twardym wymaganiem dla rutynowej częstotliwości naprawy jest wartość gc_grace_seconds. Uruchom operację naprawy przynajmniej raz na każdym węźle w tym okresie.” Naprawianie węzłów
Carl G,