Alta disponibilidade com Redis Sentinel + Cluster
Sintoma
Objetivo: configurar uma implantação master-réplica com failover automático para o Redis usando Sentinel; passar para o modo Redis Cluster se for necessária escalabilidade horizontal.
1. Configure o master e as réplicas
Rode um master e pelo menos duas réplicas. As réplicas seguem o master com REPLICAOF ('replicaof <host> <port>' também pode ser escrito no redis.conf). Ative AOF ou RDB para persistência; recomenda-se autenticação com requirepass/masterauth.
Redis
# at runtime on the replica nodes:
REPLICAOF 10.0.0.10 6379
# to make it persistent, redis.conf:
# replicaof 10.0.0.10 6379
# masterauth secret
INFO replication2. Configure o Sentinel com monitor e quórum
Defina o master a monitorar e o quórum no sentinel.conf de cada nó Sentinel. O quorum é o número mínimo de Sentinels necessário para considerar o master 'down'. Em produção, recomendam-se 3 Sentinels em 3 servidores separados (contra split-brain).
Redis
# sentinel.conf:
sentinel monitor mymaster 10.0.0.10 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 13. Inicie os processos Sentinel
Inicie o Sentinel em cada nó. Os Sentinels descobrem automaticamente uns aos outros e as réplicas; gravam a configuração no arquivo em tempo de execução. Por isso o sentinel.conf precisa ser gravável.
Redis
redis-sentinel /etc/redis/sentinel.conf
# or:
redis-server /etc/redis/sentinel.conf --sentinel4. Consulte o status pelo Sentinel e teste o failover
Consulte o master atual e as réplicas com os comandos SENTINEL. As aplicações devem descobrir o master atual perguntando ao Sentinel com 'get-master-addr-by-name'. Verifique a troca automática com um failover planejado.
Redis
SENTINEL master mymaster
SENTINEL get-master-addr-by-name mymaster
SENTINEL replicas mymaster
# planned switchover:
SENTINEL failover mymaster5. Alternativa: particione os dados com Redis Cluster
Se a memória/throughput de um único master não bastar, use o Redis Cluster: os dados são divididos em 16384 hash slots e distribuídos entre vários masters; cada master tem sua própria réplica. A aplicação precisa usar um cliente cluster-aware. Configure com redis-cli --cluster create.
Redis
redis-cli --cluster create \
10.0.0.11:6379 10.0.0.12:6379 10.0.0.13:6379 \
10.0.0.21:6379 10.0.0.22:6379 10.0.0.23:6379 \
--cluster-replicas 16. Verifique o estado do cluster
Depois de criar o cluster, verifique se todos os slots estão atribuídos e os nós conectados. cluster_state deve ser 'ok' e todos os 16384 slots devem aparecer atribuídos. Monitore a distribuição de nós e slots com os comandos CLUSTER.
Redis
redis-cli --cluster check 10.0.0.11:6379
redis-cli -c -h 10.0.0.11 CLUSTER INFO
redis-cli -c -h 10.0.0.11 CLUSTER NODES