Redis Sentinel 故障转移处理

Sentinel(哨兵)是Redis高可用性的解决方案,一个或者多个sentinel实例监视任意多个主服务器及其从服务器。这里不说sentinel是如何搭建起来的,只说下故障转移处理。

sentinel的配置文件中有master的ip和port,通过向master发送【info】,就能获得从服务器的信息。sentinels和master和slaves之间都有命令连接

sentinel每隔1秒向master发送【ping】,如果在一段时间内没有收到回复或者收到无效回复,则认为master主观下线。

sentinel  down-after-milliseconds  master  5000

上面的配置表示5000ms是主观下线的时间限制。

如果一个sentinel认为master主观下限,会询问其他sentinel是否下限,如果认为master主观下线的master达到一定数量,那么认为其客观下线

sentinel  monitor  master  127.0.0.1  6379  2

上面配置表示有两个sentinel认为master主观下限,则认为master客观下线,这是就需要进行故障转移处理。

故障转移处理之前,需要在sentinels中选举出leader(根据Raft算法),由它负责进行故障转移。

认为master客观下线的sentinel会向其他sentinels发送请求,如果有超过半数的sentinels同意,那么改sentinels会成为leader;如果没有选出leader,将进行第二次选举。不管选举是否成功,sentinels的纪元值+1.

leader会在slaves中选择一个作为新的master。leader向master发送slaveof on one,向其他slaves发送slaveof ip port(新的master的ip和port),slaves就会复制新的master中的数据。

leader会选择哪一个slave作为新的master呢?

1)排除断线的slaves

2)选择优先级最高的

3)选择复制偏移量最大的

4)选择run_id最小的

2019-07-25
主观下线 -> 客观下线 -> 选举Leader -> 任命新master

欲知更多技术细节,请阅读《Redis设计和实现》以及

Redis中sentinel集群的搭建和Jedis测试 图文教程[三]

Sentinel - Redis 命令参考

你可能感兴趣的:(Redis Sentinel 故障转移处理)