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

RecursoSentinelRedis ClusterKeyDBDragonflyRedis Gerenciado
Failover automáticoSimSimSimSimSim
Fragmentação de dadosNãoSimSimNãoVaria
Complexidade de configuraçãoMédiaAltaBaixaBaixaNenhuma
Requisito de clienteCompatível SentinelCompatível ClusterPadrãoPadrãoPadrão
Tamanho máximo do datasetRAM de um nóRAM × shardsRAM de um nóRAM de um nóLimitado pelo plano
CustoGratuitoGratuitoGratuitoGratuito$$/mês
Ideal paraHA sem fragmentaçãoDatasets grandesHA drop-in do RedisAlto throughputSem 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