sql >> Databáze >  >> NoSQL >> Redis

Redis Sentinel

Redis Sentinel je oficiální doporučení pro provozování vysoce dostupné konfigurace Redis spuštěním řady dalších procesů redis sentinel pro aktivní monitorování existujících redis master a slave instancí, aby bylo zajištěno, že každá pracuje podle očekávání. Pokud se na základě konsensu zjistí, že hlavní zařízení již není k dispozici, automaticky přejde při selhání a povýší jeden z replikovaných podřízených zařízení na nového hlavního zařízení. Strážci také udržují autoritativní seznam dostupných instancí redis a poskytují klientům centrální úložiště, kde mohou objevit dostupné instance, ke kterým se mohou připojit.

Podpora pro Redis Sentinel je k dispozici s RedisSentinel class, která naslouchá dostupným Sentinelům, aby získala svůj seznam dostupných master, slave a dalších instancí Sentinel redis, které používá ke konfiguraci a údržbě Redis Client Manager a spouští jakákoli selhání, jakmile jsou hlášena.

Použití #

Chcete-li použít novou podporu Sentinel, místo naplnění Redis Client Manager připojovacím řetězcem instancí master a slave byste vytvořili jeden RedisSentinel instance nakonfigurovaná pomocí připojovacího řetězce spuštěných Redis Sentinel:

var sentinelHosts = new[]{ "sentinel1", "sentinel2:6390", "sentinel3" };
var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");

Toto ukazuje typický příklad konfigurace RedisSentinel který odkazuje na 3 sentinelové hostitele (tj. minimální počet pro vysoce dostupné nastavení, které přežije selhání jakéhokoli uzlu). Je také nakonfigurován tak, aby se díval na mymaster konfigurační sada (výchozí hlavní skupina).

INFO

Redis Sentinel může monitorovat více než 1 hlavní / podřízenou skupinu, každou s jiným názvem hlavní skupiny.

Výchozí port pro sentinely je 26379 (pokud není specifikováno) a protože RedisSentinel dokáže automaticky objevit další hlídače, minimální požadovaná konfigurace je pouze:

var sentinel = new RedisSentinel("sentinel1");

INFO

Skenování a automatické zjišťování dalších Sentinelů lze zakázat pomocí ScanForOtherSentinels=false

Zahájit sledování Sentinelů #

Po konfiguraci můžete začít monitorovat servery Redis Sentinel a přistupovat k předem nakonfigurovanému správci klientů pomocí:

IRedisClientsManager redisManager = sentinel.Start();

Který, jako dříve, může být registrován ve vašem preferovaném MOV jako singleton instance:

container.Register<IRedisClientsManager>(c => sentinel.Start());

Pokročilá konfigurace Sentinel #

RedisSentinel ve výchozím nastavení spravuje nakonfigurovaný PooledRedisClientManager instance, která řeší oba hlavní klienty Redis pro čtení/zápis GetClient() a otroky pro GetReadOnlyClient() pouze pro čtení API.

Toto lze změnit a používat novější RedisManagerPool s:

sentinel.RedisManagerFactory = (master,slaves) => new RedisManagerPool(master);

Vlastní připojovací řetězec Redis #

Hostitel, se kterým je RedisSentinel nakonfigurován, platí pouze pro tohoto hostitele Sentinel, stále můžete využít flexibilitu připojovacích řetězců Redis ke konfiguraci jednotlivých klientů Redis zadáním vlastního HostFilter :

sentinel.HostFilter = host => "{0}?db=1&RetryTimeout=5000".Fmt(host);

Tím se vrátí klienti nakonfigurovaní pro použití databáze 1 a časový limit opakování 5 sekund (používá se v nové funkci automatického opakování).

Jiná konfigurace RedisSentinel #

Zatímco výše uvedené pokrývá oblíbenou konfiguraci Sentinel, která by se obvykle používala, téměř každý aspekt RedisSentinel chování je přizpůsobitelné pomocí konfigurace níže:

OnSentinelMessageReceived Spustí se, když pracovník Sentinel obdrží zprávu od předplatného Sentinel
OnFailover Spustí se, když Sentinel selže přes Redis Client Manager na nový hlavní server
OnWorkerError Spustí se, když selže připojení Redis Sentinel Worker
IpAddressMap Mapujte interní IP hostitele redis vrácené Sentinely na jeho externí IP
Skenovat další Sentinely Zda se má rutinně vyhledávat další hostitelské hostitele (výchozí hodnota true)
RefreshSentinelHostsAfter V jakém intervalu se mají vyhledávat další hostitelské strážce (výchozí 10 minut)
WaitBetweenFailedHosts Jak dlouho čekat po selhání před připojením k další instanci redis (výchozí 250 ms)
MaxWaitBetweenFailedHosts Jak dlouho se znovu pokusit o připojení k hostitelům před vyvoláním (výchozí 60 s)
WaitBeforeForcingMasterFailover Jak dlouho po po sobě jdoucích neúspěšných pokusech o vynucení převzetí služeb při selhání (výchozí 60 s)
Reset When SubjectivelyDown Resetovat klienty, když Sentinel hlásí, že redis je subjektivně nefunkční (výchozí hodnota true)
Reset WhenObjectivelyDown Resetovat klienty, když Sentinel hlásí, že redis je objektivně mimo (výchozí hodnota true)
SentinelWorkerConnectTimeoutMs Maximální doba připojení pro Sentinel Worker (výchozí 100 ms)
SentinelWorkerSendTimeoutMs Max. čas odeslání TCP Socketu pro Sentinel Worker (výchozí 100 ms)
SentinelWorkerReceiveTimeoutMs Max. doba příjmu TCP Socket pro Sentinel Worker (výchozí 100 ms)

