Redis Sentinel jest oficjalnym zaleceniem uruchomienia wysoce dostępnej konfiguracji Redis poprzez uruchomienie szeregu dodatkowych procesów redis sentinel w celu aktywnego monitorowania istniejących instancji redis master i slave, upewniając się, że każda z nich działa zgodnie z oczekiwaniami. Jeśli w drodze konsensusu zostanie ustalone, że urządzenie nadrzędne nie jest już dostępne, automatycznie przełączy się w tryb awaryjny i promuje jeden z replikowanych urządzeń podrzędnych jako nowego urządzenia nadrzędnego. Strażnicy utrzymują również autorytatywną listę dostępnych instancji redis, zapewniając klientom centralne repozytorium do wykrywania dostępnych instancji, z którymi mogą się połączyć.
Wsparcie dla Redis Sentinel jest dostępne z RedisSentinel
klasa, która nasłuchuje dostępnych Sentinel, aby uzyskać listę dostępnych instancji redis master, slave i innych, których używa do konfigurowania i utrzymywania menedżerów klienta Redis, inicjując wszelkie przełączanie awaryjne w miarę ich zgłaszania.
Użycie #
Aby korzystać z nowej obsługi Sentinel, zamiast wypełniać menedżerów klienta Redis parametrami połączenia instancji master i slave, należy utworzyć pojedynczy RedisSentinel
instancja skonfigurowana z ciągiem połączenia działających strażników Redis:
var sentinelHosts = new[]{ "sentinel1", "sentinel2:6390", "sentinel3" };
var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");
To pokazuje typowy przykład konfiguracji RedisSentinel
który odnosi się do 3 hostów wartowniczych (tj. minimalna liczba dla konfiguracji o wysokiej dostępności, która może przetrwać awarię dowolnego węzła). Jest również skonfigurowany do przeglądania mymaster
zestaw konfiguracyjny (domyślna grupa główna).
INFORMACJE
Redis Sentinels może monitorować więcej niż 1 grupę master / slave, każda z inną nazwą grupy master.
Domyślny port dla strażników to 26379 (jeśli nie jest określony) i ponieważ RedisSentinel może automatycznie wykrywać innych strażników, minimalna wymagana konfiguracja to po prostu:
var sentinel = new RedisSentinel("sentinel1");
INFORMACJE
Skanowanie i automatyczne wykrywanie innych Strażników można wyłączyć za pomocą ScanForOtherSentinels=false
Rozpocznij monitorowanie Strażników #
Po skonfigurowaniu możesz rozpocząć monitorowanie serwerów Redis Sentinel i uzyskać dostęp do wstępnie skonfigurowanego menedżera klientów za pomocą:
IRedisClientsManager redisManager = sentinel.Start();
Który, jak poprzednio, może zostać zarejestrowany w preferowanym przez Ciebie IOC jako singleton przykład:
container.Register<IRedisClientsManager>(c => sentinel.Start());
Zaawansowana konfiguracja Sentinel #
RedisSentinel domyślnie zarządza skonfigurowanym PooledRedisClientManager
instancja, która rozpoznaje obu głównych klientów Redis do odczytu/zapisu GetClient()
i niewolników dla tylko do odczytu GetReadOnlyClient()
API.
Można to zmienić, aby użyć nowszego RedisManagerPool
z:
sentinel.RedisManagerFactory = (master,slaves) => new RedisManagerPool(master);
Niestandardowy ciąg połączenia Redis #
Host, na którym skonfigurowano RedisSentinel, dotyczy tylko tego hosta Sentinel. Nadal możesz korzystać z elastyczności parametrów połączenia Redis, aby skonfigurować poszczególnych klientów Redis, określając niestandardowy HostFilter
:
sentinel.HostFilter = host => "{0}?db=1&RetryTimeout=5000".Fmt(host);
Spowoduje to zwrócenie klientów skonfigurowanych do korzystania z bazy danych 1 i limitu czasu ponawiania próby wynoszący 5 sekund (używane w nowej funkcji automatycznego ponawiania).
Inna konfiguracja RedisSentinel #
Chociaż powyższe obejmuje popularną konfigurację Sentinel, która byłaby zwykle używana, prawie każdy aspekt RedisSentinel
zachowanie można dostosować za pomocą poniższej konfiguracji:
OnSentinelMessageReceived | Zwolnione, gdy pracownik Sentinel otrzyma wiadomość z subskrypcji Sentinel |
Po przełączeniu awaryjnym | Uruchamiane, gdy Sentinel przełącza Menedżera klienta Redis na nowy master |
OnWorkerError | Uruchamiane, gdy połączenie Redis Sentinel Worker nie powiedzie się |
Mapa adresów IP | Odwzoruj wewnętrzne adresy IP hosta redis zwrócone przez Sentinels na jego zewnętrzny adres IP |
ScanForOtherSentinels | Czy rutynowo skanować w poszukiwaniu innych hostów wartowniczych (domyślnie prawda) |
OdświeżSentinelHostsPo | Jaki interwał skanować w poszukiwaniu innych hostów wartowniczych (domyślnie 10 minut) |
WaitBetweenFailedHosts | Jak długo czekać po awarii przed połączeniem z następną instancją redis (domyślnie 250ms) |
Max WaitBetweenFailedHosts | Jak długo należy ponowić próbę połączenia z hostami przed wyrzuceniem (domyślnie 60s) |
Poczekaj przed wymuszeniem przełączania awaryjnego | Jak długo po kolejnych nieudanych próbach wymuszenia przełączenia awaryjnego (domyślne 60s) |
ResetWhenSubjectivelyDown | Resetuj klientów, gdy Sentinel zgłasza, że redis jest subiektywnie wyłączony (domyślnie prawda) |
ResetWhenObjectivelyDown | Resetuj klientów, gdy Sentinel zgłasza, że redis jest obiektywnie wyłączony (domyślnie prawda) |
SentinelWorkerConnectTimeoutMs | Maksymalny czas połączenia dla Sentinel Worker (domyślnie 100 ms) |
SentinelWorkerSendTimeoutMs | Maksymalny czas wysyłania przez gniazdo TCP dla Sentinel Worker (domyślnie 100 ms) |
SentinelWorkerReceiveTimeoutMs | Maksymalny czas odbioru gniazda TCP dla Sentinel Worker (domyślnie 100 ms) |
Konfiguruj serwery Redis Sentinel #
Projekt redis config upraszcza konfigurowanie i uruchamianie wysoce dostępnej wielowęzłowej konfiguracji Redis Sentinel, w tym skryptów start/stop do natychmiastowego konfigurowania minimalnej, wysoce dostępnej konfiguracji Redis Sentinel na jednym (lub wielu) serwerach Windows, OSX lub Linux. Ta jednoserwerowa/wieloprocesowa konfiguracja jest idealna do ustawienia działającej konfiguracji wartowniczej na pojedynczej stacji roboczej lub zdalnym serwerze.
Repozytorium redis-config zawiera również pliki binarne redis MS OpenTech Windows i nie wymaga instalacji żadnego oprogramowania.
Użycie w systemie Windows #
Aby uruchomić dołączoną konfigurację Sentinel, sklonuj repozytorium redis-config na serwerze, na którym chcesz je uruchomić:
git clone https://github.com/ServiceStack/redis-config.git
Następnie uruchom 1x Master, 2x Slaves i 3x Sentinel redis-serwery za pomocą:
cd redis-config\sentinel3\windows
start-all.cmd
Instancje rozpoczęte:
stop-all.cmd
Jeśli uruchamiasz procesy redis lokalnie na swojej stacji roboczej, minimalna konfiguracja do połączenia z uruchomionymi instancjami to po prostu:
var sentinel = new RedisSentinel("127.0.0.1:26380");
container.Register(c => sentinel.Start());
Lokalny host a adres IP sieci #
Konfiguracja wartownika zakłada, że wszystkie instancje redis działają lokalnie na 127.0.0.1 . Jeśli zamiast tego używasz go na zdalnym serwerze, do którego wszyscy programiści w Twojej sieci mają mieć dostęp, musisz zmienić adres IP w *.conf
pliki do korzystania z sieci IP serwerów. W przeciwnym razie możesz pozostawić ustawienia domyślne i użyć RedisSentinel
Funkcja mapowania adresów IP do przezroczystego mapowania adresów IP hostów lokalnych na adresy IP sieci, z którymi może się połączyć każdy komputer w sieci.
Np. jeśli działa na zdalnym serwerze z 10.0.0.9 IP sieci, można go skonfigurować za pomocą:
var sentinel = new RedisSentinel("10.0.0.9:26380") {
IpAddressMap = {
{"127.0.0.1", "10.0.0.9"},
}
};
container.Register(c => sentinel.Start());
Google Cloud – kliknij, aby wdrożyć Redis #
Najłatwiejszą usługą w chmurze, którą znaleźliśmy, która umożliwia natychmiastowe skonfigurowanie wielowęzłowej konfiguracji Sentinel Redis, jest użycie kliknięcia Google Cloud w celu wdrożenia funkcji Redis dostępnej w Google Cloud Console w sekcji Wdrażanie i zarządzanie :
Kliknięcie Wdróż przycisk pozwoli Ci skonfigurować typ, rozmiar i lokalizację, w której chcesz wdrożyć maszynę wirtualną Redis. Zobacz pełny przewodnik Click to Deploy Redis, aby zapoznać się z instrukcją konfigurowania i sprawdzania wysoce dostępnej konfiguracji Redis w Google Cloud.
Zmień na użycie RedisManagerPool #
Domyślnie RedisSentinel używa PooledRedisClientManager
, można to zmienić, aby użyć nowszego RedisManagerPool
z:
sentinel.RedisManagerFactory = (master,replicas) => new RedisManagerPool(master);
Rozpocznij monitorowanie Strażników #
Po skonfigurowaniu możesz rozpocząć monitorowanie serwerów Redis Sentinel i uzyskać dostęp do wstępnie skonfigurowanego menedżera klientów za pomocą:
IRedisClientsManager redisManager = sentinel.Start();
Który, jak poprzednio, może zostać zarejestrowany w preferowanym przez Ciebie IOC jako singleton przykład:
container.Register<IRedisClientsManager>(c => sentinel.Start());
Konfiguruj serwery Redis Sentinel #
Zobacz projekt redis config, aby szybko skonfigurować minimalną, wysoce dostępną konfigurację Redis Sentinel, w tym skrypty start/stop do natychmiastowego uruchamiania wielu instancji Redis na jednym (lub wielu) serwerach Windows, OSX lub Linux.
Statystyki Redis #
Możesz użyć RedisStats
klasy dla widoczności i introspekcji w uruchomionych instancjach. Wiki Redis Stats zawiera listę dostępnych statystyk.
Automatyczne ponawianie #
Aby poprawić odporność połączeń klientów, RedisClient
w przejrzysty sposób ponawia nieudane operacje Redis z powodu wyjątków gniazd i we/wy w wykładniczym wycofywaniu się od 10 ms aż do RetryTimeout
10000ms . Te ustawienia domyślne można dostosować za pomocą:
RedisConfig.DefaultRetryTimeout = 10000;
RedisConfig.BackOffMultiplier = 10;