Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Redis Sentinel

Redis Sentinel ist die offizielle Empfehlung zum Ausführen einer hochverfügbaren Redis-Konfiguration, indem eine Reihe zusätzlicher Redis Sentinel-Prozesse ausgeführt werden, um vorhandene Redis-Master- und -Slave-Instanzen aktiv zu überwachen und sicherzustellen, dass sie alle wie erwartet funktionieren. Wenn durch Konsens festgestellt wird, dass der Master nicht mehr verfügbar ist, wird automatisch ein Failover durchgeführt und einer der replizierten Slaves als neuer Master hochgestuft. Die Sentinels führen auch eine maßgebliche Liste verfügbarer Redis-Instanzen, die Clients ein zentrales Repository zur Verfügung stellen, um verfügbare Instanzen zu finden, mit denen sie sich verbinden können.

Unterstützung für Redis Sentinel ist mit RedisSentinel verfügbar -Klasse, die auf die verfügbaren Sentinels hört, um ihre Liste verfügbarer Master-, Slave- und anderer Sentinel-Redis-Instanzen abzurufen, mit denen sie die Redis-Client-Manager konfiguriert und verwaltet, und alle Failover einleitet, sobald sie gemeldet werden.

Nutzungsnummer

Um die neue Sentinel-Unterstützung zu verwenden, würden Sie, anstatt die Redis-Client-Manager mit der Verbindungszeichenfolge der Master- und Slave-Instanzen zu füllen, ein einzelnes RedisSentinel erstellen Instanz konfiguriert mit der Verbindungszeichenfolge der laufenden Redis Sentinels:

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

Dies zeigt ein typisches Beispiel für die Konfiguration eines RedisSentinel die auf 3 Sentinel-Hosts verweist (d. h. die Mindestanzahl für ein hochverfügbares Setup, das jeden Knotenausfall überstehen kann). Es ist auch so konfiguriert, dass es sich mymaster ansieht Konfigurationssatz (die Standard-Master-Gruppe).

INFO

Redis Sentinels können mehr als 1 Master-/Slave-Gruppe überwachen, jede mit einem anderen Master-Gruppennamen.

Der Standardport für Sentinels ist 26379 (wenn nicht angegeben) und da RedisSentinel andere Sentinels automatisch erkennen kann, ist die erforderliche Mindestkonfiguration nur:

var sentinel = new RedisSentinel("sentinel1");

INFO

Das Scannen und automatische Erkennen anderer Sentinels kann mit ScanForOtherSentinels=false deaktiviert werden

Starten Sie die Überwachung von Sentinels #

Nach der Konfiguration können Sie mit der Überwachung der Redis Sentinel-Server beginnen und auf den vorkonfigurierten Client-Manager zugreifen mit:

IRedisClientsManager redisManager = sentinel.Start();

Welcher wie bisher in Ihrem bevorzugten IOC als Singleton registriert werden kann Beispiel:

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

Erweiterte Sentinel-Konfiguration #

RedisSentinel verwaltet standardmäßig einen konfigurierten PooledRedisClientManager -Instanz, die beide Master-Redis-Clients für Lese-/Schreibvorgänge GetClient() auflöst und Slaves für readonly GetReadOnlyClient() APIs.

Dies kann geändert werden, um den neueren RedisManagerPool zu verwenden mit:

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

Benutzerdefinierte Redis-Verbindungszeichenfolge #

Der Host, mit dem RedisSentinel konfiguriert ist, gilt nur für diesen Sentinel-Host. Sie können weiterhin die Flexibilität von Redis Connection Strings nutzen, um die einzelnen Redis-Clients zu konfigurieren, indem Sie einen benutzerdefinierten HostFilter angeben :

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

Dadurch werden Clients zurückgegeben, die für die Verwendung von Datenbank 1 und einem Wiederholungs-Timeout von 5 Sekunden konfiguriert sind (wird in der neuen Funktion „Automatische Wiederholung“ verwendet).

Andere RedisSentinel-Konfiguration #

Während das Obige die beliebte Sentinel-Konfiguration abdeckt, die normalerweise verwendet wird, wird fast jeder Aspekt von RedisSentinel behandelt Verhalten ist mit der folgenden Konfiguration anpassbar:

OnSentinelMessageReceived Wird ausgelöst, wenn der Sentinel-Arbeiter eine Nachricht vom Sentinel-Abonnement erhält
Bei Failover Wird ausgelöst, wenn Sentinel den Redis Client Manager auf einen neuen Master umschaltet
OnWorkerError Wird ausgelöst, wenn die Redis Sentinel Worker-Verbindung fehlschlägt
IpAddressMap Ordnen Sie interne Redis-Host-IPs, die von Sentinels zurückgegeben werden, seinen externen IPs zu
ScanForOtherSentinels Ob routinemäßig nach anderen Sentinel-Hosts gesucht werden soll (standardmäßig wahr)
RefreshSentinelHostsAfter In welchem ​​Intervall soll nach anderen Sentinel-Hosts gesucht werden (standardmäßig 10 Minuten)
WaitBetweenFailedHosts Wie lange nach einem Fehler gewartet werden soll, bevor eine Verbindung zur nächsten Redis-Instanz hergestellt wird (standardmäßig 250 ms)
MaxWaitBetweenFailedHosts Wie lange soll erneut versucht werden, eine Verbindung zu Hosts herzustellen, bevor ein Fehler ausgelöst wird (standardmäßig 60 Sekunden)
WaitBeforeForcingMasterFailover Wie lange nach aufeinanderfolgenden fehlgeschlagenen Versuchen, ein Failover zu erzwingen (Standard 60s)
ResetWhenSubjectivelyDown Setzen Sie Clients zurück, wenn Sentinel meldet, dass Redis subjektiv ausgefallen ist (Standardeinstellung wahr)
ResetWhenObjectivelyDown Setzen Sie Clients zurück, wenn Sentinel meldet, dass Redis objektiv ausgefallen ist (standardmäßig wahr)
SentinelWorkerConnectTimeoutMs Die maximale Verbindungszeit für Sentinel Worker (Standard 100 ms)
SentinelWorkerSendTimeoutMs Maximale TCP-Socket-Sendezeit für Sentinel Worker (Standard 100 ms)
SentinelWorkerReceiveTimeoutMs Max. TCP-Socket-Empfangszeit für Sentinel Worker (Standard 100 ms)

