2013-03-12 22 views
6

Mamy klaster Cassandra z pojedynczym tokenem na węzeł, łącznie 22 węzły, średnie obciążenie na węzeł wynosi 500 Gb. Ma SimpleStrategy dla głównej przestrzeni kluczy i SimpleSnitch.Jak przeprowadzić migrację pojedynczego klastra do nowego klastra vNodes bez przestojów?

Musimy przenieść wszystkie dane do nowego centrum danych i zamknąć stare bez przestojów. Nowy klaster ma 28 węzłów. Chcę mieć vnodes na tym.

myślę o następującym procesie:

  1. migrować starego klastra do vnodes
  2. Konfiguracja nowy klaster z vnodes
  3. Dodaj węzły z nowym klastrze do starego i czekać, aż równoważy wszystkiemu
  4. klientów przełączyć się do nowego klastra
  5. likwidacji węzłów ze starego klastra jeden po drugim

Ale jest wiele szczegółów technicznych. Po pierwsze, czy powinienem przetasować stary klaster po migracji vnodes? Jaki jest najlepszy sposób na przejście na NetworkTopologyStrategy i GossipingPropertyFileSnitch? Chcę przejść na NetworkTopologyStrategy, ponieważ nowy klaster ma 2 różne stelaże z oddzielnymi przełącznikami zasilania/sieci.

+1

pro tip: wypróbuj najpierw w środowisku testowym/nieprodukcyjnym. – Schildmeijer

+0

tak to robię teraz – relgames

Odpowiedz

5

czy należy przetasować stary klaster po migracji vnodes?

Nie musisz. Jeśli przejdziesz z jednego tokenu na węzeł do 256 (wartość domyślna), każdy węzeł podzieli jego zakres na 256 sąsiednich, równorzędnych zakresów. Nie ma to wpływu na miejsce przechowywania danych. Oznacza to jednak, że po uruchomieniu w nowym węźle nowego DC pozostanie on zrównoważony podczas całego procesu.

jaki jest najlepszy sposób na przejście na NetworkTopologyStrategy i GossipingPropertyFileSnitch?

Trudność polega na tym, że zmiana strategii replikacji nie jest ogólnie bezpieczna, ponieważ dane będą musiały być przenoszone wokół klastra. NetworkToplogyStrategy (NTS) umieści dane na różnych węzłach, jeśli powiesz, że węzły są w różnych stojakach. Z tego powodu powinieneś przejść do NTS przed dodaniem nowych węzłów.

Oto sposób, aby to zrobić, po uaktualnieniu starego klastra vnodes (kroku 1 powyżej):

1a. Wymień wszystkie istniejące węzły jako będące w DC0 w pliku właściwości. Wymień nowe węzły jako będące w DC1 i ich prawidłowe stojaki.

1b. Zmień strategię replikacji na NTS z opcjami DC0: 3 (lub czymkolwiek, co jest twoim aktualnym współczynnikiem replikacji) i DC1: 0.

Następnie, aby dodać nowe węzły, wykonaj procedurę tutaj: http://www.datastax.com/docs/1.2/operations/add_replace_nodes#adding-a-data-center-to-a-cluster. Pamiętaj, aby ustawić liczbę tokenów na 256, ponieważ domyślnie będzie to 1.

W kroku 5 należy ustawić współczynnik replikacji dla DC0 na 0, tj. Zmienić opcje replikacji na DC0: 0, DC1: 3. Teraz węzły te nie są używane, więc wycofanie nie spowoduje przesłania żadnych danych, ale nadal należy je wykonywać, zamiast je wyłączać, aby zostały usunięte z ringu.

Jednym z zagrożeń jest to, że zapisy wykonane na niskim poziomie spójności do starych węzłów mogłyby się zagubić. Aby tego uniknąć, możesz napisać na CL.LOCAL_QUORUM po przejściu na nowy DC. Nadal istnieje małe okno, w którym można zgubić wpisy (między krokami 3 i 4). Jeśli jest to ważne, możesz uruchomić naprawę przed wyłączeniem starych węzłów, aby zagwarantować brak strat lub napisać na wysokim poziomie spójności.

+0

_writes wykonane na niskim poziomie spójności do starych węzłów może się zagubić_ Czy możesz wyjaśnić, dlaczego? Nie wiem, czy to ma znaczenie, ale nie nadpisujemy starych wartości, zawsze dodajemy nowe dane. Oto jak to widzę: 1. DC0 i DC1 są w górze, klienci używają DC0, przepływ danych wynosi DC0 -> DC1 2. Przełącznik: klienci używają DC1, przepływ danych wynosi DC0-> DC1 i DC1- > DC0 3. Stare dane są przesyłane do DC1, przepływ jest tylko DC1-> DC0 4. Ustaw DC0: 0, brak transferu danych między DC0 i DC1 Rzeczywiście widzę, że niektóre odczyty z DC1 na etapie 2 mogą nie widzieć dane, które wciąż są w DC0, ale możemy z tym żyć. Ale nie jest stracone. – relgames

+0

Podczas kroku 3, nawet jeśli twój klient jest podłączony do węzła w DC1, nie jest gwarantowane zapisywanie wartości do węzła w DC1 przy niskich poziomach konsystencji. Na przykład. jeśli napiszesz w CL.ONE, wszystkie repliki w DC1 mogą zawieść (np. z powodu zbyt dużego obciążenia, więc zrzucają zapis), a zapis kończy się tylko na węźle w DC0. Po ustawieniu DC0: 0 zapis jest tracony, mimo że został potwierdzony klientowi. – Richard

+0

Każdy pomysł, dlaczego datastax mówi, nie robi tego już więcej? http://datastax.com/documentation/cassandra/2.0/cassandra/configuration/configVnodesProduction_t.html - również tutaj http://www.datastax.com/dev/blog/upgrading-an-existing-cluster-to-vnodes- 2 – chrislovecnm

-1

Jeśli próbujesz przeprowadzić migrację do nowego klastra za pomocą węzłów vnodes, nie musisz zmieniać partycji. Dokumenty mówią, że nie jest dobrym pomysłem migracja danych między różnymi partycjonerami.

+0

Nie, wybór serwera partycjonującego jest niezależny od vnodes. – Richard