【Redis篇12】redis集群-哨兵

62 阅读2分钟

哨兵作用

  • 监控:Sentinel会不断检查您的master和slave是否按照预期工作
  • 自动故障恢复:如果master故障,Sentinel会将一个slave提升为master,当故障实例恢复后也以新的master为主
  • 通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis客户端

哨兵架构

image.png

服务状态监控

Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:

  • 主观下线:如果sentinel节点发现某个实例未在规定时间响应,则认为该实例主观下线
  • 客观下线:若超过指定数量的sentinel都认为该实例主观下线,则该实例客观下线。(quorum值为超过sentinel实例数量的一半)【真的下线了哟】

哨兵选主规则

  • 首先判断主从节点断开时间长短,如果超过指定值就排除该从节点
  • 然后判断从节点的slave-priority 优先级值(配置文件可配置),值越小越优先
  • 如果slave-priority一样,则判断slave节点的offset值,值越大优先级越高
  • 最后判断slave节点的运行id大小,越小优先级越高

容易出现的问题:脑裂(网络问题引起的)

image.png

出现2个master,客户端继续写入旧master命令,当网络恢复后,sentinel会将旧的master降级为slave。这是会出现数据丢失问题。

解决脑裂的配置文件参数

  • min-replicas-to-write 1 //表示最少一个slave节点,发生脑裂时,旧的master因为没有slave节点将拒绝客户端写入请求操作
  • min-replicas-max-lag 5 // 表示数据复制和同步延迟不能超过5秒,发生脑裂后,客户端写入操作也会被拒绝