Redis Sentinel is de officiële aanbeveling voor het uitvoeren van een Redis-configuratie met hoge beschikbaarheid door een aantal extra redis-sentinelprocessen uit te voeren om bestaande redis-master- en slave-instanties actief te bewaken en ervoor te zorgen dat ze allemaal werken zoals verwacht. Als bij consensus wordt vastgesteld dat de master niet langer beschikbaar is, wordt automatisch een failover uitgevoerd en wordt een van de gerepliceerde slaves als de nieuwe master gepromoveerd. De schildwachten houden ook een gezaghebbende lijst bij van beschikbare redis-instanties, zodat klanten een centrale opslagplaats hebben om beschikbare instanties te ontdekken waarmee ze verbinding kunnen maken.
Ondersteuning voor Redis Sentinel is beschikbaar met de RedisSentinel
class die naar de beschikbare Sentinels luistert om de lijst met beschikbare master-, slave- en andere sentinel-redis-instanties te vinden die het gebruikt om de Redis Client Managers te configureren en te onderhouden, waarbij eventuele failovers worden geïnitieerd zodra ze worden gerapporteerd.
Gebruik #
Om de nieuwe Sentinel-ondersteuning te gebruiken, zou u in plaats van de Redis Client Managers te vullen met de verbindingsreeks van de master- en slave-instanties een enkele RedisSentinel
maken instantie geconfigureerd met de verbindingsreeks van de draaiende Redis Sentinels:
var sentinelHosts = new[]{ "sentinel1", "sentinel2:6390", "sentinel3" };
var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");
Dit toont een typisch voorbeeld van het configureren van een RedisSentinel
die verwijst naar 3 sentinel-hosts (d.w.z. het minimumaantal voor een zeer beschikbare setup die elke uitval van een knooppunt kan overleven). Het is ook geconfigureerd om te kijken naar de mymaster
configuratieset (de standaard mastergroep).
INFO
Redis Sentinels kan meer dan 1 master/slavegroep bewaken, elk met een andere mastergroepnaam.
De standaardpoort voor schildwachten is 26379 (indien niet gespecificeerd) en aangezien RedisSentinel automatisch andere schildwachten kan ontdekken, is de minimaal vereiste configuratie slechts:
var sentinel = new RedisSentinel("sentinel1");
INFO
Scannen en automatisch detecteren van andere Sentinels kan worden uitgeschakeld met ScanForOtherSentinels=false
Begin met het monitoren van Sentinels #
Eenmaal geconfigureerd, kunt u beginnen met het bewaken van de Redis Sentinel-servers en toegang krijgen tot de vooraf geconfigureerde clientmanager met:
IRedisClientsManager redisManager = sentinel.Start();
Die net als voorheen kan worden geregistreerd in uw favoriete IOC als een singleton voorbeeld:
container.Register<IRedisClientsManager>(c => sentinel.Start());
Geavanceerde Sentinel-configuratie #
RedisSentinel beheert standaard een geconfigureerde PooledRedisClientManager
instantie die beide master Redis-clients oplost voor lezen/schrijven GetClient()
en slaves voor alleen-lezen GetReadOnlyClient()
API's.
Dit kan worden gewijzigd om de nieuwere RedisManagerPool
te gebruiken met:
sentinel.RedisManagerFactory = (master,slaves) => new RedisManagerPool(master);
Aangepaste Redis-verbindingstekenreeks #
De host waarmee de RedisSentinel is geconfigureerd, is alleen van toepassing op die Sentinel-host. U kunt nog steeds de flexibiliteit van Redis Connection Strings gebruiken om de individuele Redis-clients te configureren door een aangepast HostFilter
op te geven. :
sentinel.HostFilter = host => "{0}?db=1&RetryTimeout=5000".Fmt(host);
Hiermee worden clients geretourneerd die zijn geconfigureerd om Database 1 te gebruiken en een time-out voor opnieuw proberen van 5 seconden (gebruikt in de nieuwe functie voor automatisch opnieuw proberen).
Andere RedisSentinel-configuratie #
Hoewel het bovenstaande de populaire Sentinel-configuratie dekt die normaal gesproken wordt gebruikt, is bijna elk aspect van RedisSentinel
gedrag kan worden aangepast met de onderstaande configuratie:
OnSentinelMessageReceived | Ontslagen wanneer de Sentinel-werker een bericht ontvangt van het Sentinel-abonnement |
OnFailover | Geactiveerd wanneer Sentinel faalt over Redis Client Manager naar een nieuwe master |
OnWorkerError | Geactiveerd wanneer de Redis Sentinel Worker-verbinding mislukt |
IpAddressMap | Maak interne herdis-host-IP's die door Sentinels zijn geretourneerd aan zijn externe IP-adres |
ScanForOtherSentinels | Of routinematig naar andere sentinel-hosts moet worden gescand (standaard waar) |
VernieuwSentinelHostsAfter | Welke interval moet worden gescand op andere sentinel-hosts (standaard 10 minuten) |
WaitBetweenFailedHosts | Hoe lang te wachten na een fout voordat verbinding wordt gemaakt met de volgende redis-instantie (standaard 250 ms) |
MaxWaitBetweenFailedHosts | Hoe lang moet ik opnieuw proberen verbinding te maken met hosts voordat je gooit (standaard 60s) |
WaitBeforeForcingMasterFailover | Hoe lang na opeenvolgende mislukte pogingen om failover te forceren (standaard 60s) |
ResetWhenSubjectivelyDown | Cliënten resetten wanneer Sentinel meldt dat redis subjectief niet werkt (standaard waar) |
ResetWhenObjectivelyDown | Cliënten resetten wanneer Sentinel rapporteert dat redis objectief niet werkt (standaard waar) |
SentinelWorkerConnectTimeoutMs | De maximale verbindingstijd voor Sentinel Worker (standaard 100 ms) |
SentinelWorkerSendTimeoutMs | Max. TCP Socket-verzendtijd voor Sentinel Worker (standaard 100 ms) |
SentinelWorkerReceiveTimeoutMs | Max. TCP Socket-ontvangsttijd voor Sentinel Worker (standaard 100 ms) |
Configureer Redis Sentinel-servers #
Het redis-configuratieproject vereenvoudigt het opzetten en uitvoeren van een zeer beschikbare Redis Sentinel-configuratie met meerdere knooppunten, inclusief start/stop-scripts voor het onmiddellijk instellen van de minimaal beschikbare Redis Sentinel-configuratie op een enkele (of meerdere) Windows-, OSX- of Linux-servers. Deze configuratie met één server/meerdere processen is ideaal voor het opzetten van een werkende sentinel-configuratie op een enkel ontwikkelwerkstation of een externe server.
De redis-config repository bevat ook de MS OpenTech Windows redis binaries en vereist geen software-installatie.
Windows-gebruik #
Om de meegeleverde Sentinel-configuratie uit te voeren, kloont u de redis-config repo op de server waarop u deze wilt uitvoeren:
git clone https://github.com/ServiceStack/redis-config.git
Start vervolgens 1x Master, 2x Slaves en 3x Sentinel redis-servers met:
cd redis-config\sentinel3\windows
start-all.cmd
Afsluiten gestarte instanties:
stop-all.cmd
Als u de redis-processen lokaal op uw ontwikkelwerkstation uitvoert, is de minimale configuratie om verbinding te maken met de actieve instanties:
var sentinel = new RedisSentinel("127.0.0.1:26380");
container.Register(c => sentinel.Start());
Localhost versus netwerk-IP's #
De schildwachtconfiguratie gaat ervan uit dat alle redis-instanties lokaal worden uitgevoerd op 127.0.0.1 . Als u het in plaats daarvan uitvoert op een externe server waartoe u wilt dat alle ontwikkelaars in uw netwerk toegang hebben, moet u ofwel het IP-adres wijzigen in de *.conf
bestanden om de servers Network IP te gebruiken. Anders kunt u de standaardinstellingen laten staan en de RedisSentinel
. gebruiken IP Address Map-functie om localhost-IP's transparant toe te wijzen aan het netwerk-IP waarmee elke pc in uw netwerk verbinding kan maken.
bijv. als dit draait op een externe server met een 10.0.0.9 Netwerk-IP, het kan worden geconfigureerd met:
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 - Klik om Redis te implementeren #
De gemakkelijkste cloudservice die we hebben gevonden en waarmee direct een Redis Sentinel-configuratie met meerdere knooppunten kan worden ingesteld, is het gebruik van de klik om Redis-functie van Google Cloud te implementeren die beschikbaar is via de Google Cloud Console onder Deploy &Manage :
Klikken op Implementeren knop laat u het type, de grootte en de locatie configureren waar u de Redis VM's wilt implementeren. Bekijk de volledige Click to Deploy Redis-handleiding voor uitleg over het instellen en inspecteren van een zeer beschikbare redis-configuratie op Google Cloud.
Wijzigen om RedisManagerPool te gebruiken #
RedisSentinel gebruikt standaard een PooledRedisClientManager
, dit kan worden gewijzigd om de nieuwere RedisManagerPool
te gebruiken met:
sentinel.RedisManagerFactory = (master,replicas) => new RedisManagerPool(master);
Begin met het monitoren van Sentinels #
Eenmaal geconfigureerd, kunt u beginnen met het bewaken van de Redis Sentinel-servers en toegang krijgen tot de vooraf geconfigureerde clientmanager met:
IRedisClientsManager redisManager = sentinel.Start();
Die net als voorheen kan worden geregistreerd in uw favoriete IOC als een singleton voorbeeld:
container.Register<IRedisClientsManager>(c => sentinel.Start());
Redis Sentinel-servers configureren #
Bekijk het redis-configuratieproject voor een snelle manier om de minimaal beschikbare Redis Sentinel-configuratie in te stellen, inclusief start/stop-scripts voor het direct uitvoeren van meerdere redis-instanties op een enkele (of meerdere) Windows-, OSX- of Linux-servers.
Redis-statistieken #
U kunt de RedisStats
. gebruiken class voor zichtbaarheid en introspectie in uw actieve instanties. De Redis Stats-wiki geeft een overzicht van de beschikbare statistieken.
Automatische nieuwe pogingen #
Om de veerkracht van clientverbindingen te verbeteren, RedisClient
zal op transparante wijze opnieuw proberen mislukte Redis-bewerkingen vanwege socket- en I/O-uitzonderingen in een exponentiële uitstel vanaf 10ms tot de RetryTimeout
van 10000ms . Deze standaardinstellingen kunnen worden aangepast met:
RedisConfig.DefaultRetryTimeout = 10000;
RedisConfig.BackOffMultiplier = 10;