Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Strażnik Redis

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;

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy operacje redis na strukturach danych są bezpieczne wątkowo?

  2. jak obsłużyć wygasanie sesji w oparciu o redis?

  3. Błąd pola w obiekcie „target” w polu „”:wartość odrzucona []; kody [typeMismatch.target.,typeMismatch.,typeMismatch.java.util.Date,typeMismatch]

  4. Jak szukać kluczy z wartością? Na przykład zdobądź wszystkie KLUCZE, których wartością jest jakaś wartość

  5. Redis connect ECONNREFUSED w NodeJS w klastrze Kubernetes