哨兵集群(sentinel)
实现主从集群的自动故障恢复
主从节点之间实现数据同步
哨兵的作用
监控
哨兵会不断检查主节点和从节点是否按照预期工作
自动故障恢复
如果主节点故障,哨兵会将从节点提升为主节点
当故障实例回复后以新的主节点为主
通知
哨兵充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新的消息推送给Redis的客户端
服务状态监控
哨兵基于心跳机制对服务状态进行检测,每隔一秒向集群的每个实例发送ping命令,实例返回一个pong:
主观下线:
如果哨兵节点发现某个实例没有在规定时间内响应,就认为这个实例主观下线
客观下线:
如果超过一定数量(quorum)的哨兵节点都认为这个实例主观下线,这个实例则客观下线
这个quorum数量最好超过实例数量的一半
哨兵的选主规则
判断主从节点断开时间的长短,如果超过
一个指定值就排除这个从节点
再判断从节点的优先级,越小优先级越高
如果优先级一样,判断从节点的offset值,越大优先级越高
最后判断从节点的运行id大小,越小优先级越高
哨兵模式的脑裂问题
如果哨兵节点和主节点处于不同网络分区
就会和主节点丢失连接
并从从节点中选取主节点
但此时原来的主节点并没有宕机,出现了多个主节点的情况
在网络恢复后,原本的主节点会降为从节点并强制同步新的主节点数据,导致数据丢失
min-replicas-to-write
最少的从节点数量
使主节点至少存在n个从节点才能同步数据
min-replicas-max-lag
数据复制和同步的延迟最大值
达不到延迟要求就拒绝请求,避免大量数据丢失
通过配置这两个配置可以限制脑裂问题的数据丢失问题