Sentinel可以监控Redis节点的状态
Sentinel可以通过API进行集群状态通知
Sentinel实现故障自动切换
Sentinel为client提供发现master节点的发现功能,如果发生了切换,Sentinel会通知client新的master地址
正常:两台服务器,每台服务器上分别部署Sentinel和Redis节点
Quorum:Sentinel对master故障达成一致意见的投票数
Majority:Sentinel之间选举leader需要的投票数
故障场景1:Master挂掉,Sentinel都正常
故障影响:Replica被提升为Master
故障场景2:服务器1挂掉,quorum=1,majority=2
故障影响:无论服务器2是否挂掉,集群都宕机
故障场景3:服务器1和服务器2的连接挂掉,quorum=1,majority=1
故障影响:双主(脑裂)
正常:三台服务器,每台服务器上分别部署Sentinel和Redis节点
故障场景1:Master挂掉,Sentinel都正常
故障影响:其中1个Replica被提升为Master
故障场景2:服务器1挂掉,quorum=2,majority=2
故障影响:其中1个Replica被提升为Master
故障场景3:服务器1、服务器2,它俩和服务器3军断连
故障影响:其中1个Replica被提升为Master,可能出现双主
解决方案:min-replicas-to-write 1; min-replicas-max-lag 10
正常:Sentinel和Redis分开部署,可以将Sentinel和Redis客户端所在的应用部署在一起,也可以独立部署
故障场景1:Master挂掉,Sentinel都正常
故障影响:其中1个Replica被提升为Master
故障场景2:服务器1和服务器4形成分区,剩余的服务器形成另外一个分区
故障影响:双主(脑裂)
解决方案:min-replicas-to-write 1; min-replicas-max-lag 10
架构模式 | 硬件成本 | 架构复杂度 | 双主 | 故障处理能力 |
---|---|---|---|---|
双节点 | 2台服务器 | 低 | 是,Majority=1 | 只能支持Master节点故障,其他故障不支持 |
三节点 | 3台服务器 | 中 | 是,网络分区,可以通过 min-replicas-to-write, min-replicas-max-lag 来避免 | 支持Master节点故障,Sentinel节点故障 |
分离部署 | 多台服务器,Sentinel可以和业务服务器公用 | 高 | 是,网络分区,可以通过 min-replicas-to-write, min-replicas-max-lag 来避免 | 支持Master节点故障,Sentinel节点故障 |