本文详细介绍如何通过Redis主从复制结合Sentinel哨兵机制实现高可用架构,涵盖配置步骤、故障转移原理及生产环境优化建议,帮助开发者构建稳定可靠的Redis服务。
一、Redis高可用架构核心组件
Redis高可用方案主要通过以下两个机制实现:
- 主从复制(Replication):实现数据冗余备份
- Sentinel哨兵:监控节点状态并自动故障转移
二、主从复制配置实战
1. 主节点配置(redis-master.conf)
基础配置
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis/redis-master.log"
持久化配置
appendonly yes
appendfsync everysec
主节点无需特殊配置
2. 从节点配置(redis-slave.conf)
port 6380
daemonize yes
pidfile /var/run/redis_6380.pid
logfile "/var/log/redis/redis-slave.log"
指定主节点
replicaof 192.168.1.100 6379
replica-read-only yes
连接主节点密码(如有)
masterauth yourpassword
3. 验证主从同步
在主节点写入数据
redis-cli -h 192.168.1.100 set test_key "hello"
在从节点查询数据
redis-cli -h 192.168.1.101 -p 6380 get test_key
三、Sentinel哨兵部署
1. Sentinel基础配置(sentinel.conf)
port 26379
daemonize yes
logfile "/var/log/redis/sentinel.log"
监控主节点(至少需要3个Sentinel实例)
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
如果主节点有密码
sentinel auth-pass mymaster yourpassword
2. Sentinel集群部署建议
- 至少部署3个Sentinel实例(推荐奇数个)
- 将Sentinel部署在不同物理服务器上
- 配置相同的监控主节点名称(mymaster)
四、故障转移测试
- 手动停止主节点Redis服务
- 观察Sentinel日志:
tail -f /var/log/redis/sentinel.log
- 验证新的主节点选举结果:
redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
五、生产环境优化建议
- 网络配置:确保节点间网络延迟<1ms
- 持久化策略:主节点启用AOF,从节点可选用RDB
- 监控告警:集成Prometheus+Granfa监控体系
- 连接池配置:客户端实现自动重连机制
六、常见问题解决方案
问题现象 | 解决方案 |
---|---|
主从同步延迟高 | 检查网络带宽,适当调大repl-backlog-size |
Sentinel无法达成共识 | 检查防火墙设置,确保26379端口互通 |
故障转移后应用连接失败 | 客户端需支持Sentinel自动发现机制 |
通过主从复制+Sentinel的组合方案,可以实现Redis服务的自动故障转移,保证服务在单点故障时仍能持续可用。建议在实际部署前进行充分的压力测试和故障演练。
评论