Redis Sentinel-Server konfigurieren #

Das redis config-Projekt vereinfacht das Einrichten und Ausführen einer hochverfügbaren Redis Sentinel-Konfiguration mit mehreren Knoten, einschließlich Start-/Stopp-Skripts zum sofortigen Einrichten der minimalen hochverfügbaren Redis Sentinel-Konfiguration auf einem einzelnen (oder mehreren) Windows-, OSX- oder Linux-Servern. Diese Single-Server/Multi-Process-Konfiguration ist ideal für die Einrichtung einer funktionierenden Sentinel-Konfiguration auf einer einzelnen Entwickler-Workstation oder einem Remote-Server.

Das Redis-Config-Repository enthält auch die Redis-Binärdateien von MS OpenTech Windows und erfordert keine Softwareinstallation.

Windows-Nutzungsnummer

Um die enthaltene Sentinel-Konfiguration auszuführen, klonen Sie das redis-config-Repository auf dem Server, auf dem Sie es ausführen möchten:

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

Starten Sie dann 1x Master, 2x Slaves und 3x Sentinel Redis-Server mit:

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

Gestartete Instanzen herunterfahren:

stop-all.cmd

Wenn Sie die Redis-Prozesse lokal auf Ihrer Entwicklungs-Workstation ausführen, ist die minimale Konfiguration zum Herstellen einer Verbindung zu den laufenden Instanzen einfach:

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

Localhost vs. Netzwerk-IP-Nummern

Die Sentinel-Konfiguration geht davon aus, dass alle Redis-Instanzen lokal auf 127.0.0.1 ausgeführt werden . Wenn Sie es stattdessen auf einem Remote-Server ausführen, auf den alle Entwickler in Ihrem Netzwerk zugreifen können sollen, müssen Sie entweder die IP-Adresse in der *.conf ändern Dateien, um die Netzwerk-IP des Servers zu verwenden. Andernfalls können Sie die Standardeinstellungen belassen und den RedisSentinel verwenden IP-Adresszuordnungsfunktion, um lokale Host-IPs transparent der Netzwerk-IP zuzuordnen, mit der sich jeder PC in Ihrem Netzwerk verbinden kann.

Z.B. wenn dieser auf einem entfernten Server mit 10.0.0.9 läuft Netzwerk-IP, kann konfiguriert werden mit:

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 #

Der einfachste Cloud-Dienst, den wir gefunden haben, der sofort eine Redis-Sentinel-Konfiguration mit mehreren Knoten einrichten kann, ist die Verwendung der Click-to-Deployment-Redis-Funktion von Google Cloud, die in der Google Cloud-Konsole unter Bereitstellen und Verwalten verfügbar ist :

Klicken Sie auf Bereitstellen Mit der Schaltfläche können Sie den Typ, die Größe und den Ort konfigurieren, an dem Sie die Redis-VMs bereitstellen möchten. Sehen Sie sich den vollständigen Click-to-Deploy-Leitfaden für Redis an, um eine Anleitung zum Einrichten und Prüfen einer hochverfügbaren Redis-Konfiguration in Google Cloud zu erhalten.

Änderung zur Verwendung von RedisManagerPool #

Standardmäßig verwendet RedisSentinel einen PooledRedisClientManager , kann dies geändert werden, um den neueren RedisManagerPool zu verwenden mit:

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

Starten Sie die Überwachung von Sentinels #

Nach der Konfiguration können Sie mit der Überwachung der Redis Sentinel-Server beginnen und auf den vorkonfigurierten Client-Manager zugreifen mit:

IRedisClientsManager redisManager = sentinel.Start();

Welcher wie bisher in Ihrem bevorzugten IOC als Singleton registriert werden kann Beispiel:

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

Redis Sentinel-Server konfigurieren #

Sehen Sie sich das Redis-Konfigurationsprojekt an, um schnell die minimale hochverfügbare Redis Sentinel-Konfiguration einzurichten, einschließlich Start-/Stopp-Skripts zum sofortigen Ausführen mehrerer Redis-Instanzen auf einem einzelnen (oder mehreren) Windows-, OSX- oder Linux-Servern.

Redis-Statistiken #

Sie können die RedisStats verwenden -Klasse für Sichtbarkeit und Selbstprüfung Ihrer laufenden Instanzen. Das Redis-Statistik-Wiki listet die verfügbaren Statistiken auf.

Automatische Wiederholungen #

Um die Belastbarkeit von Client-Verbindungen zu verbessern, RedisClient wird fehlgeschlagene Redis-Vorgänge aufgrund von Socket- und E/A-Ausnahmen in einem exponentiellen Backoff ab 10 ms transparent wiederholen bis zum RetryTimeout von 10000 ms . Diese Standardeinstellungen können angepasst werden mit:

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