Redis
 sql >> Database >  >> NoSQL >> Redis

Utilizzo di ServiceStack.Redis.Sentinel

Dovresti fornire l'host del server Redis Sentinel solo a RedisSentinel in quanto ottiene l'elenco attivo di altri server redis master/slave dall'host Sentinel.

Alcune modifiche a RedisSentinel sono stati aggiunti di recente nell'ultima v4.0.37 che è ora disponibile su MyGet che include registrazione extra e callback degli eventi Redis Sentinel. La nuova v4.0.37 L'API è simile a:

var sentinel = new RedisSentinel(sentinelHost, masterName);

L'avvio di RedisSentinel si connetterà a Sentinel Host e restituirà un RedisClientManager preconfigurato (ovvero un pool di connessioni Redis) con il

attivo
var redisManager = sentinel.Start();

Con cui puoi quindi iscriverti al CIO con:

container.Register<IRedisClientsManager>(redisManager);

Il RedisSentinel dovrebbe quindi ascoltare le modifiche master/slave dagli host Sentinel e eseguire il failover di redisManager di conseguenza. Le connessioni esistenti nel pool vengono quindi eliminate e sostituite con un nuovo pool per gli host appena configurati. Eventuali connessioni attive al di fuori del pool genereranno eccezioni di connessione se utilizzate di nuovo, la prossima volta che RedisClient verrà recuperato dal pool verrà configurato con i nuovi host.

Richiamate e registrazione

Ecco un esempio di come utilizzare i nuovi callback per esaminare gli eventi 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 registrazione di questi eventi può essere abilitata anche configurando la registrazione in ServiceStack:

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

C'è anche un ulteriore esplicito FailoverToSentinelHosts() che può essere utilizzato per forzare RedisSentinel per eseguire nuovamente la ricerca e il failover sugli host master/slave più recenti, ad esempio:

var sentinelInfo = sentinel.FailoverToSentinelHosts();

I nuovi host sono disponibili nella sentinelInfo restituita:

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