Redis集群(Cluster)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42220174/article/details/102679737


        Redis集群是可以在多个Redis节点之间进行数据共享的架构。Redis集群通过分区容错(Partiton)来提高可用性(Availability),即使集群中有一部分节点失效或者无法进行通信,集群也可以继续处理请求。

Redis集群模式数据共享

    Redis集群有以下特点:

  • 将数据切分到多个Redis节点
  • 当集群中部分节点失效或者无法进行通信时,整个集群仍然可以处理请求。

        Redis将数据分片,每个Redis集群中包含16384个哈希槽(hash slot),Redis中存储的每个key都属于这些哈希槽中的一个。可通过计算得知每个key应该存放的具体哈希槽:key存放的哈希槽 = CRC(key) %16384,CRC(16)是计算key的CRC16检验和的。

        Redis集群中的每个Redis节点负责处理一部分哈希槽,哈希槽分布在不同的Redis节点,向集群中添加或者删除Redis节点时只需将部分哈希槽移动到插入的Redis结点或将删除的Redis结点的数据均分到其他Redis结点即可。如向Redis集群中加入节点D,只需将节点A、B、C中的部分哈希槽移动到节点D即可。

Redis集群中的一致性问题

         在谈Redis集群一致性问题前,先了解CAP定理。CAP定理指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)三者不可兼得,只能同时满足其中的两个
         Redis集群作为一个分布式系统,也存在相应的问题,Redis对可用性和分区容错性有较好的支持(AP)。因此Redis集群模式下数据一致性存在一定的问题,即Redis集群不保证强一致性
         在Redis集群中,主从节点之间的复制是异步执行的,即主节点对命令的复制工作发生在返回命令回复给客户端之后,如果每次处理命令请求都需要等待复制操作完成,那么主节点处理命令请求的速度将极大地降低——必须在性能和一致性之间做出权衡。这种情况下会存在数据一致性问题,即集群中部分节点短时间内获取不到最新的主节点新增的数据。

Redis集群架构

Redis集群容错

         判断当前结点是否下线需要集群中所有的Redis Master节点参与。如果集群中半数以上的Master节点与当前节点通信超时,则认为当前节点下线。

整个集群不可用的情况:

  • 某个Master节点下线,并且这个Master节点没有可用的Slave节点;
  • 集群中超过半数以上的Master节点下线,无论Master节点是否有Slave节点。

猜你喜欢

转载自blog.csdn.net/qq_42220174/article/details/102679737