TL;DR — Resumo Rápido

Implante o Redis Sentinel para failover automático e alta disponibilidade. Configure quorum, topologia master-réplica, clientes e segurança em produção.

O Redis Sentinel é a solução de alta disponibilidade integrada ao Redis, oferecendo failover automático, monitoramento de topologia e descoberta de serviços sem a complexidade do Redis Cluster. Este guia cobre a arquitetura completa, uma implantação de três nós pronta para produção, a configuração de clientes compatíveis com Sentinel, os conceitos de quorum e os controles de segurança necessários antes de ir para produção.

Pré-requisitos

  • Três servidores Linux (físicos ou virtuais) com conectividade entre si nas portas 6379 (Redis) e 26379 (Sentinel).
  • Redis 7.0 ou superior instalado em todos os nós.
  • Acesso root ou sudo em cada servidor.
  • Familiaridade básica com arquivos de configuração do Redis e redis-cli.

Arquitetura do Sentinel

O Redis Sentinel é executado como um processo separado junto às instâncias do Redis. Cada Sentinel desempenha quatro funções:

  • Monitoramento: Verifica a integridade do master e das réplicas a cada segundo usando PING/INFO.
  • Notificação: Publica alertas nos canais +switch-master, +slave e outros via pub/sub.
  • Failover automático: Ao atingir o quorum, o Sentinel elege um líder, promove a melhor réplica e reconfigura as demais.
  • Provedor de configuração: Os clientes consultam o Sentinel com SENTINEL get-master-addr-by-name para descobrir o endereço atual do master.

Por Que Três Sentinels?

Um único Sentinel é um ponto único de falha. Com dois Sentinels pode ocorrer um empate na votação. Três Sentinels com quorum 2 garantem:

  • Um Sentinel pode falhar e o failover ainda funciona.
  • Dois Sentinels quaisquer podem concordar em promover um novo master.
  • A minoria não pode acionar uma promoção que cause split-brain.

Sempre implante um número ímpar de Sentinels (3, 5 ou 7).


Passo 1 — Configurar o Master do Redis

No Servidor 1 (192.168.1.101), edite /etc/redis/redis.conf:

bind 0.0.0.0
port 6379
protected-mode no

requirepass "SenhaFortaRedis123"
masterauth "SenhaFortaRedis123"

# Persistência (AOF recomendado para implantações com Sentinel)
appendonly yes
appendfsync everysec

# Proteção split-brain: rejeita escritas se nenhuma réplica sincronizou nos últimos 10s
min-replicas-to-write 1
min-replicas-max-lag 10

Inicie e habilite o Redis:

sudo systemctl start redis-server
sudo systemctl enable redis-server

Passo 2 — Configurar as Réplicas do Redis

No Servidor 2 (192.168.1.102) e no Servidor 3 (192.168.1.103), edite /etc/redis/redis.conf:

bind 0.0.0.0
port 6379
protected-mode no

requirepass "SenhaFortaRedis123"
masterauth "SenhaFortaRedis123"

# Apontar para o master inicial
replicaof 192.168.1.101 6379

# Réplicas recusam comandos de escrita de clientes (padrão seguro)
replica-read-only yes

# Persistência
appendonly yes
appendfsync everysec

# Prioridade de promoção da réplica (menor = preferida; 0 = nunca promover)
replica-priority 100

Verifique a replicação a partir do master:

redis-cli -a "SenhaFortaRedis123" INFO replication

Você deve ver role:master e duas entradas slave com state:online.


Passo 3 — Configurar o Redis Sentinel

Crie /etc/redis/sentinel.conf nos três servidores:

port 26379
daemonize yes
logfile "/var/log/redis/sentinel.log"
dir /var/lib/redis

# Monitorar o master chamado "mymaster" com quorum 2
sentinel monitor mymaster 192.168.1.101 6379 2

# Senha para autenticação com o master (e réplicas após o failover)
sentinel auth-pass mymaster SenhaFortaRedis123

# Marcar o master como SDOWN após 5 segundos sem resposta
sentinel down-after-milliseconds mymaster 5000

# Tempo máximo para o processo completo de failover (ms)
sentinel failover-timeout mymaster 60000

# Apenas uma réplica sincroniza do novo master de cada vez
sentinel parallel-syncs mymaster 1

Inicie o Sentinel nos três servidores:

sudo redis-sentinel /etc/redis/sentinel.conf

Verifique a descoberta de topologia:

redis-cli -p 26379 SENTINEL masters
redis-cli -p 26379 SENTINEL replicas mymaster
redis-cli -p 26379 SENTINEL sentinels mymaster
redis-cli -p 26379 SENTINEL ckquorum mymaster

