第17章 集群

Posted ashoftime

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第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 重新分片

  


  

以上是关于第17章 集群的主要内容,如果未能解决你的问题,请参考以下文章

第17章-golang实现简易的分布式系统

分库分表:超清-MyCAT+MySQL 搭建高可用企业级数据库集群

[云原生专题-17]:容器 - docker自带的集群管理工具swarm - 简介原理架构

MySQL数据库集群-PXC方案

《Elasticsearch 源码解析与优化实战》第3章:集群启动流程

《Elasticsearch 源码解析与优化实战》第3章:集群启动流程