当主库宕机之后,从库可以处理读请求,但是写请求无法处理
这时就需要进行主从迁移,那么主从迁移有几个问题需要解决
1. 如何确认主库是真的挂了
2. 该选择哪个从库升级为主库
3. 怎么通知其他从库 主库被替代了
redis 哨兵模式解决了上面的问题
哨兵是一个运行在redis中的一个进程,主要负责 监控 选主 和通知
监控: 哨兵定时发送心跳到主从库 从库无回复会被标记为下线,主库无回复会切换主库
选主: 利用raft算法选举出新的主库
通知: 哨兵发送通知到所有的从库,让他们进行replicaof与主库建立连接 进行数据复制,然后哨兵发送新库信息给客户端 客户端请求转发到新库地址
sentinel需要做两个判断
1. 判断主库是否下线
哨兵周期性的发送ping命令,如果主库超时回复会被标为主观下线
2. 选主
如何不误判呢? 那就去是建立哨兵集群,引入多个哨兵实例一起来判断,当n/2+1的哨兵判定主库主观线下了,就开始在从库中选主
先过滤掉老是跟主库断连的从库,然后给剩余的从库打分
第一轮,优先级高的从库优先 用户可以配置,给不同的从库设置优先级,如果从库优先级一样就开启第二轮
第二轮,和旧主库同步程度最高的得分最高,如果offset一致进行第三轮
第三轮,id号小的从库得分高
当主库宕机了在主从替换期间,客户端能否正常请求?
1. 读请求从库可以处理,写请求无法处理,对写入请求返回值不敏感的操作可以先缓存起来,等迁移完毕之后再写入.
主从迁移之后客户端如何得到通知?
1. 哨兵以广播的方式通知连接的客户端