O Processo de Failover Passo a Passo

  1. SDOWN (Subjetivamente Inativo): Um Sentinel para de receber PONG do master dentro do down-after-milliseconds e o marca como SDOWN.
  2. ODOWN (Objetivamente Inativo): O Sentinel transmite SENTINEL is-master-down-by-addr para seus pares. Quando o número de quorum responde afirmativamente, o estado passa para ODOWN.
  3. Eleição de líder: Os Sentinels que concordam sobre o ODOWN votam em um líder usando o algoritmo semelhante ao Raft integrado ao Sentinel.
  4. Seleção de réplica: O líder classifica as réplicas por: tempo de desconexão do master → replica-priority (menor vence) → offset de replicação (mais dados vence) → run ID lexicográfico.
  5. Promoção: O líder envia REPLICAOF NO ONE para a réplica escolhida, tornando-a o novo master.
  6. Reconfiguração: As demais réplicas recebem REPLICAOF <novo-ip-master> 6379. Os Sentinels atualizam seus arquivos sentinel.conf. Os clientes que consultarem o Sentinel receberão o novo endereço do master.

Todo o processo normalmente é concluído em 10–30 segundos com as configurações padrão.


Conexão de Clientes Através do Sentinel

Nunca codifique o IP do master Redis diretamente na sua aplicação. Use um cliente compatível com Sentinel que consulte o Sentinel para obter o master atual.

Python (redis-py)

from redis.sentinel import Sentinel

sentinel = Sentinel(
    [
        ("192.168.1.101", 26379),
        ("192.168.1.102", 26379),
        ("192.168.1.103", 26379),
    ],
    socket_timeout=0.5,
    password="SenhaFortaRedis123",
)

master = sentinel.master_for("mymaster", socket_timeout=0.5)
replica = sentinel.slave_for("mymaster", socket_timeout=0.5)

master.set("sessao:abc", "dados-usuario")
valor = replica.get("sessao:abc")

Node.js (ioredis)

const Redis = require("ioredis");

const redis = new Redis({
  sentinels: [
    { host: "192.168.1.101", port: 26379 },
    { host: "192.168.1.102", port: 26379 },
    { host: "192.168.1.103", port: 26379 },
  ],
  name: "mymaster",
  password: "SenhaFortaRedis123",
  sentinelPassword: "SenhaFortaRedis123",
});

await redis.set("chave", "valor");

Segurança em Produção

Proteger o Sentinel

Adicione requirepass ao Sentinel para que apenas clientes autorizados possam emitir comandos Sentinel:

requirepass "SenhaAdminSentinel"
sentinel sentinel-pass SenhaAdminSentinel

Habilitar TLS

O Redis 6.0+ suporta TLS para conexões Redis e Sentinel:

tls-port 26380
port 0
tls-cert-file /etc/redis/tls/sentinel.crt
tls-key-file /etc/redis/tls/sentinel.key
tls-ca-cert-file /etc/redis/tls/ca.crt
tls-replication yes

Usar ACLs (Redis 6.0+)

# Em redis.conf
aclfile /etc/redis/users.acl
# users.acl
user default off
user sentinel on >SentinelPass ~* &* +@all
user app on >AppPass ~sessao:* ~cache:* +GET +SET +DEL +EXPIRE

Comparação: Sentinel vs Alternativas

Recurso Sentinel Redis Cluster KeyDB Dragonfly Redis Gerenciado
Failover automático Sim Sim Sim Sim Sim
Fragmentação de dados Não Sim Sim Não Varia
Complexidade de configuração Média Alta Baixa Baixa Nenhuma
Requisito de cliente Compatível Sentinel Compatível Cluster Padrão Padrão Padrão
Tamanho máximo do dataset RAM de um nó RAM × shards RAM de um nó RAM de um nó Limitado pelo plano
Custo Gratuito Gratuito Gratuito Gratuito $$/mês
Ideal para HA sem fragmentação Datasets grandes HA drop-in do Redis Alto throughput Sem gerenciamento de infra

Problemas Comuns e Advertências

O Sentinel reescreve seu arquivo de configuração. Nunca edite sentinel.conf manualmente enquanto o Sentinel estiver em execução — o Sentinel atualiza continuamente o arquivo com a topologia descoberta.

DNS vs endereços IP. O Sentinel armazena endereços de master e réplica por IP no momento da descoberta. Se você mudar o IP de um servidor, o Sentinel não seguirá as mudanças de DNS.

Leituras obsoletas durante o failover. Nos 10–30 segundos entre a falha do master e a promoção da réplica, as leituras podem retornar dados desatualizados. Projete a aplicação para tolerar leituras brevemente obsoletas.

requirepass sem masterauth. Se você definir requirepass no master mas esquecer masterauth nas réplicas, a autenticação de replicação falha e as réplicas se desconectam silenciosamente.

Resumo

  • O Redis Sentinel fornece monitoramento, failover automático e descoberta de serviços para Redis sem exigir Cluster.
  • Implante pelo menos 3 instâncias Sentinel em hosts separados; defina quorum como 2 para uma configuração de 3 nós.
  • A sequência de failover avança de SDOWN → ODOWN → eleição de líder → promoção de réplica → reconfiguração.
  • Use min-replicas-to-write e min-replicas-max-lag no master para evitar a perda de dados por split-brain.
  • Sempre use um cliente compatível com Sentinel — nunca codifique o IP do master diretamente.
  • Proteja o Sentinel com requirepass, ACLs e TLS em ambientes de produção.

Artigos Relacionados