Redis-哨兵机制
需求
主从复制的机制下,Redis服务架构内就有多台服务器,其中包括一台主机和多台从机,当主机宕机了,从机会停止工作,直到主机上线或者通过手工配置更换主机,为了确保高可用性,我们需要一种机制自动去帮我们完成,当主机宕机后,从从机里面选出一台作为主机这样一件事情,哨兵机制由此而来。
选举机制(无人值守运维)
-
选举“兵王”:为了确保系统的稳定性,哨兵一般会设置多个(小集群),主机出故障,需要进行故障迁移(failover)的时候,需要选派出一个哨兵去执行修改主从机的配置文件(比如修改从机的配置文件中指向主机的IP地址和端口号),这样的哨兵就是“兵王”,选举的算法是Raft,遵循的原则是先到先得,大致就是哨兵之间会进行拉票,谁先拉谁先得票,得票数高的那个哨兵成为兵王。
-
“新王登基”:这里引出一个问题,主机宕机之后,应该选取哪个从机作为新的主机?这里有三个个筛选标准:
- 第一,是哪个从机的优先级高(这个可以在配置文件里面配置,默认值是一百,值越低优先级越高);
- 第二,是哪个从机offset高(就是哪个从机从原主机复制到的数据多);
- 第三,如果前面都一样,就需要用到第三个,哪个ID小用哪个。
-
“兵王上班”:sentinel leader执行slaveof no one让从机成为新的主机,然后向其它slave(从机)发送命令,让这些从机跟新的主机建立主从复制的关系,同时开始复制新主机内的数据。
-
“青山不在”:之前宕机的主机重新恢复后,Sentinel leader会让这个“原主机”变成从机,恢复正常工作。
笔记参考:阳哥Redis脑图