Redis Psync

Redis Psync

Wprowadzenie do replikacji redis

Redis jest zbudowany z różnymi funkcjami, aby zapewnić wysoką dostępność swoich instancji. Oprócz zaawansowanych funkcji wysokiej dostępności, takich jak klastrowanie i Sentinel, replikacja master-replica jest dostępna do skonfigurowania i używania przy minimalnym wysiłku. Instancja mistrza (lidera) może mieć wiele instancji obserwujących, w których każdy zwolennik jest dokładną kopią instancji lidera. Ilekroć replika jest odłączona od instancji lidera, ponownie odzyskuje połączenie i automatycznie sklonuj mistrz.

Jak widać na podanej ilustracji, gdy master i repliki są dobrze połączone, mistrz wysyła wszystkie polecenia zapisu i akcje, które zmieniają główny zestaw danych na repliki asynchronicznie. Proces ten jest niski opóźnienie i zoptymalizowany wydajnością.

Ponadto, w przypadku przerwy mistrzowskiej, repliki ponownie się połączą i próbują zdobyć tylko pominięte polecenia z powodu odłączenia. Nazywa się częściową synchronizacją. W niektórych przypadkach częściowa synchronizacja nie jest możliwa. Stąd pełna resynchronizacja ma miejsce, gdy instancja główna generuje migawkę swoich danych, popycha ją do replik i wysyła wszystkie polecenia wpływające na modyfikacje zestawu danych.

Polecenie Psync/Sync

Gdy repliki łączą się z mistrzem, używają polecenia PSYNC do komunikacji z instancją główną. W tym częściowym procesie synchronizacji podana replika wysyła główny identyfikator replikacji i wartości przesunięcia do serwera głównego. Na końcu odbierania te dwie informacje są używane do przesyłania przyrostowych zmian zestawu danych z instancji Master na replikę.

Krótko mówiąc, identyfikator replikacji głównej i przesunięcie przedstawiają dokładną wersję głównego zestawu danych. Każdy węzeł główny przypisuje się unikalny pseudo-lampy, który nazywa się identyfikatorem replikacji. Ponadto Master zachowuje wartość przesunięcia, która jest zwiększana dla każdego kawałka danych wytworzonych do repliki.

Jak pokazano na poprzedniej ilustracji, ponieważ główny zestaw danych został zmieniony z powodu zapisów klienta, wartość przesunięcia replikacji zmieniła się z 12324 na 15693. Stąd replika wywołuje polecenie Psync z zaktualizowaną wartością przesunięcia.

Składnia
Polecenie Psync ma następującą składnię:

Psync master_replication_id master_replication_offset

master_replication_id: To jest wygenerowany pseudo-randomowy ciąg, który reprezentuje dany zestaw danych.

master_replikacja_offset: Wartość przesunięcia, która jest zwiększana na każdy kawałek bajtów generowany w celu wysyłania do replików.

To polecenie zwraca fragment danych i zapisuje z mistrza do instancji repliki. Krótko mówiąc, polecenie PSYNC rozpoczyna strumień replikacji od instancji lidera do instancji repliki, która przenosi zestaw danych i żądania zapisu klienta z poprzedniego przesunięcia.

Przypadek użycia - synchronizacja repliki z Master

Zacznijmy od kilku instancji Redis Server w różnych portach, takich jak 6379 i 6380. Możesz użyć następującego polecenia:

Redis-Server --port 6379
Redis-Server --port 6380

Następnie konwertujemy jedną instancję Redis na replikę za pomocą komendy repliki. Wcześniej musimy połączyć się z tym instancją z Redis-CLI, jak pokazano następująco:

Redis -cli -p 6380

Teraz połączenie jest nawiązane z instancją Redis Server Up i uruchomiony w porcie 6380. Uczyńmy tę instancję replika drugiej instancji Redis, która działa w porcie 6379.

Teraz możemy sprawdzić, czy ta instancja stała się repliką, wydając następujące polecenie:

Jak widać, rola jest wyświetlana jako niewolnik w tym przypadku. Uruchommy to samo polecenie przeciwko drugiej instancji i sprawdźmy:

Jest to węzeł główny, jak pokazano w poprzednim oknie wyjściowym.

Sprawdźmy, w jaki sposób odbywa się synchronizacja między instancjami mistrza i niewolnikami. Do celów demonstracyjnych używane jest polecenie synchronizacji. Zachowuje się tak samo jak polecenie Psync, z wyjątkiem tego, że częściowa synchronizacja jest niedozwolona.

Wydajmy polecenie synchronizacji z repliki.

Teraz wydawamy polecenie zapisu do instancji głównej za pośrednictwem CLI.

Zgodnie z oczekiwaniami, polecenie zapisu jest przenoszone do repliki, a następnie ping. Polecenie Psync działa tak samo jak polecenie, ale z włączoną częściową synchronizacją.

Wniosek

Podsumowując, Redis ma różne funkcje, które umożliwiają wysoką dostępność. Wzór master-replica jest jedną z technik obsługiwanych przez Redis, aby upewnić się, że co najmniej jedna instancja serwera Redis jest dostępna w danym momencie. Każda replika jest synchronizowana z głównym i wydaje polecenie PSYNC, aby utworzyć strumień replikacji, który przesyła zmieniony zestaw danych i zapisuje żądania z Master. Jak wspomniano, polecenie Psync zachowuje się tak samo jak stare polecenie synchronizacji, ale z włączoną częściową synchronizacją.