redis学习笔记(4):

八、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数据节点的状态变化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章