Mam klaster klastra z 2 węzłami o współczynniku replikacji 2 i AutoBootStrap = true. Wszystko działa dobrze podczas uruchamiania i oba węzły widzą się nawzajem. Nazwijmy te węzły A i B.Problem replikacji Cassandra Data
- Dodaj zestaw kluczy i kolumn (pozwala nazwać ten zestaw K1) do Cassandry przez węzeł A.
- Podłączyć do węzła A i odczytać z powrotem ustawić K1. Sam na Node B. sukces - Dobra
- proces Zabij Cassandra na Node B.
- Dodaj ustalonym przez K2 A.
- Podłączyć do węzła A i czytaj ustawić K2. Dobry
- Zrestartuj proces Cassandra w węźle B.
- Spróbuj odczytać wszystkie klucze z B ... ustaw aktualny K1, ustaw K2 BRAK. (Nawet po 30 minutach)
- Dodaj K3 do A/B.
- Przeczytaj wszystkie klucze z A - zestaw zwrotów K1, K2, K3
- Przeczytaj wszystkie klucze z B - zestaw zwrotów K1, K3.
B nigdy nie synchronizuje zestawu K2 ... (minęło więcej niż 12 godzin) Dlaczego węzeł B nie widzi zestawu K2 ... Czy ktoś ma jakiś pomysł?
Dodane Info:
Ok ... to był problem. Parametr read_consistency_level był domyślnie ustawiony na wartość 1.
Kiedy więc pytamy węzła B o zestaw K2, i nie ma go (gdy powinien z powodu współczynnika replikacji = 2), natychmiast zwraca błąd "Nie znaleziono".
Jeśli jednak użyjemy spójności odczytu jako QUORUM lub ALL, wówczas B jest zmuszone zapytać A, które następnie zwraca poprawną wartość, a B synchronizuje ten klucz (zapisuje lokalnie).
Prowadzi to do innego problemu - oznacza to, że gdy węzeł B zostanie wyświetlony, nie synchronizuje on wszystkich danych z węzła A nawet po długim czasie. Teraz, jeśli węzeł A ulegnie awarii, w jaki sposób uzyskać dostęp do niezsynchronizowanych danych? (Właśnie testowałem, że nie możemy)
Chyba musi być sposób na wymuszenie synchronizacji danych. Widzę INFO na wyjściu terminalowym, że nastąpiło podpowiedziane przekazanie 15 wierszy od A do B, gdy B podniosło się, ale B nie ma tych wierszy lokalnie (ponieważ wciąż nie możemy odczytać go z B o poziomie spójności JEDNO). Co tu się dzieje?
Dzięki jBellis. Zrobiłem krok dalej z Kasandra.Jednak natknąłem się na inny problem i dodałem trochę informacji do pytania. – Rajan