SolrCloud – co się dzieje, kiedy ZooKeeper pada?

Jednym z pytań, jakie dość często dostaje jest pytanie odnośnie zachowania Solr podczas awarii ZooKeepera. Oczywiście nie mamy tu na myśli awarii pojedynczej instancji w ramach klastra, kiedy quorum jest dalej dostępne,  a po prostu brak działającego klastra ZooKeeper. Ponieważ odpowiedź na to pytanie bardzo łatwo sprawdzić, postanowiłem zrobić krótki wpis pokazujący co się dzieje.

Środowisko testowe

Środowisko testowe jest bardzo proste:

  • Pojedyncza maszyna wirtualna działająca pod kontrolą systemu Linux
  • Pojedyncza instancja ZooKeeper (wystarczająca do testów)
  • Dwie instancje Solr, z pojedyncza kolekcją
  • Solr w wersji 4.6

Aby stworzyć wymienioną kolekcję wykorzystałem następujące polecenie:

Widok testowego klastra prezentuje się następująco:

cloud_view

Indeksujemy dane

Kolejnym krokiem, aby móc dalej przeprowadzić test jest zaindeksowanie kilku przykładowych dokumentów. Ze względu na to, że korzystamy z przykładowej konfiguracji, wykorzystamy przykładowe dokumenty. Polecenia wykorzystanie do zaindeksowania danych były następujące:

Po jego wykonaniu otrzymujemy następującą liczbę dokumentów:

  • Cała kolekcja ma 5 dokumentów
  • Shard zlokalizowany na Solr działającym na porcie 8983 ma 1 dokument
  • Shard zlokalizowany na Solr działającym na porcie 7983 ma 4 dokumenty

Zadawanie zapytań z niedziałającym ZooKeeperem

Przechodzimy do kolejnego kroku testu – po prostu wyłączamy ZooKeepera i próbujemy wykonać następujące polecenie:

W odpowiedzi otrzymujemy:

Jak widać Solr odpowiedział poprawnie. Dzieje się tak dlatego, że stan klastra opisywany plikiem clusterstate.json jest przechowywany po stronie Solr. Do wykonania zapytania nie jest potrzebna jego aktualizacja , a zatem wszystko powinno działać i działa.

Indeksowanie i niedziałający ZooKeeper

Nie włączając ZooKeepera próbujemy wykonać następujące polecenie:

Czyli po prostu zaindeksować plik hd.xml. Po dłuższym oczekiwanie w odpowiedzi otrzymujemy:

Jak widać bez działającego klastra ZooKeepera Solr nie jest w stanie zaindeksować danych.

Włączamy ZooKeepera nie restartując Solr

Włączamy zatem ponownie ZooKeepera nie restartując naszych instancji Solr i znów próbujemy wykonać następujące polecenie:

Tym razem odpowiedź wygląda następująco:

A zatem indeksowanie powiodło się, co pozwala nam zakładać, iż Solr sam ustanowił połączenie z ZooKeeperem, jak tylko ZooKeeper został uruchomiony. Możemy to zresztą zobaczyć w logach Solr i ZooKeepera.

Podsumowanie

Jak widać ten krótki test pozwolił nam na odpowiedź co się dzieje z Solr kiedy traci połączenie z ZooKeeperem – może dalej serwować dane, aczkolwiek nie jest w stanie ich zaindeksować. Mam nadzieję, że ten wpis pomoże rozwiać niektóre wątpliwości odnośnie SolrCloud i jego przydatności 🙂

Należy pamiętać, iż podczas testu wszystkie shardy z których składała się kolekcja były dostępne i w pełni działające. W następnej części tego wpisu przyjrzymy się, co dzieje się kiedy dochodzi do awarii podczas niedostępności ZooKeeper’a.

One thought on “SolrCloud – co się dzieje, kiedy ZooKeeper pada?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *