Redis-13-集群介绍

上文中,我们搭建的是主从结构的redis,那所有的写操作都是在master上的,然后同步更新到slave,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重, 这时候就需要用到集群来提升reids的性能, 下面来具体看一下如何搭建redis集群

集群原理

官方给出的集群方案采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接,架构图如下:
redis集群架构图

客户端与redis节点直连,连接集群中的任意一个节点即可,不需要中间的proxy层,集群中的redis节点彼此互联,内部使用二进制协议优化传输速度和带宽

redis集群中内置了16384个哈希槽,当需要在redis集群中放置一个key-value时,reids先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编号在0-16383 之间的哈希槽,redis会根据节点数据量大致均等的将哈希槽映射到不同节点

比如说集群又三个节点,槽分布的值如下:

  • server1: 0-5460
  • server2: 5461-10922
  • server3: 10923-16383

容错机制

选举过程是所有主节点(Master)参与,如果过半数的Master认为故障节点挂了,那就会将这个节点踢出集群,然后这个故障节点对应的slave节点就会升级成Master

集群中每个节点都是只储存部分信息,所以当主节点挂掉之后,又没有从节点替补的情况下,集群就会挂掉,因为它已经不是一个完整的集群了

搭建一个集群需要一台以上的节点,然后我们这里还是用上文中的,三个节点来搭建,然后为了防止这三个节点挂掉而导致集群崩溃,我们还需要给这三个节点都配一个从节点,来保证高可用,那一共就是6个节点

怎样投票

投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过cluster-node-timeout设置的时间,认为当前master节点挂掉.

集群挂掉的条件

如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot(槽)映射不完整时进入fail状态

如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态,当集群不可用时,所有对集群的操作做都不可用

搭建方法

这里推荐使用docker的方式搭建,方便也很快,可以参考docker分类下的文章,这里不就不多说了
如果用传统的方式搭建的话,可以参考这里:传送门

集群架构

集群架构其实有很多种,在实际生产环境中需要根据具体需求来选择不同的集群架构,上面这个只是一个redis官方给出的架构模式