各位在分布式世界摸爬滚打的铲屎官们!今天我们要给Redis主从架构装上智能项圈——哨兵系统!这货从1.0时代的看门狗(只会叫不干活),进化到现在的导盲犬(主动带路+危机处理),堪称《Redisの变形记》!系好安全带,准备围观高可用架构的诞生现场! 🐕🦺
第一幕:哨兵の职场简历
岗位职责:
- 24小时盯梢:监控主从节点心跳(比女朋友查岗还勤快)
- 故障诊断:发现主节点扑街时,秒变兽医判断是否真死(网络抖动?还是真宕机?)
- 自动换届:扶持新主节点上位(比宫斗剧还刺激)
- 服务发现:告诉客户端该抱谁大腿(主节点IP变化时的指路明灯)
技能要求:
- 至少3个哨兵组成陪审团(防止误判)
- 奇数天团配置(3/5/7个,避免投票平局)
- 能承受网络分区的毒打(脑裂?不存在的!)
第二幕:哨兵集群の出生证明
redis-sentinel.conf の灵魂配置:
sentinel monitor mymaster 192.168.1.100 6379 2 # 监控名为mymaster的主节点,2票同意才算真宕机
sentinel down-after-milliseconds mymaster 5000 # 5秒无响应就亮红灯
sentinel failover-timeout mymaster 180000 # 换届选举限时3分钟
sentinel parallel-syncs mymaster 1 # 新主上位时,每次同步1个从节点(防流量洪灾)
避坑指南:
- 所有哨兵必须监控同一个主节点(别各自认爹)
- 投票数
quorum
要 ≤ 哨兵总数/2 +1(比如3哨兵配2票) - 生产环境至少3台物理机部署哨兵(防止被团灭)
第三幕:SpringBootの哨兵婚介所
application.yml の爱情契约:
spring: redis: sentinel: master: mymaster # 主节点名称(别写成mymother) nodes: - 192.168.1.101:26379 # 哨兵1 - 192.168.1.102:26379 # 哨兵2 - 192.168.1.103:26379 # 哨兵3 password: 你的密码不是root吧? lettuce: pool: max-active: 16 # 连接池要像海底捞等位区一样充足
代码の山盟海誓:
@Bean
public RedisConnectionFactory lettuceConnectionFactory() { RedisSentinelConfiguration config = new RedisSentinelConfiguration() .master("mymaster") .sentinel("192.168.1.101", 26379) .sentinel("192.168.1.102", 26379) .sentinel("192.168.1.103", 26379); config.setPassword(RedisPassword.of("你的密码")); return new LettuceConnectionFactory(config);
}
第四幕:哨兵の翻车名场面
惨案1:网络抖动引发的冤假错案
[ERR] +vote-for-leader 哨兵A疯狂弹劾主节点
[WARN] 主节点实际存活,但因网络波动被误判死亡
保命方案:
- 调大
down-after-milliseconds
(建议≥5000ms) - 给哨兵和Redis节点配置VIP心跳线
惨案2:脑裂の量子纠缠
主节点A和主节点B同时宣称:"我才是正宫!"
客户端数据写入分裂,引发《双主の时空混乱》
应急预案:
- 手动下线其中一个主节点
- 配置
min-slaves-to-write 1
(至少1个从节点同步成功才接受写)
惨案3:哨兵集群集体失忆
所有哨兵突然忘记监控配置,开始摆烂
复活咒语:
- 重启哨兵并检查配置文件权限
- 用
sentinel set
命令动态修复配置
第五幕:哨兵の健康体检表
1. 哨兵自检命令:
redis-cli -h 哨兵IP -p 26379 info sentinel
# 输出示例:
# master0:name=mymaster,status=ok,address=192.168.1.100:6379,slaves=2,sentinels=3
2. 监控告警指标:
- 哨兵存活数(<3时触发警报)
- 主从切换次数(突然飙升可能有问题)
- 主节点响应时间(>100ms要亮黄灯)
3. 灾难演习方案:
# 手动制造主节点宕机(勇士行为)
redis-cli -h 主节点IP debug segfault
# 观察哨兵是否在30秒内完成新主选举
终极大招:哨兵到集群の飞升指南
当出现以下症状时,请考虑升级Redis Cluster:
- 数据量超过50GB(哨兵:我记不住这么多啊!)
- 写并发超过10万/秒(哨兵:主节点要炸了!)
- 需要自动分片(哨兵:这题超纲了!)
最后送上高可用の宇宙真理:
哨兵不是银弹!网络分区时请拥抱CP系统!
(想同时要CA?醒醒,分布式系统没有魔法!)
现在你已获得"Redis哨兵驯兽师"资格证书!要不要挑战用哨兵+Keepalived实现异地多活?(然后发现延迟让人怀疑人生)