目前我们讲的 Redis 还只是主从方案,最终一致性。读者们可思考过,如果主节点凌晨3 点突发宕机怎么办?就坐等运维从床上爬起来,然后手工进行从主切换,再通知所有的程序把地址统统改一遍重新上线么?毫无疑问,这样的人工运维效率太低,事故发生时估计得至少 1 个小时才能缓过来。如果是一个大型公司,这样的事故足以上新闻了。
所以我们必须有一个高可用方案来抵抗节点故障,当故障发生时可以自动进行从主切换,程序可以不用重启,运维可以继续睡大觉,仿佛什么事也没发生一样。Redis 官方提供了这样一种方案 —— Redis Sentinel(哨兵)。
我们可以将 Redis Sentinel 集群看成是一个 ZooKeeper 集群,它是集群高可用的心脏,它一般是由 3~5 个节点组成,这样挂了个别节点集群还可以正常运转。
它负责持续监控主从节点的健康,当主节点挂掉时,自动选择一个最优的从节点切换为点切换。比如上图的主节点挂掉后,集群将可能自动调整为下图所示结构。
集群会调整为下面这张图。
此时原先挂掉的主节点现在变成了从节点,从新的主节点那里建立复制关系。
消息丢失
限制主从延迟过大。
务,丧失可用性。
有给反馈。
Sentinel 基本使用看 Python 客户端是如何做的。
discover_xxx 方法可以发现主从地址,主地址只有一个,从地址可以有多个。
关系。