MongoDB na środowisku produkcyjnym Sitecore

Ustawienie MongoDB na lokalnym środowisku developerskim jest całkiem łatwe. Wystarczy ściągnąc MongoDB, zainstalować i skonfigurować mongod (proces bazy danych) jako usługę Windows. Wszystkie połączenia są domyślnie ustawione w Sitecore w pliku ConnectionStrings.config. Nie trudne. Dobra, ale jak ustawić MongoDB na środowisku produkcyjnym, gdzie trzeba zapewnić wymagany poziom świadczenia usług (SLA). Innymi słowami, musimy być pewni, że Sitecore wciąż będzie działał, mimo że komponent systemu, na którym znajduje się Mongo, przestanie działać.

Najprostszym sposobem na dostarczenie takiego rozwiązania jest użycie replikacji MongoDB. Jak to działa, w skrócie?

Zaczynamy od instalacji MongoDB na większej ilości maszym, przynajmniej na dwóch (a właściwie trzech, jeśli stworzymy Arbiter), po czym konfigurujemy “replica set”. W ramach “replica set” na każdej maszynie uruchamiany jest osobny proces mongod. Wszystkie procesy są połączone i mają różne role:

  1. Primary – główny węzeł odpowiedzialny za przechowanie danych umożliwiający zapis i odczyt danych. Jeśli dane w MongoDB zostały zmodyfikowane, automatycznie są replikowane z węzła Primary do węzłów Secondary.
  2. Secondary – dodatkowy węzeł odpowiedzialny za przechowywanie danych, umożliwiający tylko odczyt. W replica set może być więcej niż jeden węzeł Secondary. Jeśli węzeł Primary przestanie działać, jeden z węzłów Secondary zostanie mianowany na nowy węzeł Primary.
  3. Arbiter – jedyną rolą tego węzła jest mianowanie wezła Secondary na nowy węzeł Primary, w razie awarii węzła Primary. Arbiter nie przechowuje danych.

Sitecore komunikuje się z węzłami Primary i Secondary. Dodatkowo w ramach replica set wszystkie węzły komunikują się między sobą.

 

Konfiguracja replica set

Wymagania wstępne

Musimy zainstalować i uruchomić MongoDB na wszystkich maszynach oraz zapewnić komunikacje między nimi. Do sprawdzenia można użyć polecenia telnet, lub połączyć się z instancją MongoDB za pomocą komendy mongo, którą można uruchomić z folderu, w którym zainstalowano MongoDB:

Komendę można powtórzyć na każdej maszynie, łącząc się z każdą instancją MongoDB.
Rezultat powinien wyglądać następująco “connecting to: mongo2.smartsitecore.com:27017/test”

Konfiguracja węzła Primary

Zaczynamy od zmiany w pliku konfiguracyjnym mongod na węźle Primary dodając następujące linie (jeśli nie używamy składni  YAML wystarczy dodać replSet=rs0). “rs0” będzie nazwą replica set’u:

Po każdej zmianie pliku konfiguracyjnego trzeba zrestartować usługę mongod. Następnie łączymy się z MongoDB na węźle Primary za pomocą komendy mongo i inicjalizujemy replica set komendą:

W rezultacie otrzymujemy potwiedzenie { “ok” : 1}

Konfiguracja węzła Secondary

Zmieniamy plik konfiguracyjny mongod na węźle Secondary dodając takie same linie, jak na węźle Primary:

Restartujemy mongod na węźle Secondary, a następnie na węźle Primary, łącząc się do bazy, uruchamiamy komendę rs.add():

Ponownie powinniśmy zobaczyć potwierdzenie { “ok” : 1}

Konfiguracja węzła Arbiter

Zmieniamy plik konfiguracyjny mongod na węźle Arbiter, dodając te same linie z nazwą replica oraz dodatkowo wyłączamy  journal dla przechowywanych danych (jeśli nie używamy składni YAML dodajemy do pliku: journal.enabled=false). Na weźle Arbiter możemy bezpiecznie wyłączyć journal, ponieważ nie przechowuje od żadnych danych, poza konfiguracją węzła.

Restartujemy mongod na węźle Arbiter, następnie na węźle Primary, po połączeniu do bazy danych uruchamiamy komendę  rs.addArb():

Ponownie powinniśmy zobaczyć potwierdzenie { “ok” : 1}

Sprawdzenie statusu Replica set

Z jednej z instancji łączymy się do bazy danych, za pomocą komendy mongo, następnie sprawdzamy status replikacji:

W rezultacie powinniśmy otrzymać raport ze statusem replikacji. Wszystkie trzy węzły działają:

Możemy teraz wyłączyć jeden z węzłów Primary lub Secondary i obserwować co stanie się z replikacją za pomocą komendy rs.status(). Jeśli wyłaczymy Primary, Arbiter automatycznie mianuje Secondary na nowy węzeł Primary.

Konfiguracja Sitecore do użycia MongoDB replica set

Wreszcie możemy uaktualnić połączenie do baz danych w Sitecore tak aby wskazywały replica set:

Takie ustawienie gwarantuje poprawioną wydajność (poprzez odczyt z wielu maszyn) oraz automatyczne przełączenie w razie awarii. Dane są synchronizowane automatycznie pomiędzy instancjami Primary i Secondary.

Odnośniki