Redis
 sql >> Base de données >  >> NoSQL >> Redis

Redis Sentinelle

Redis Sentinel est la recommandation officielle pour exécuter une configuration Redis hautement disponible en exécutant un certain nombre de processus sentinelles Redis supplémentaires pour surveiller activement les instances redis maître et esclave existantes en s'assurant qu'elles fonctionnent chacune comme prévu. Si, par consensus, il est déterminé que le maître n'est plus disponible, il bascule automatiquement et promeut l'un des esclaves répliqués en tant que nouveau maître. Les sentinelles maintiennent également une liste faisant autorité des instances Redis disponibles, fournissant aux clients un référentiel central pour découvrir les instances disponibles auxquelles ils peuvent se connecter.

La prise en charge de Redis Sentinel est disponible avec RedisSentinel classe qui écoute les Sentinelles disponibles pour obtenir sa liste d'instances redis maître, esclave et autres sentinelles disponibles qu'elle utilise pour configurer et maintenir les gestionnaires de clients Redis, initiant les basculements dès qu'ils sont signalés.

Numéro d'utilisation

Pour utiliser la nouvelle prise en charge de Sentinel, au lieu de remplir les gestionnaires de clients Redis avec la chaîne de connexion des instances maître et esclave, vous devez créer un seul RedisSentinel instance configurée avec la chaîne de connexion des Sentinelles Redis en cours d'exécution :

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

Ceci montre un exemple typique de configuration d'un RedisSentinel qui fait référence à 3 hôtes sentinelles (c'est-à-dire le nombre minimum pour une configuration hautement disponible qui peut survivre à toute défaillance de nœud). Il est également configuré pour regarder le mymaster jeu de configuration (le groupe maître par défaut).

INFORMATIONS

Redis Sentinels peut surveiller plus d'un groupe maître/esclave, chacun avec un nom de groupe maître différent.

Le port par défaut pour les sentinelles est 26379 (lorsqu'il n'est pas spécifié) et comme RedisSentinel peut découvrir automatiquement d'autres sentinelles, la configuration minimale requise est juste :

var sentinel = new RedisSentinel("sentinel1");

INFORMATIONS

L'analyse et la découverte automatique d'autres Sentinels peuvent être désactivées avec ScanForOtherSentinels=false

Commencer à surveiller les Sentinelles #

Une fois configuré, vous pouvez commencer à surveiller les serveurs Redis Sentinel et accéder au gestionnaire de clients préconfiguré avec :

IRedisClientsManager redisManager = sentinel.Start();

Qui, comme auparavant, peut être enregistré dans votre IOC préféré en tant que singleton instance :

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

Configuration sentinelle avancée #

RedisSentinel gère par défaut un PooledRedisClientManager configuré instance qui résout les deux clients maîtres Redis pour la lecture/écriture GetClient() et esclaves pour lecture seule GetReadOnlyClient() API.

Cela peut être modifié pour utiliser le nouveau RedisManagerPool avec :

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

Chaîne de connexion Redis personnalisée #

L'hôte avec lequel RedisSentinel est configuré s'applique uniquement à cet hôte Sentinel, vous pouvez toujours utiliser la flexibilité des chaînes de connexion Redis pour configurer les clients Redis individuels en spécifiant un HostFilter personnalisé :

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

Cela renverra les clients configurés pour utiliser la base de données 1 et un délai de relance de 5 secondes (utilisé dans la nouvelle fonctionnalité de relance automatique).

Autre numéro de configuration RedisSentinel

Alors que ce qui précède couvre la configuration Sentinel populaire qui serait généralement utilisée, presque tous les aspects de RedisSentinel le comportement est personnalisable avec la configuration ci-dessous :

OnSentinelMessageReceived Lancé lorsque l'agent Sentinel reçoit un message de l'abonnement Sentinel
OnFailover Déclenchement lorsque Sentinel bascule Redis Client Manager vers un nouveau maître
OnWorkerError Déclenchement lorsque la connexion Redis Sentinel Worker échoue
IpAddressMap Mappez les adresses IP internes de l'hôte redis renvoyées par Sentinels à son adresse IP externe
ScanForOtherSentinels S'il faut rechercher régulièrement d'autres hôtes sentinelles (vrai par défaut)
Actualiser SentinelHostsAprès À quel intervalle rechercher d'autres hôtes sentinelles (10 minutes par défaut)
WaitBetweenFailedHost Combien de temps attendre après un échec avant de se connecter à la prochaine instance redis (250 ms par défaut)
MaxWaitBetweenFailedHosts Combien de temps faut-il réessayer de se connecter aux hôtes avant de lancer (par défaut 60s)
WaitBeforeForcingMasterFailover Combien de temps après des tentatives infructueuses consécutives pour forcer le basculement (60 s par défaut)
Reset WhenSubjectivelyDown Réinitialiser les clients lorsque Sentinel signale que redis est subjectivement en panne (vrai par défaut)
ResetWhenObjectivelyDown Réinitialiser les clients lorsque Sentinel signale que redis est objectivement en panne (vrai par défaut)
SentinelWorkerConnectTimeoutMs Le temps de connexion maximum pour Sentinel Worker (100 ms par défaut)
SentinelWorkerSendTimeoutMs Temps d'envoi maximal du socket TCP pour Sentinel Worker (100 ms par défaut)
SentinelWorkerReceiveTimeoutMs Durée maximale de réception du socket TCP pour Sentinel Worker (100 ms par défaut)

