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

Utilisation de ServiceStack.Redis.Sentinel

Vous ne devez fournir l'hôte du serveur Redis Sentinel qu'à RedisSentinel car il obtient la liste active des autres serveurs redis maître/esclave de l'hôte Sentinel.

Quelques changements à RedisSentinel ont été récemment ajoutés dans la dernière v4.0.37 qui est maintenant disponible sur MyGet qui inclut une journalisation supplémentaire et des rappels d'événements Redis Sentinel. La nouvelle v4.0.37 L'API ressemble à :

var sentinel = new RedisSentinel(sentinelHost, masterName);

Le démarrage de RedisSentinel se connectera à l'hôte Sentinel et renverra un RedisClientManager préconfiguré (c'est-à-dire un pool de connexions redis) avec le

actif
var redisManager = sentinel.Start();

Avec lequel vous pourrez ensuite vous inscrire au CIO :

container.Register<IRedisClientsManager>(redisManager);

Le RedisSentinel devrait ensuite écouter les modifications maître/esclave des hôtes Sentinel et basculer le redisManager par conséquent. Les connexions existantes dans le pool sont ensuite supprimées et remplacées par un nouveau pool pour les hôtes nouvellement configurés. Toutes les connexions actives en dehors du pool lèveront des exceptions de connexion si elles sont réutilisées, la prochaine fois que RedisClient sera récupéré du pool, il sera configuré avec les nouveaux hôtes.

Rappels et journalisation

Voici un exemple de la façon dont vous pouvez utiliser les nouveaux rappels pour analyser les événements RedisServer :

var sentinel = new RedisSentinel(sentinelHost, masterName)
{
    OnFailover = manager => 
    {
        "Redis Managers were Failed Over to new hosts".Print();
    },
    OnWorkerError = ex =>
    {
        "Worker error: {0}".Print(ex);
    },
    OnSentinelMessageReceived = (channel, msg) =>
    {
        "Received '{0}' on channel '{1}' from Sentinel".Print(channel, msg);
    },                
};

La journalisation de ces événements peut également être activée en configurant la journalisation dans ServiceStack :

LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);

Il y a aussi un FailoverToSentinelHosts() explicite supplémentaire qui peut être utilisé pour forcer RedisSentinel pour effectuer une nouvelle recherche et basculer vers les derniers hôtes maître/esclave, par exemple :

var sentinelInfo = sentinel.FailoverToSentinelHosts();

Les nouveaux hôtes sont disponibles dans le sentinelInfo retourné :

"Failed over to read/write: {0}, read-only: {1}".Print(
    sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);