Redis Cluster 集群及动态扩容

Redis cluster集群认识及动态扩容机制,参考网上资料,在此整理下。

Redis单机数据库

在了解Redis Cluster之前,先了解下Redis单机数据库,Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库(可以通过修改配置文件databases支持更多,无上限)。
客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库,如要选择1号数据库:

redis> SELECT 1
OK
redis [1] >get xiaoming
(nil)

Redis Cluster了解

Redis Cluster是由多个Master-Slave构成一个完整的整体,对于用户来说,用户只关注这个数据集合,而整个数据集合的某个数据子集存储在哪个节点对于用户来说是透明的。Redis Cluster具有分布式系统的特点,也具有分布式系统如何实现高可用性与数据一致性的难点。

Redis Cluster特点如下:

  • 所有的节点相互连接;
  • 集群消息通信通过集群总线通信,,集群总线端口大小为客户端服务端口+10000,这个10000是固定值;
  • 节点与节点之间通过二进制协议进行通信;
  • 客户端和集群节点之间通信和通常一样,通过文本协议进行;
  • 集群节点不会代理查询;

Redis Cluster分区实现原理

slot(槽)

Redis Cluster中有一个16384长度的槽的概念,他们的编号为0、1、2、3……16382、16383。在Redis Cluster中,只有Master才拥有槽的所有权,如果是某个Master的slave,这个slave只负责槽的使用;这个槽是一个虚拟的槽,并不是真正存在的。Redis Cluster中的每个Master节点都会负责一部分的槽,当有某个key被映射到某个Master负责的槽,那么这个Master负责为这个key提供服务,至于哪个Master节点负责哪个槽,这是可以由用户指定的,也可以在初始化的时候自动生成(redis-trib.rb脚本)。

key 与slot的关系

键到slot的基本映射算法如下:

HASH_SLOT = CRC16(key) mod 16384 

通过key与slot的映射算法,计算出当前key应该存储在哪个slot中,从公式中可以看出,当前key与slot的映射是固定不变的。由于每个Master负责一部分slot,可知在Master节点数量调整时,slot与Master映射的关系也会调整。

扩容机制(重新分片)

在Redis Cluster 新增的Master节点是没有数据的,主节点如果没有slots的话,存取数据就都不会被选中,需要手动把slot及其中数据迁移到新增的Master中(参考Redis集群官方中文教程),操作指令如下

# redis-trib.rb reshard 192.168.10.219:6378 //下面是主要过程  

How many slots do you want to move (from 1 to 16384)? 1000 //设置此Master节点slot数1000  
What is the receiving node ID? 03ccad2ba5dd1e062464bc7590400441fafb63f2 //新节点node id 
Please enter all the source node IDs.  
 Type 'all' to use all the nodes as source nodes for the hash slots.  
 Type 'done' once you entered all the source nodes IDs.  
Source node #1:all //表示全部节点重新洗牌  
Do you want to proceed with the proposed reshard plan (yes/no)? yes //确认重新分 

参考:
Redis集群官方中文教程
Redis Cluster 分区实现原理
Redis集群 cluster-slot操作指令

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值