Replikacja Redis master / slave-pojedynczy punkt awarii?

Jak uaktualnić Redis do nowszej wersji z zerowym przestojem? Redis niewolniki są tylko do odczytu, więc wydaje się, że będziesz musiał zdjąć master i Twoja strona będzie tylko do odczytu przez 45 sekund lub więcej, podczas gdy czekałeś na to, aby przeładować DB.

Jest jakiś sposób na obejście tego?

Author: nornagon, 2011-01-18

4 answers

Podczas pobierania węzła w trybie offline, Promuj slave do master za pomocą polecenia SLAVEOF, a następnie po przywróceniu go do trybu online skonfiguruj go jako slave i skopiuje wszystkie dane z węzła online.

Może być również konieczne upewnienie się, że klient może odpowiednio obsłużyć zmienione/brakujące węzły główne.

Jeśli chcesz uzyskać naprawdę fantazyjne, możesz skonfigurować klienta do promowania slave, jeśli wykryje błąd zapisu do master.

 21
Author: Tom Clarkson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 08:10:39

Zespół Redis ma bardzo dobrą dokumentację na ten temat

Podstawowe Kroki:

  • Skonfiguruj nową instancję Redis jako slave dla bieżącej instancji Redis. Aby to zrobić, potrzebujesz innego serwera lub serwera, który ma wystarczającą ilość pamięci RAM, aby dwie instancje Redis działały jednocześnie.
  • Jeśli używasz jednego serwera, upewnij się, że slave jest uruchomiony w innym porcie niż instancja master, w przeciwnym razie slave nie będzie mógł się uruchomić w ogóle.
  • Wait for pierwsza synchronizacja replikacji do zakończenia (sprawdź plik dziennika slave).
  • upewnij się, używając INFO, że w master i w slave jest taka sama liczba kluczy. Sprawdź w redis-cli, czy slave działa tak, jak chcesz i odpowiada na twoje polecenia.
  • Skonfiguruj wszystkich klientów tak, aby używali nowej instancji (czyli slave).
  • Gdy masz pewność, że master nie odbiera już żadnego zapytania (możesz to sprawdzić za pomocą polecenia MONITOR), wybierz niewolnik do opanowania używając rozkazu niewolnika nikt i wyłącz swojego mistrza.

Pełna Dokumentacja:

Aktualizacja lub ponowne uruchomienie wystąpienia Redis bez przestojów

 28
Author: kaji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-06 05:00:05

Możesz w tym celu użyć Redis Sentinel, sentinel automatycznie wypromuje slave jako nowy master. więcej informacji znajdziesz tutaj http://redis.io/topics/sentinel .

Sentinel to system służący do zarządzania serwerami redis, stale monitoruje redis master i slave, a za każdym razem, gdy master się wyłączy, automatycznie awansuje slave NA master. a kiedy stary mistrz wstanie, stanie się niewolnikiem nowego mistrza.

Tutaj nie będzie wymagany jest przestój lub ręczna konfiguracja pliku konfiguracyjnego. Możesz odwiedzić powyższy link, aby dowiedzieć się, jak skonfigurować sentinel dla swoich serwerów redis.

 10
Author: Abhi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-25 10:04:03

Uwaga, być może będziesz musiał sprawdzić i ustawić poniższą konfigurację, aby zapisać do swojego slave. ("Od Redis 2.6 domyślnie niewolniki są tylko do odczytu")

redis-cli config set slave-read-only no

-- przykład

-bash-4.1$ redis-cli info
 Server
redis_version:2.6.9

-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379
OK

-bash-4.1$ redis-cli set temp 42
(error) READONLY You can't write against a read only slave.

-bash-4.1$ redis-cli slaveof no one
OK

-bash-4.1$ redis-cli set temp 42
OK

-bash-4.1$ redis-cli get temp
"42"


-bash-4.1$ redis-cli config set slave-read-only no
OK

-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379
OK

-bash-4.1$ redis-cli set temp 42
OK

-bash-4.1$ redis-cli get temp
"42"
 5
Author: Ed J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-08 21:19:54