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

Redis Sentinela


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;