redis之sentinel

哨兵

当主节点出现故障时,redissentinel能自动完成故障发现和故障转移,并通知应用方,从而实现真正的高可用。

Redis sentinel包含若干个sentinel节点和redis数据节点,每个sentinel节点会对数据节点和其余sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,它还会和其他sentinel节点进行协商,当大多数sentinel节点都认为主节点不可达时,他们会选举出一个sentinel节点来完成自动故障转移工作,同时会将这个变化实时通知给redis应用方。整个过程完全是自动的,不需要人工来介入。

实现原理

三个定时监控任务

每隔10秒,每个sentinel节点会向主节点和从节点发送info命令获取最新拓扑结构

每隔2秒,每个sentinel节点会向redis数据节点

每隔1秒,每个sentinel节点会向主节点和从节点和其余sentinel节点发送一条ping命令做一次心跳检测

主观下线和客观下线

主观下线:发送心跳检测,当这些节点超时没有回复,就对该节点做判定失败。

客观下线:当主观下线的节点是主节点时,询问其他sentinel节点对主节点的判断,当超过一半数以上时,就认为主节点客观下线

Sentinel领导者选举

选出一个sentinel节点作为领导者进行故障转移。使用raft算法选举

选举思路:

1.    每个在线的sentinel节点都有资格成为领导者,当它确认主节点主观下线的时候,会向其他sentinel节点发送命令,要求将自己设置为领导者。

2.    收到命令的sentinel节点,如果没有同意过其他sentinel节点的命令,将同意该请求,否则拒绝。

3.    如果该sentinel节点发现自己的票数已经大于等于num(sentinel)/2+1,那么它将成为领导者。

4.    如果此过程没有选举出领导者,将进入下一次选举。

故障转移

领导者选举出的sentinel节点负责故障转移,具体步骤如下:

1.    在从节点列表中选出一个节点作为新的主节点,选择方法如下:

a)    过滤:不健康(主观下线、断线)、没回复sentinel节点ping响应、与主节点失联

b)    选择slave-priority(从节点优先级)最高的节点

c)    选择复制偏移量最大的从节点

d)    选择runid最小的从节点

2.    Sentinel节点会让第一步选出来的从节点成为新的主节点

3.    Sentinel节点领导者会向剩余的从节点发送命令,让他们成为新主节点的从节点

4.    Sentinel节点将原来的主节点更新为从节点,当其恢复后命令它去复制新的主节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值