Redis高可用之哨兵模式
哨兵模式的原理与功能
哨兵(sentinel)是一个分布式系统,用于对主从架构中的每台服务器进行监控,当出现故障时通过投票机制选举新的master并将所有slave连接新的master。
哨兵的功能:
- 集群监控:负责监控redis master和slave进程是否正常工作。
- 消息通知:如果某个redis服务有故障,那么哨兵负责发送消息通知给管理员。
- 故障转移:如果master结点故障,哨兵可以选举slave结点变为master。
- 配置中心:如果故障转移发生了,通知client客户端新的master地址。
哨兵工作原理:
sdown(主观下线)与odown(客观下线)转换机制
如果一个哨兵认为一个master宕机了,那么就是sdown。
如果quorum数量的哨兵都认为master宕机了,那么就是odown。
如果一个哨兵 ping 一个 master,超过了 is-master-down-after-milliseconds 指定的毫秒数之后,就主观认为 master 宕机了;如果一个哨兵在指定时间内,收到了 quorum 数量的其它哨兵也认为那个 master 是 sdown 的,那么就认为是 odown 了。
主节点选举
如果一个master被客观下线后,那么就会选举出一个哨兵节点为领导者哨兵(选举的票数大于等于哨兵的个数/2+1时,将会成为领导者),由领导者哨兵将slave转换为master。
选举slave为master需要看以下几点:
如果一个slave跟master断开连接时长超过 down-aftermilliseconds的10倍,被认为不适合作为master。
接下来对slave进行排序,slave的priority越低,优先级越高。
如果slave的priority相同,查看offset,offset越靠后的slave复制的数据越全,优先级越高。
如果上面两个都相同,那么选择run id 小的slave。
Redis哨兵主备切换的数据丢失问题
1.异步复制时master宕机导致数据丢失。
2.脑裂导致数据丢失。
解决方案: