Redis 集群介绍:

Redis3.0 版本之后支持 Cluster。集群要求集群节点中必须要支持主从模式,也就说集群中的主节点(Master)至少要有一个从节点(Slave)

每一个蓝色的圈都代表着一个 redis 集群中的主节点。它们任何两个节点之间都是相互连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作

redis集群添加从节点 redis集群主节点选举_redis集群添加从节点

Redis-Cluster 选举:容错

一半以上的节点去 ping 一个节点的时候没有回应,集群就认为这个节点宕机了,然后去连接它的从节点。如果某个节点和所有从节点全部挂掉,这个(节点)就进入 fail 状态。还有就是如果有一半以上的主节点宕机,那么我们(集群)同样进入 fail 了状态。这就是我们的 redis 的投票机制,具体原理如下图所示:

redis集群添加从节点 redis集群主节点选举_插槽_02

 

投票过程是集群中所有 master 参与,如果半数以上 master 节点与 master 节点通信超时

(cluster-node-timeout),认为当前 master 节点挂掉.

什么时候整个集群不可用(cluster_state:fail)?

1)    如果集群任意 master 挂掉,且当前 master 没有 slave。此时集群进入 fail 状态,也可以理解成集群的 slot 映射[0-16383]不完整时进入 fail 状态。

1)    如果集群超过半数以上 master 挂掉,无论是否有 slave,集群进入 fail 状态.

Redis-Cluster 数据存储

        当我们的存取的 key 到达的时候,redis 会根据 crc16 的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽(类比数组中的下标索引),通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作

redis集群添加从节点 redis集群主节点选举_redis集群添加从节点_03

 

set name kevin

1.    使用 CRC16 算法对 key 进行计算,得到一个数字,然后对数字进行取余。

CRC16 : name = 26384
26384%16384 = 10000

1.    查找到包含 10000 插槽的节点,比如是 node2,自动跳转到 node2

1.    在 node2 上执行 set name kevin 命令完成数据的插入

1.    如果在 node1 上执行 get name,先使用 CRC16 算法对 key 进行计算,再使用 16384 取余,得到插槽的下标,然后跳到拥有该插槽的 node2 中执行 get name 命令,并返回结果。