Configurer les serveurs Redis Sentinel #

Le projet de configuration Redis simplifie la configuration et l'exécution d'une configuration Redis Sentinel multi-nœuds hautement disponible, y compris des scripts de démarrage/arrêt pour configurer instantanément la configuration minimale hautement disponible de Redis Sentinel sur un (ou plusieurs) serveurs Windows, OSX ou Linux. Cette configuration à serveur unique/multiprocessus est idéale pour mettre en place une configuration sentinelle fonctionnelle sur un seul poste de travail de développement ou un serveur distant.

Le référentiel redis-config inclut également les binaires redis MS OpenTech Windows et ne nécessite aucune installation de logiciel.

Numéro d'utilisation de Windows

Pour exécuter la configuration Sentinel incluse, clonez le référentiel redis-config sur le serveur sur lequel vous souhaitez l'exécuter :

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

Ensuite, démarrez 1x Master, 2x Slaves et 3x Sentinel redis-servers avec :

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

Arrêter les instances démarrées :

stop-all.cmd

Si vous exécutez les processus Redis localement sur votre poste de travail de développement, la configuration minimale pour vous connecter aux instances en cours d'exécution est simplement :

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

Numéro d'adresse IP de l'hôte local par rapport au réseau

La configuration sentinelle suppose que toutes les instances Redis s'exécutent localement sur 127.0.0.1 . Si vous l'exécutez plutôt sur un serveur distant auquel vous voulez que tous les développeurs de votre réseau puissent accéder, vous devrez soit changer l'adresse IP dans le *.conf fichiers pour utiliser l'adresse IP du réseau des serveurs. Sinon, vous pouvez laisser les valeurs par défaut et utiliser le RedisSentinel Fonction de mappage d'adresses IP pour mapper de manière transparente les adresses IP de l'hôte local à l'adresse IP du réseau à laquelle chaque ordinateur de votre réseau peut se connecter.

Par exemple. s'il s'exécute sur un serveur distant avec un 10.0.0.9 IP réseau, il peut être configuré avec :

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 - Cliquez pour déployer Redis #

Le service cloud le plus simple que nous ayons trouvé qui puisse configurer instantanément une configuration multi-nœud-Redis Sentinel utilise la fonctionnalité Redis de déploiement en un clic de Google Cloud disponible à partir de Google Cloud Console sous Déployer et gérer :

Cliquez sur Déployer Le bouton vous permettra de configurer le type, la taille et l'emplacement où vous souhaitez déployer les machines virtuelles Redis. Consultez le guide complet Cliquer pour déployer Redis pour découvrir comment configurer et inspecter une configuration Redis hautement disponible sur Google Cloud.

Changer pour utiliser RedisManagerPool #

Par défaut, RedisSentinel utilise un PooledRedisClientManager , cela peut être modifié pour utiliser le nouveau RedisManagerPool avec :

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

Démarrer la surveillance des Sentinelles #

Une fois configuré, vous pouvez commencer à surveiller les serveurs Redis Sentinel et accéder au gestionnaire de clients préconfiguré avec :

IRedisClientsManager redisManager = sentinel.Start();

Qui, comme auparavant, peut être enregistré dans votre IOC préféré en tant que singleton instance :

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

Configurer les serveurs Redis Sentinel #

Voir le projet de configuration redis pour un moyen rapide de configurer la configuration minimale hautement disponible de Redis Sentinel, y compris des scripts de démarrage/arrêt pour exécuter instantanément plusieurs instances redis sur un seul (ou plusieurs) serveurs Windows, OSX ou Linux.

Numéro de statistiques Redis

Vous pouvez utiliser les RedisStats classe pour la visibilité et l'introspection dans vos instances en cours d'exécution. Le wiki Redis Stats répertorie les statistiques disponibles.

Numéro de tentatives automatiques

Pour améliorer la résilience des connexions client, RedisClient réessayera de manière transparente les opérations Redis ayant échoué en raison d'exceptions de socket et d'E/S dans un délai exponentiel à partir de 10 ms jusqu'au RetryTimeout de 10 000 ms . Ces valeurs par défaut peuvent être modifiées avec :

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