Configurando um Cluster Redis 7.4 de Alta Disponibilidade com Sentinel no Docker

Configurando um Cluster Redis 7.4 de Alta Disponibilidade com Sentinel no Docker

Este guia detalha o processo de implantação de um cluster Redis 7.4 com alta disponibilidade, utilizando o mecanismo Sentinel, em um ambiente Docker. A arquitetura consiste em um servidor principal (master) e duas réplicas (slaves), distribuídos em três servidores Linux distintos, sem o uso do Docker Compose.

Preparações Essenciais

Requisitos de Servidor

  • Três máquinas Linux (físicas ou virtuais).
  • Instalação do Docker em cada servidor.
  • Conectividade de rede entre os servidores.
  • Liberação das seguintes portas:
    • Redis: 6379
    • Sentinel: 26379

Configuração da Rede Docker

Para permitir a comunicação entre os contêineres Redis e Sentinel, é necessário criar uma rede interna no Docker. Execute o comando abaixo em um dos servidores para criar a rede de ponte:

docker network create rede-redis-ha

Todos os contêineres do cluster serão conectados a esta rede rede-redis-ha.

Implantação do Cluster Redis (Mestre-Réplica)

1. Configuração do Nodo Principal

No primeiro servidor, inicie o contêiner do Redis principal:

docker run -d --name redis-principal --net rede-redis-ha \
-p 6379:6379 \
-v /opt/redis/dados_principal:/data \
redis:7.4-alpine \
redis-server --appendonly yes --requirepass minha_senha_secreta

Explicação dos parâmetros:

  • --net rede-redis-ha: Conecta o contêiner à rede Docker criada.
  • -p 6379:6379: Mapeia a porta do contêiner para a porta do host.
  • -v /opt/redis/dados_principal:/data: Garante a persistência dos dados do Redis em um volume local.
  • --appendonly yes: Ativa a persistência AOF (Append Only File) para maior segurança dos dados.
  • --requirepass minha_senha_secreta: Define a senha de acesso ao Redis.

2. Configuração dos Nodos de Réplica

Nos segundo e terceiro servidores, execute os comandos a seguir para iniciar os contêineres das réplicas:

# Servidor da primeira réplica
docker run -d --name redis-replica1 --net rede-redis-ha \
-p 6379:6379 \
-v /opt/redis/dados_replica1:/data \
redis:7.4-alpine \
redis-server --appendonly yes --requirepass minha_senha_secreta \
--slaveof redis-principal 6379 --masterauth minha_senha_secreta

# Servidor da segunda réplica
docker run -d --name redis-replica2 --net rede-redis-ha \
-p 6379:6379 \
-v /opt/redis/dados_replica2:/data \
redis:7.4-alpine \
redis-server --appendonly yes --requirepass minha_senha_secreta \
--slaveof redis-principal 6379 --masterauth minha_senha_secreta

É crucial notar que os contêineres das réplicas utilizam --slaveof redis-principal 6379 para se conectar ao nodo principal e --masterauth minha_senha_secreta para autenticação, usando a mesma senha definida no principal.

3. Verificação do Estado de Replicação

No servidor que hospeda o nodo principal, execute este comando para inspecionar o status da replicação:

docker exec -it redis-principal redis-cli -a minha_senha_secreta INFO replication

A saída esperada deve indicar role:master e listar as duas réplicas conectadas.

Implantação do Cluster Redis Sentinel

1. Criação do Arquivo de Configuração do Sentinel

Em cada um dos três servidores, crie um arquivo sentinel.conf com o seguinte conteúdo:

port 26379
sentinel monitor meucluster redis-principal 6379 2
sentinel auth-pass meucluster minha_senha_secreta
sentinel down-after-milliseconds meucluster 5000
sentinel parallel-syncs meucluster 1
sentinel failover-timeout meucluster 10000

Parâmetros importantes:

  • sentinel monitor meucluster redis-principal 6379 2: Instruções para o Sentinel monitorar o nodo principal chamado meucluster, localizado em redis-principal:6379. Um mínimo de 2 Sentinels devem concordar sobre a inatividade do principal para iniciar um failover.
  • sentinel auth-pass meucluster minha_senha_secreta: Senha para autenticação no Redis.
  • sentinel down-after-milliseconds meucluster 5000: Define o tempo (em milissegundos) para que um nodo seja considerado offline se não responder.
  • sentinel parallel-syncs meucluster 1: O número de réplicas que o Sentinel pode reconfigurar para sincronizar com o novo principal durante um failover.
  • sentinel failover-timeout meucluster 10000: Tempo limite para o processo de failover.