Konfigurovat servery Redis Sentinel #

Projekt redis config zjednodušuje nastavení a provoz vysoce dostupné víceuzlové konfigurace Redis Sentinel včetně start/stop skriptů pro okamžité nastavení minimální vysoce dostupné konfigurace Redis Sentinel na jednom (nebo více) serverech Windows, OSX nebo Linux. Tato konfigurace s jedním serverem/víceprocesy je ideální pro nastavení fungující konfigurace sentinelu na jediné vývojářské pracovní stanici nebo vzdáleném serveru.

Úložiště redis-config také obsahuje binární soubory MS OpenTech Windows redis a nevyžaduje žádnou instalaci softwaru.

Použití systému Windows #

Chcete-li spustit přiloženou konfiguraci Sentinel, naklonujte redis-config repo na server, na kterém jej chcete spustit:

git clone https://github.com/ServiceStack/redis-config.git

Poté spusťte 1x Master, 2x Slave a 3x Sentinel redis-servery s:

cd redis-config\sentinel3\windows
start-all.cmd

Instance zahájené vypnutím:

stop-all.cmd

Pokud spouštíte procesy redis lokálně na své dev pracovní stanici, minimální konfigurace pro připojení k běžícím instancím je pouze:

var sentinel = new RedisSentinel("127.0.0.1:26380");
container.Register(c => sentinel.Start());

Localhost vs. IP sítě #

Konfigurace hlídače předpokládá, že všechny instance redis běží lokálně na 127.0.0.1 . Pokud jej místo toho spouštíte na vzdáleném serveru, ke kterému mají mít přístup všichni vývojáři ve vaší síti, budete muset buď změnit IP adresu v *.conf soubory používat servery Network IP. Jinak můžete ponechat výchozí nastavení a použít RedisSentinel Funkce mapování IP adres pro transparentní mapování IP adres localhost na síťovou IP, ke které se může připojit každý počítač ve vaší síti.

Např. pokud toto běží na vzdáleném serveru s 10.0.0.9 Síťová IP, lze ji nakonfigurovat 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 – Click to Deploy Redis #

Nejjednodušší cloudová služba, kterou jsme našli a která dokáže okamžitě nastavit konfiguraci Redis Sentinel s více uzly, využívá funkci Redis kliknutím nasadit Google Cloud dostupnou z Google Cloud Console v části Deploy &Manage :

Klikněte na Nasadit vám umožní nakonfigurovat typ, velikost a umístění, kam chcete nasadit virtuální počítače Redis. Podívejte se na úplnou příručku Click to Deploy Redis, kde najdete průvodce nastavením a kontrolou vysoce dostupné konfigurace redis ve službě Google Cloud.

Změnit na použití RedisManagerPool #

Ve výchozím nastavení používá RedisSentinel PooledRedisClientManager , toto lze změnit tak, aby používal novější RedisManagerPool s:

sentinel.RedisManagerFactory = (master,replicas) => new RedisManagerPool(master);

Zahájit sledování Sentinelů #

Po konfiguraci můžete začít monitorovat servery Redis Sentinel a přistupovat k předem nakonfigurovanému správci klientů pomocí:

IRedisClientsManager redisManager = sentinel.Start();

Který, jako dříve, může být registrován ve vašem preferovaném MOV jako singleton instance:

container.Register<IRedisClientsManager>(c => sentinel.Start());

Konfigurovat servery Redis Sentinel #

Podívejte se na projekt redis config pro rychlý způsob, jak nastavit minimální vysoce dostupnou konfiguraci Redis Sentinel včetně start/stop skriptů pro okamžité spuštění více instancí redis na jednom (nebo více) serverech Windows, OSX nebo Linux.

Statistiky Redis #

Můžete použít RedisStats třídy pro viditelnost a introspekci do vašich běžících instancí. Wiki Redis Stats uvádí dostupné statistiky.

Automatické opakování #

Chcete-li zlepšit odolnost klientských připojení, RedisClient transparentně zopakuje neúspěšné operace Redis kvůli výjimkám Socket a I/O v exponenciálním stažení počínaje 10 ms až do RetryTimeout 10 000 ms . Tyto výchozí hodnoty lze vyladit pomocí:

RedisConfig.DefaultRetryTimeout = 10000;
RedisConfig.BackOffMultiplier = 10;

  1. Jak bezpečné je ukládat relace s Redis?

  2. Jak přidat json do vnořeného pole mongodb dokumentu pomocí Spring?

  3. Nainstalujte Memcached na Ubuntu 16.04

  4. Vlastní deserializace