Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Uso do ServiceStack.Redis.Sentinel


Você só deve fornecer o host do Redis Sentinel Server para RedisSentinel à medida que obtém a lista ativa de outros servidores redis mestre/escravo do host do Sentinel.

Algumas mudanças no RedisSentinel foram adicionados recentemente na última v4.0.37 que agora está disponível no MyGet, que inclui registro extra e retornos de chamada de eventos do Redis Sentinel. A nova v4.0.37 API se parece com:
var sentinel = new RedisSentinel(sentinelHost, masterName);

Iniciar o RedisSentinel se conectará ao Host do Sentinel e retornará um RedisClientManager pré-configurado (ou seja, pool de conexão redis) com o
var redisManager = sentinel.Start();

Que você pode então registrar no COI com:
container.Register<IRedisClientsManager>(redisManager);

O RedisSentinel deve então ouvir as alterações mestre/escravo dos hosts do Sentinel e fazer failover do redisManager adequadamente. As conexões existentes no pool são então descartadas e substituídas por um novo pool para os hosts recém-configurados. Quaisquer conexões ativas fora do pool lançarão exceções de conexão se usadas novamente, na próxima vez que o RedisClient for recuperado do pool, ele será configurado com os novos hosts.

Retornos de chamada e registro


Aqui está um exemplo de como você pode usar os novos retornos de chamada para analisar os eventos do 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);
    },                
};

O log desses eventos também pode ser habilitado configurando o Logging no ServiceStack:
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);

Há também um FailoverToSentinelHosts() explícito adicional que pode ser usado para forçar o RedisSentinel para re-procurar e fazer failover para os hosts mestre/escravo mais recentes, por exemplo:
var sentinelInfo = sentinel.FailoverToSentinelHosts();

Os novos hosts estão disponíveis no sentnelInfo retornado:
"Failed over to read/write: {0}, read-only: {1}".Print(
    sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);