O Redis Sentinel é a recomendação oficial para executar uma configuração Redis altamente disponível, executando vários processos redis sentinela adicionais para monitorar ativamente instâncias mestre e escrava redis existentes, garantindo que cada uma delas funcione conforme o esperado. Se por consenso for determinado que o mestre não está mais disponível, ele fará o failover automaticamente e promoverá um dos escravos replicados como o novo mestre. Os sentinelas também mantêm uma lista oficial de instâncias redis disponíveis, fornecendo aos clientes um repositório central para descobrir instâncias disponíveis às quais eles podem se conectar.
O suporte para Redis Sentinel está disponível com o
RedisSentinel
classe que escuta os Sentinels disponíveis para obter sua lista de instâncias mestre, escrava e outras instâncias de redis de sentinela disponíveis que ele usa para configurar e manter os Redis Client Managers, iniciando quaisquer failovers à medida que são relatados. Uso #
Para usar o novo suporte do Sentinel, em vez de preencher os Redis Client Managers com a string de conexão das instâncias master e slave, você deve criar um único
RedisSentinel
instância configurada com a string de conexão do Redis Sentinels em execução:var sentinelHosts = new[]{ "sentinel1", "sentinel2:6390", "sentinel3" };
var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");
Isso mostra um exemplo típico de configuração de um
RedisSentinel
que faz referência a 3 hosts sentinela (ou seja, o número mínimo para uma configuração altamente disponível que pode sobreviver a qualquer falha de nó). Também está configurado para ver o mymaster
conjunto de configuração (o grupo mestre padrão). INFORMAÇÕES
O Redis Sentinels pode monitorar mais de 1 grupo mestre/escravo, cada um com um nome de grupo mestre diferente.
A porta padrão para sentinelas é 26379 (quando não especificado) e como o RedisSentinel pode descobrir automaticamente outros sentinelas, a configuração mínima necessária é apenas:
var sentinel = new RedisSentinel("sentinel1");
INFORMAÇÕES
A verificação e a descoberta automática de outros Sentinels podem ser desabilitadas com
ScanForOtherSentinels=false
Comece a monitorar os Sentinels #
Uma vez configurado, você pode começar a monitorar os servidores Redis Sentinel e acessar o gerenciador de clientes pré-configurado com:
IRedisClientsManager redisManager = sentinel.Start();
Que, como antes, pode ser registrado em seu COI preferido como um singleton instância:
container.Register<IRedisClientsManager>(c => sentinel.Start());
Configuração avançada do Sentinel #
RedisSentinel por padrão gerencia um
PooledRedisClientManager
configurado instância que resolve os dois clientes mestres do Redis para leitura/gravação GetClient()
e escravos para somente leitura GetReadOnlyClient()
APIs. Isso pode ser alterado para usar o
RedisManagerPool
mais recente com:sentinel.RedisManagerFactory = (master,slaves) => new RedisManagerPool(master);
String de conexão Redis personalizada #
O host com o qual o RedisSentinel está configurado se aplica apenas a esse Host do Sentinel, você ainda pode usar a flexibilidade das Strings de conexão do Redis para configurar os clientes Redis individuais especificando um
HostFilter
personalizado :sentinel.HostFilter = host => "{0}?db=1&RetryTimeout=5000".Fmt(host);
Isso retornará clientes configurados para usar o banco de dados 1 e um tempo limite de repetição de 5 segundos (usado no novo recurso de repetição automática).
Outra configuração do RedisSentinel #
Embora o acima abranja a configuração popular do Sentinel que normalmente seria usada, quase todos os aspectos do
RedisSentinel
comportamento é personalizável com a configuração abaixo:OnSentinelMessageReceived | Disparado quando o trabalhador do Sentinel recebe uma mensagem da Assinatura do Sentinel |
Em Failover | Disparado quando o Sentinel faz failover do Redis Client Manager para um novo mestre |
OnWorkerError | Disparado quando a conexão do Redis Sentinel Worker falha |
IpAddressMap | Mapear os IPs internos do host redis retornados pelo Sentinels para seu IP externo |
ScanForOtherSentinels | Se verificar rotineiramente outros hosts sentinela (padrão true) |
AtualizarSentinelHostsAfter | Qual intervalo para verificar outros hosts sentinela (padrão 10 minutos) |
Espera entre hosts com falha | Quanto tempo esperar após a falha antes de conectar-se à próxima instância do redis (padrão 250ms) |
MaxWaitBetweenFailedHosts | Quanto tempo para tentar conectar-se novamente aos hosts antes de lançar (padrão 60s) |
WaitBeforeForcingMasterFailover | Quanto tempo após tentativas consecutivas com falha para forçar o failover (padrão 60 segundos) |
ResetWhenSubjectivelyDown | Redefinir clientes quando o Sentinel relata que o redis está subjetivamente inativo (padrão true) |
ResetWhenObjectivelyDown | Redefinir clientes quando o Sentinel relata que o redis está objetivamente inativo (padrão true) |
SentinelWorkerConnectTimeoutMs | O tempo máximo de conexão para o Sentinel Worker (padrão 100 ms) |
SentinelWorkerSendTimeoutMs | Tempo máximo de envio de soquete TCP para Sentinel Worker (padrão 100 ms) |
SentinelWorkerReceiveTimeoutMs | Tempo máximo de recebimento do soquete TCP para o Sentinel Worker (padrão 100ms) |
Configurar servidores Redis Sentinel #
O projeto de configuração do redis simplifica a configuração e a execução de uma configuração do Redis Sentinel de vários nós altamente disponível, incluindo scripts de início/parada para configurar instantaneamente a configuração mínima do Redis Sentinel altamente disponível em um único (ou vários) servidores Windows, OSX ou Linux. Essa configuração de servidor único/vários processos é ideal para definir uma configuração sentinela funcional em uma única estação de trabalho de desenvolvimento ou servidor remoto.
O repositório redis-config também inclui os binários redis do MS OpenTech Windows e não requer nenhuma instalação de software.
Uso do Windows #
Para executar a configuração do Sentinel incluída, clone o repositório redis-config no servidor em que deseja executá-lo:
git clone https://github.com/ServiceStack/redis-config.git
Em seguida, inicie 1x Master, 2x Slaves e 3x Redis-servidores Sentinel com:
cd redis-config\sentinel3\windows
start-all.cmd
Desligar instâncias iniciadas:
stop-all.cmd
Se você estiver executando os processos redis localmente em sua estação de trabalho dev, a configuração mínima para se conectar às instâncias em execução é apenas:
var sentinel = new RedisSentinel("127.0.0.1:26380");
container.Register(c => sentinel.Start());
Localhost vs IP de rede #
A configuração do sentinela assume que todas as instâncias do redis estão sendo executadas localmente em 127.0.0.1 . Se você estiver executando-o em um servidor remoto que deseja que todos os desenvolvedores em sua rede possam acessar, você precisará alterar o endereço IP no
*.conf
arquivos para usar o IP de rede dos servidores. Caso contrário, você pode deixar os padrões e usar o RedisSentinel
Recurso de mapa de endereço IP para mapear de forma transparente os IPs do host local para o IP da rede que cada computador em sua rede pode se conectar. Por exemplo. se estiver sendo executado em um servidor remoto com um 10.0.0.9 IP de rede, pode ser configurado com:
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 - Clique para implantar o Redis #
O serviço de nuvem mais fácil que descobrimos que pode configurar instantaneamente uma configuração do Sentinel de vários nós do Redis é usar o recurso de clique para implantar Redis do Google Cloud disponível no Console do Google Cloud em Implantar e gerenciar :
Clicando em Implantar O botão permitirá que você configure o tipo, tamanho e local onde deseja implantar as VMs do Redis. Consulte o guia completo do Click to Deploy Redis para obter um passo a passo sobre como configurar e inspecionar uma configuração de redis altamente disponível no Google Cloud.
Altere para usar o RedisManagerPool #
Por padrão, o RedisSentinel usa um
PooledRedisClientManager
, isso pode ser alterado para usar o RedisManagerPool
mais recente com:sentinel.RedisManagerFactory = (master,replicas) => new RedisManagerPool(master);
Iniciar o monitoramento dos Sentinels #
Uma vez configurado, você pode começar a monitorar os servidores Redis Sentinel e acessar o gerenciador de clientes pré-configurado com:
IRedisClientsManager redisManager = sentinel.Start();
Que, como antes, pode ser registrado em seu COI preferido como um singleton instância:
container.Register<IRedisClientsManager>(c => sentinel.Start());
Configurar servidores Redis Sentinel #
Consulte o projeto de configuração do redis para obter uma maneira rápida de configurar a configuração mínima altamente disponível do Redis Sentinel, incluindo scripts de início/parada para executar instantaneamente várias instâncias do redis em um único (ou vários) servidores Windows, OSX ou Linux.
Estatísticas do Redis #
Você pode usar o
RedisStats
class para visibilidade e introspecção em suas instâncias em execução. O wiki Redis Stats lista as estatísticas disponíveis. Repetições automáticas #
Para melhorar a resiliência das conexões do cliente,
RedisClient
repetirá de forma transparente as operações Redis com falha devido a exceções de soquete e E/S em uma retirada exponencial a partir de 10ms até o RetryTimeout
de 10.000 ms . Esses padrões podem ser ajustados com:RedisConfig.DefaultRetryTimeout = 10000;
RedisConfig.BackOffMultiplier = 10;