Redis哨兵机制及集群

155 阅读3分钟

1.哨兵机制

监控工作过程

主机宕机:将宕机的master下线,找到一个slave作为master,通知所有的slave连接新的master,启动新的master和slave

分布式系统,对每台服务器进行监控(监控,通知,自动故障转移) 哨兵也是一个redis服务器,只是不提供数据服务

master宕机后,哨兵投票 选举新的master

工作原理:监控,通知,自动故障转移

监控:同步各个节点的同步信息,master和slave以及各个哨兵的状态

哨兵之间ping 确认是否在线, 然后获取master的信息 还有各个slave的信息 runid,master host等

监控:

第一个哨兵先连接master获取信息,然后获取slave的信息,下一个哨兵连接进来的时候也会连接master获取信息,然后获取slave的信息,保证哨兵信息之间同步,发布订阅模式 哨兵之间互发ping命令! 保持信息同步,谁拿到信息以后 快速扩散给其他的哨兵

总的来讲就是哨兵会向master要状态,向slave要状态,并且哨兵之间组织起来 发布订阅,消息沟通

通知:

某个哨兵向各个master和slave发送hello信息,然后哨兵之间互相沟通

自动故障转移:

发送hello信息没有回应,标记sdown,在哨兵机制内发送标记状态,其他哨兵也会向挂了的机制发送信息, 只要超过半数以上发现挂了,就变成可观下线;哨兵选出一个哨兵出来处理宕机的机器,从备选的服务器中选择一个备选的master,选择一个响应快的,网络较好的

哨兵发送指令,让选举出来的机器发送slave no one 以及 其他slave 向新选举出来的master连接,进行转移

2.集群模式

多个主多个从,分散服务器的访问压力,降低单机宕机带来的业务灾难

数据存储结构设计

通过算法设计,计算出key应该保存的位置

将所有的存储空间计划切割成16384份,每台主机保存一份

放到应该存储的位置(一个key进行一个运算,相当于hashcode值?再去模上16384 确定在数据的保存位置;每个主机保存一部分数据)

假设要增加 或者删除主机,原来的数据怎么办?

增强可扩展性,增加一个节点后,把原来的主机上的部分节点放到这个新增加的节点上; 其实就是槽,改变槽的存储位置就可以了; 一个机器持有一些槽

内部通讯设计

主机之间互联,存储各个主机之间存储槽的信息,这个信息是散的,通过给定的槽位置,去找到对应的主机; 最多两次可以找到

在配置里面,开启集群模式

后面的过程,包括主从复制相关的信息,只不过是多个master;master之间相互连接,slave连接对应的master

对数据的操作,会自动去找对应槽里面的信息!

最大的优势是master出问题以后,slave会变成master

cluster nodes