八、Reids Sentinel(高可用实现的一个机制)
1、主从复制高可用:
1.1:主从复制高可用问题(手动故障转移【master发生故障之后,下线master选择一个slave为master,然后让其它的slave的主节点跟随新的master】、写能力和存储能力受限)
2、Reids Sentinel架构(client从sentinel获取redis主从以及IP信息)
2.1:master发生故障时,sentinel处理处理步骤
1.多个sentinel发现并确认master有问题
2.选举出一个sentinel作为领导
3.选出一个slave作为master
4.通知其余slave成为新的master的slave
5.通知客户端主从变化
6.等老的master重新启动之后,设置为新master的slave
3、三个定时任务
3.1:每10秒灭个sentinel对master和slave执行info(发现slave节点、确认主从关系)
3.2:每2秒每个sentinel通过msater节点的channel交换信息[pub/sub](通过_sentinel_:hello频道交互、交换对节点的看法和自身信息)
3.3:每1秒每个sentinel对其它的sentinel和redis执行ping操作(心跳检测,失败判断依据)
4、sentinel领导选举
原因:只有一个sentinel节点完成故障转移
选择:通过sentinel is-master-down-by-addr 命令都希望成为领导者(此命令有两个作用:判定matser是否宕机、是否希望我成为领导者)
4.1:每个主观下线的sentinel节点向其他节点sentinel节点发送命令,要求将它设置为领导者
4.2:收到命令的sentinel节点如果没有同意通过其它sentinel节点发送的命令,那么将同意该请求,否则拒绝
4.3:如果该sentinel节点发现自己的票数已经超过sentinel集合半数且超过quorum,那么它将成为领导者
4.4:如果此过程有多个sentinel节点成为了领导者,那么将等待一段时间重新进行选举
5、故障转移(sentinel领导者节点完成)
5.1:从slave节点中选出一个合适的节点作为新的master节点
5.1.1 选择slave-priority(salve节点优先级)最高的slave界定啊,如果存在则返回,不存在则继续
5.1.2 选择复制偏移量最大的slave节点(复制的最完整),如果存在则返回,不存在则继续
5.1.3 选择runId最小的slave节点
5.2:对上面的slave节点执行salve of one 命令让其成为master节点
5.3:向生于的slave节点发送命令。让他们成为master节点的slave节点,复制规则和parallel-syncs参数有关
5.4:更新对原来master节点配置为salve,并保持着对其关注,当其恢复后命令它去复制新的master节点
6、节点运维(master、slave、sentinel)
6.1:机器下线,例如过保等情况
6.2:机器性能不足,例如cpu、内存、硬盘、网络等
6.3:节点自身故障:例如服务不稳定等
主节点运维:sentinel failover <masterName>
节点运维:从节点临时下线还是永久下线,例如是否做一些清理工作,但是要考虑读写分离的情况;
节点上线:主节点(sentinel failover进行替换)、从节点(从salveof即可),sentinel节点可以感知、sentinel节点(参考其它sentinel节点启动即可)
7、高可用读写分离
从节点的作用:副本(高可用发基础);扩展(读能力);
三个消息:+switch-master(切换主节点,从节点晋升主节点);+convert-to-slave(切换从节点,原主节点将为从节点);+sdown(主观下线)
8、总结
8.1 redis sentinel是redis的高可用实现方案(故障发现、故障自动转移、配置中心、客户端通知)
8.2 redis sentinel从redis2.8版本开始正式生产可用,之前版本不可用
8.3 尽可能在不同的物理机器上部署sentinel所有节点
8.4 redis sentinel中的sentinel节点个数应该为大于等于3且最好为奇数
8.5 redis sentinel中的数据节点与普通数据节点没有区别
8.6 客户端初始化时连接的是sentinel节点集合,不再是具体的redis节点,但sentinel只是配置中心不是代理
8.7 redis sentinel通过三个定时任务实现了sentinel节点对于主节点、从节点其余sentinel节点监控
8.8 redis sentinel在对节点做失败判断时分为主观下线和客观下线
8.9 看懂redis sentinel故障转移日志对于redis sentinel以及问题排查非常有帮助
8.10 redis sentinel实现读写分离高可用可以依赖sentinel节点的消息通知,获取redis数据节点的状态变化