一、redis cluster数据切片
1、最老土的哈希:
2、一致性哈希:
此哈希算法存在同一个master内可能有太多的数据,可以用虚拟节点解决。
3、哈希slot算法:
此算法也是为了解决同一个master内有大量的数据。
二、节点之间的通信机制
1、基础通信原理
(1)redis cluster节点间采取gossip协议进行通信,与集中式不同,不是把所有的元数据(节点信息、故障等等)信息都集中放在某个节点上,而是互相间不断通信,保证每个节点间的元数据信息都是完整的。
(2)每个节点都有一个专门用于通信的端口,一般是自己提供服务的端口号加10000,每隔一段时间都会往另外的节点发送ping消息,同时其他几个接收到ping后返回pong。
(3)交互的信息有故障信息、节点的增加和删除、hash slot信息等。
2、gossip协议
gossip协议包括以下4种信息:
(1)meet,每个节点发送meet给新加入的节点,通知那个节点去加入我们集群。
(2)ping
(3)pong
(4)fail,某个节点判断另一个节点fail之后,就发送fail给其他节点,通知其他节点指定的节点宕机了。
三、高可用性与主备切换
1、判断节点宕机
(1)如果一个节点认为另一个节点宕机,那么就是pfail,主观宕机
(2)如果多个节点都认为有一个节点宕机,那就是fail,客观宕机
(3)在cluster-node-timeout时间内,如果没有收到pong,那么就是pfail,如果一个节点发现另一个节点宕机了(pfail)了,那么会发送gossip ping信息告诉其他节点,如果收到半数的都是pfail,那么这个节点的状态就更新成fail。
2、从节点过滤
master节点宕机后,从slave中选择一个晋升为master,检测每个slave节点也超时,则过滤掉,这是一个超时过滤规则。
3、从节点选举
每个slave,都有一个复制master节点数据的偏移量offset,offset越大选举时间越靠前,优先进行选举。然后所有的slave再进行投票,多数派的竞选为新的master节点。
作者:吴走走
cluster
Redis