Sistema de alta disponibilidade para Redis usando Sentinel para detecção automática de falhas e promoção de master, com HAProxy para roteamento inteligente de conexões.
- ✅ Alta Disponibilidade: Failover automático em caso de falha do master
- ✅ Detecção Automática: Sentinel monitora e detecta falhas em ~5 segundos
- ✅ Roteamento Inteligente: HAProxy roteia apenas para o master atual
- ✅ Replicação Automática: Dados replicados em tempo real para todas as réplicas
- ✅ Recuperação Automática: Nós se reconectam e sincronizam automaticamente
- ✅ Zero Downtime: Failover completo em ~8-10 segundos
- ✅ Testado e Validado: Suíte completa de testes automatizados
┌─────────────┐
│ Cliente │
└──────┬──────┘
│
▼
┌─────────────┐
│ HAProxy │ (porta 6379)
│ (TCP Check)│ - Health check via comando ROLE
└──────┬──────┘ - Roteia apenas para master
│
├──────────┬──────────┬──────────┐
▼ ▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐
│Redis-1│ │Redis-2│ │Redis-3│
│(6379) │ │(6379) │ │(6379) │
└───┬───┘ └───┬───┘ └───┬───┘
│ │ │
┌───┴──────────┴──────────┴───┐
│ Sentinel Cluster │
│ (sentinel-1, 2, 3) │
│ (monitora: mymaster) │
│ (quorum: 2) │
└─────────────────────────────┘
- 3x Redis: 1 master + 2 réplicas
- 3x Sentinel: Quorum de 2 para decisões de failover
- 1x HAProxy: Load balancer com health check inteligente
- Docker
- Docker Compose
docker compose up -dAguarde ~10 segundos para o cluster estabilizar.
# Ver containers rodando
docker compose ps
# Ver qual Redis é o master
docker exec sentinel-1 redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster
# Ver HAProxy stats (quem está UP)
curl http://localhost:8404/stats
# Ou abra no navegador: http://localhost:8404/stats# Conectar através do HAProxy (sempre roteia para o master)
docker exec redis-1 redis-cli -h haproxy -p 6379
# Exemplo: escrever e ler
docker exec redis-1 redis-cli -h haproxy -p 6379 SET chave "valor"
docker exec redis-1 redis-cli -h haproxy -p 6379 GET chavedocker compose downdocker compose down -vcd tests
./run-all-tests.sh| Teste | Descrição | Duração |
|---|---|---|
| Teste 01 | Validação inicial do cluster | ~5s |
| Teste 02 | Failover do master | ~15s |
| Teste 03 | Operação com 1 nó | ~10s |
| Teste 04 | Recuperação completa | ~25s |
Veja documentação completa dos testes.
✅ Todos os testes PASSARAM
- ✅ Detecção automática de falhas
- ✅ Promoção automática de novo master
- ✅ Roteamento automático do HAProxy
- ✅ Replicação funcionando
- ✅ Recuperação automática
- ✅ Persistência de dados 100%
Arquivos: redis/redis-*.conf
bind 0.0.0.0
port 6379
protected-mode no # Permite conexões externas
appendonly yes # Persistência AOF
repl-diskless-sync yes # Replicação sem discoArquivos: sentinel/sentinel-*.conf
sentinel monitor mymaster redis-1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
sentinel parallel-syncs mymaster 1Configuração importante:
down-after-milliseconds: 5000ms (5s) - tempo para detectar falhaquorum: 2 - necessário 2 de 3 Sentinels para promover masterfailover-timeout: 15000ms (15s) - timeout máximo para failover
Arquivo: haproxy/haproxy.cfg
backend redis_master
mode tcp
option tcp-check
tcp-check connect
tcp-check send-binary 2a310d0a24340d0a524f4c450d0a # Comando ROLE em RESP
tcp-check expect rstring master # Espera "master" na resposta
default-server inter 1s fall 2 rise 1
server redis1 redis-1:6379 check
server redis2 redis-2:6379 check
server redis3 redis-3:6379 checkHealth Check Inteligente:
- Envia comando
ROLEem formato RESP - Verifica se a resposta contém "master"
- Apenas o master passa no health check
- Verifica a cada 1 segundo
Acesse: http://localhost:8404/stats
Mostra:
- Quais servidores estão UP/DOWN
- Número de conexões ativas
- Health check status
- Estatísticas de tráfego
# Logs do Sentinel (ver failovers)
docker logs sentinel-1 --tail=50
# Logs do HAProxy (ver health checks)
docker logs haproxy --tail=50
# Logs do Redis
docker logs redis-1 --tail=50# Ver role de cada Redis
docker exec redis-1 redis-cli ROLE | head -1
docker exec redis-2 redis-cli ROLE | head -1
docker exec redis-3 redis-cli ROLE | head -1
# Ver info de replicação do master
docker exec redis-1 redis-cli INFO replication
# Ver info do Sentinel sobre o master
docker exec sentinel-1 redis-cli -p 26379 SENTINEL master mymaster
# Ver todas as réplicas conhecidas pelo Sentinel
docker exec sentinel-1 redis-cli -p 26379 SENTINEL replicas mymaster- T+0s: Master falha (ex: redis-1)
- T+5s: Sentinels detectam falha (
down-after-milliseconds) - T+6s: Sentinels votam (quorum de 2/3)
- T+7s: Sentinel promove nova réplica (ex: redis-3) a master
- T+8s: Réplica restante (ex: redis-2) se reconecta ao novo master
- T+9s: HAProxy detecta novo master via health check
- T+10s: Sistema totalmente operacional
Downtime percebido: ~8-10 segundos
Quando o nó original volta:
- Nó se conecta ao Sentinel
- Sentinel informa quem é o master atual
- Nó se configura como réplica do master atual
- Sincronização inicial de dados
- Replicação contínua estabelecida
Tempo de recuperação: ~15-20 segundos
✅ Fazer:
- Sempre rodar 3 ou mais Sentinels (número ímpar)
- Configurar quorum como
(N/2) + 1onde N = número de Sentinels - Monitorar health checks do HAProxy
- Configurar alertas para failovers
- Fazer backup regular dos dados
- Testar failover em ambiente de staging
❌ Evitar:
- Rodar apenas 2 Sentinels (não há consenso)
- Colocar todos os componentes no mesmo host
- Desabilitar AOF (persistência)
- Aumentar muito
down-after-milliseconds(detecção lenta)
Para produção, adicione:
# Redis
requirepass seu_password_forte
masterauth seu_password_forte
# Sentinel
sentinel auth-pass mymaster seu_password_forteE configure o HAProxy para enviar comando AUTH antes do ROLE.
.
├── README.md # Este arquivo
├── TESTING.md # Documentação de testes
├── docker-compose.yml # Definição dos containers
├── haproxy/
│ └── haproxy.cfg # Configuração do HAProxy
├── redis/
│ ├── redis-master.conf # Config do Redis master
│ ├── redis-replica-2.conf # Config da réplica 2
│ └── redis-replica-3.conf # Config da réplica 3
├── sentinel/
│ ├── sentinel-1.conf # Config do Sentinel 1
│ ├── sentinel-2.conf # Config do Sentinel 2
│ └── sentinel-3.conf # Config do Sentinel 3
└── tests/
├── README.md # Documentação dos testes
├── run-all-tests.sh # Script para executar todos os testes
├── TEST-01-*.md # Teste 01
├── TEST-02-*.md # Teste 02
├── TEST-03-*.md # Teste 03
├── TEST-04-*.md # Teste 04
└── results/ # Logs das execuções
- Guia de Testes - Documentação completa de testes
- Tests README - Detalhes dos testes individuais
- Redis Sentinel Docs
- HAProxy TCP Check
Este é um projeto de referência para alta disponibilidade com Redis. Sinta-se livre para:
- Reportar issues
- Sugerir melhorias
- Adicionar novos testes
- Compartilhar sua experiência
- ✅ Configuração inicial do cluster Redis + Sentinel + HAProxy
- ✅ Health check inteligente no HAProxy (comando ROLE)
- ✅ Suíte completa de testes automatizados
- ✅ Documentação completa
- ✅ Todos os testes passando
MIT License - veja o arquivo LICENSE para detalhes.
Desenvolvido e testado em: 2026-02-15
Status: ✅ Produção-ready
Testes: ✅ 100% passando