2. Lançamento dos Contêineres Sentinel

Em cada servidor, inicie um contêiner Sentinel. Certifique-se de substituir /caminho/para/seu/sentinel.conf pelo caminho real do arquivo no seu host.

# No primeiro servidor
docker run -d --name redis-sentinel1 --net rede-redis-ha \
-p 26379:26379 \
-v /caminho/para/seu/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
redis:7.4-alpine \
redis-sentinel /usr/local/etc/redis/sentinel.conf

# No segundo servidor
docker run -d --name redis-sentinel2 --net rede-redis-ha \
-p 26379:26379 \
-v /caminho/para/seu/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
redis:7.4-alpine \
redis-sentinel /usr/local/etc/redis/sentinel.conf

# No terceiro servidor
docker run -d --name redis-sentinel3 --net rede-redis-ha \
-p 26379:26379 \
-v /caminho/para/seu/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
redis:7.4-alpine \
redis-sentinel /usr/local/etc/redis/sentinel.conf

3. Verificação do Status do Sentinel

Para confirmar o funcionamento do cluster Sentinel, execute o seguinte comando em qualquer um dos servidores:

docker exec -it redis-sentinel1 redis-cli -p 26379 INFO sentinel

A saída deve exibir informações sobre o principal monitorado e a contagem de nodos Sentinel ativos.

Testando a Recuperação Automática (Failover)

1. Simulação de Falha do Nodo Principal

Para testar o failover, pare o contêiner do Redis principal no seu servidor:

docker stop redis-principal

2. Observando o Failover

Após alguns segundos (aproximadamente 10-15), verifique os logs de um dos Santinels para observar a detecção da falha e o início do processo de failover:

docker logs redis-sentinel1

3. Identificação do Novo Principal

Para descobrir qual réplica foi promovida a principal, execute:

docker exec -it redis-sentinel1 redis-cli -p 26379 sentinel get-master-addr-by-name meucluster

O resultado será o IP e a porta de redis-replica1 ou redis-replica2.

4. Restauração do Nodo Original

Se desejar reativar o nodo principal original, basta iniciá-lo novamente:

docker start redis-principal

Após reiniciar, o nodo original será automaticamente reintegrado ao cluster como uma nova réplica.

Conexão de Aplicações ao Cluster

As aplicações devem se conectar ao cluster Redis via Sentinels, e não diretamente aos nodos Redis, para aproveitar a alta disponibilidade. Um exemplo em Python:

from redis.sentinel import Sentinel

# Lista de endereços IP e portas dos Sentinels
servidores_sentinel = [
    ('ip_sentinel_1', 26379),
    ('ip_sentinel_2', 26379),
    ('ip_sentinel_3', 26379)
]

# Inicializa o cliente Sentinel
cliente_sentinel = Sentinel(servidores_sentinel, socket_timeout=0.5, password='minha_senha_secreta')

# Obtém uma conexão com o nodo principal (escrita)
conexao_principal = cliente_sentinel.master_for('meucluster', socket_timeout=0.5, password='minha_senha_secreta')

# Obtém uma conexão com uma réplica (leitura)
conexao_replica = cliente_sentinel.slave_for('meucluster', socket_timeout=0.5, password='minha_senha_secreta')

# Exemplo de escrita de dados no principal
conexao_principal.set('produto:123', '{"nome": "Smart TV", "preco": 1500.00}')

# Exemplo de leitura de dados de uma réplica
dados_produto = conexao_replica.get('produto:123')
print(f"Dados do produto: {dados_produto.decode('utf-8')}")

Recomendações Importantes

  1. Unidade de Senhas: Todas as instâncias do Redis (principle e réplicas) e os Sentinels devem operar com a mesma senha de autenticação.
  2. Latência de Rede: Redes com baixa latência entre os servidores são cruciais para o desempenho do Sentinel na detecção de falhas e failover.
  3. Configuração de Persistência: Habilitar a persistência AOF (--appendonly yes) é altamente recomendado para a segurança dos seus dados.
  4. Gerenciamento de Recursos: Defina limites de memória e CPU para os contêineres Docker para evitar que o Redis consuma excessivamente os recursos do host.
  5. Monitoramento e Alertas: Implemente um sistema de monitoramento robusto para os nodos Redis e Sentinels. Isso permitirá a detecção proativa de anomalias e a resposta rápida a quaisquer problemas.

Tags: Redis Docker sentinel AltaDisponibilidade cluster

Publicado em 8-22 02:56