文章目录
目录
文章目录
Redis哨兵是什么?
Redis哨兵是如何工作的?
选举原理
Redis哨兵是什么?
Redis 的主从复制通过备份解决了数据丢失问题,但是并不保证在主节点挂了之后可以及时的重新部署上线,主节点发生故障时,进行主备切换的过程是复杂的,需要完全的人工参与,导致故障恢复时间无法保障。
Redis Sentinel 是 Redis 的高可用实现方案,在实际的生产环境中,对提高整个系统的高可用是非常有帮助的。
Redis哨兵是如何工作的?
Redis Sentinel 相比于主从复制模式是多了若干(建议保持奇数)Sentinel 节点用于实现监控数据节 点,哨兵节点会定期监控所有节点(包含数据节点和其他哨兵节点)。针对主节点故障的情况,故障 转移流程大致如下:
1)主节点故障,从节点同步连接中断,主从复制停止。
2)哨兵节点通过定期监控发现主节点出现故障。哨兵节点与其他哨兵节点进行协商,达成多数认同主节点故障的共识。这步主要是防止该情况:出故障的不是主节点,而是发现故障的哨兵节点,该情况 经常发生于哨兵节点的网络被孤立的场景下。
3)哨兵节点之间使用 Raft 算法选举出⼀个领导角色,由该节点负责后续的故障转移工作。
4)哨兵领导者开始执行故障转移:从节点中选择⼀个作为新主节点;让其他从节点同步新主节点;通知应用层转移到新主节点。
选举原理
假定当前环境如上方介绍, 三个哨兵(sentenal1, sentenal2, sentenal3), 一个主节点(redis-master), 两个从节点(redis-slave1, redis-slave2).
1) 主观下线: 当 redis-master 宕机, 此时 redis-master 和三个哨兵之间的心跳包就没有了. 此时, 站在三个哨兵的角度来看, redis-master 出现严重故障. 因此三个哨兵均会把 redis-master 判定为主观下线 (SDown)
2) 客观下线: 此时哨兵 sentenal1, sentenal2, sentenal3 均会对主节点故障这件事情进行投票. 当故障得票数 >= 配置的法定票数之后
sentinel monitor redis-master 172.22.0.4 6379 2
# 法定票数配置 2
3) 选举出哨兵的 leader
接下来需要哨兵把剩余的 slave 中挑选出一个新的 master. 这个工作不需要所有的哨兵都参与. 只需要选出个代表 (称为 leader), 由 leader 负责进行 slave 升级到 master 的提拔过程. 这个选举的过程涉及到 Raft 算法
选举过程如下:
1) 每个哨兵节点都给其他所有哨兵节点, 发起⼀个 "拉票请求". (S1 -> S2, S1 -> S3, S2 -> S1, S2 -> S3, S3 -> S1, S3 -> S2)
2) 收到拉票请求的节点, 会回复⼀个 "投票响应". 响应的结果有两种可能, 投 or 不投.
3) 一轮投票完成之后, 发现得票超过半数的节点, 自动成为 leader
4) leader 节点负责挑选一个 slave 成为新的 master. 当其他的 sentenal 发现新的 master 出现 了, 就 说明选举结束了
接下来由leader来施行故障转移 提拔slave为master, 挑选slave规则如下:
1) 比较优先级. 优先级高(数值小的)的上位. 优先级是配置文件中的配置项( slave-priority 或者 replica-priority ).
2) 比较 replication offset 谁复制的数据多, 高的上位.
3) 比较 run id , 谁的 id 小, 谁上位.
总结
以上就是这篇博客的主要内容了,大家多多理解,下一篇博客见!