sql >> Base de Datos >  >> NoSQL >> Redis

Uso de ServiceStack.Redis.Sentinel

Solo debe proporcionar el host del servidor Redis Sentinel a RedisSentinel ya que obtiene la lista activa de otros servidores redis maestro/esclavo del host Sentinel.

Algunos cambios en RedisSentinel se agregaron recientemente en la última v4.0.37 eso ahora está disponible en MyGet, que incluye registro adicional y devoluciones de llamada de eventos de Redis Sentinel. La nueva v4.0.37 La API se parece a:

var sentinel = new RedisSentinel(sentinelHost, masterName);

Al iniciar RedisSentinel, se conectará al host de Sentinel y devolverá un RedisClientManager preconfigurado (es decir, un grupo de conexiones redis) con el

activo
var redisManager = sentinel.Start();

Que luego puede registrarse en el COI con:

container.Register<IRedisClientsManager>(redisManager);

El RedisSentinel luego debe escuchar los cambios maestro/esclavo de los hosts de Sentinel y conmutar por error redisManager respectivamente. Luego, las conexiones existentes en el grupo se desechan y se reemplazan con un nuevo grupo para los hosts recién configurados. Todas las conexiones activas fuera del grupo generarán excepciones de conexión si se usan nuevamente, la próxima vez que se recupere RedisClient del grupo, se configurará con los nuevos hosts.

Devoluciones de llamada y registro

Este es un ejemplo de cómo puede usar las nuevas devoluciones de llamada para realizar una introspección de los eventos de 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);
    },                
};

El registro de estos eventos también se puede habilitar configurando el registro en ServiceStack:

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

También hay un FailoverToSentinelHosts() explícito adicional que se puede usar para forzar RedisSentinel para volver a buscar y conmutar por error a los hosts maestro/esclavo más recientes, por ejemplo:

var sentinelInfo = sentinel.FailoverToSentinelHosts();

Los nuevos hosts están disponibles en el sentinelInfo devuelto:

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