第17章 集群

  集群是Redis提供的Redis数据库分布式方案。

  为什么需要分布式Redis

  1. 提高性能。突破单机数据库性能瓶颈。
  2. 提高可用性。通过主从复制提供故障转移,进一步提高整个系统的稳定性。

17.1 节点

  节点(Nod)是集群(Cluster)基本组成元素,节点就是普通的Redis数据库,只不过该数据库运行在进群模式下。节点之间通过Cluster Meet彼此握手实现集群化。

17.2 槽指派

  有点像HashMap,整个集群所有的数据被划分为16384个槽,每一个数据都要先经过复杂的哈希函数计算出位于哪个槽上才能进一步放到负责该槽的Redis上。这是一种去中心化的分片策略。

17.2.1 槽指派的存储

  槽指派信息存储在两个地方:1、每个Node节点内部存储该节点负责哪个槽 2、Cluster存储每一个槽由哪一个节点负责。当一个请求来到某个Node上,该Node首先检查该请求对应的槽是否是自己负责,如果是则处理,如果不是则通过Cluster中存储的槽与Node对应信息找到能够处理该请求的Node,并转发给该Node。

  

17.3 在集群中执行命令

  只有16384个槽全部分配了处理节点后集群才会处于上线状态。

  • 通过CRC32算法,其实就是一个哈希算法,对指定的key算出哈希值,然后对16383取余得到一个0-16384之间的数作为槽索引
  • 如果该槽是自己负责,则处理并相应
  • 如果不是自己负责,则活返回一个Moved错误给客户端,并携带该槽处理节点的IP和port,客户端会根据Moved的结果重新发送一次请求,并更新本地的槽映射表

17.4 重新分片

  


  

猜你喜欢

转载自www.cnblogs.com/AshOfTime/p/10802368.html
今日推荐