集群基础理解

是一个提供多个Redis分布式节点间共享数据的程序集

集群部署

Redis 集群的键空间被分割为 16384 hash个槽(slot), 集群的最大节点数量也是 16384 个

关系:cluster>node>slot>key

集群基础理解

 

分片:

Redis Cluster在设计中没有使用一致性哈希(Consistency Hashing),而是使用数据分片引入哈希槽(hash slot)来实现;一个 Redis Cluster包含16384(0~16383)个哈希槽,存储在Redis Cluster中的所有键都会被映射到这些slot中,集群中的每个键都属于这16384个哈希槽中的一个,集群使用公式slot=CRC16(key)/16384来计算key属于哪个槽,其中CRC16(key)语句用于计算key的CRC16 校验和。

按照槽来进行分片,通过为每个节点指派不同数量的槽,可以控制不同节点负责的数据量和请求数.

集群基础理解

 

当前集群有3个节点,槽默认是平均分的:

节点 A (6381)包含 0 到 5499号哈希槽.

节点 B (6382)包含5500 到 10999 号哈希槽.

节点 C (6383)包含11000 到 16383号哈希槽.

这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D, 我需要从节点 A, B, C中得部分槽到D上. 如果我像移除节点A,需要将A中得槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态.

 

redis-trib.rb 详解:

redis-trib.rb是redis作者用ruby完成的是对redis cluster管理工具,

集成在redis的源码src目录下。

 

名称

作用

call

在集群全部节点上执行命令

set-timeout

设置集群节点间心跳连接的超时时间

del-node

从集群中删除节点

reshard

在线迁移slot

check

检查集群

import

将外部redis数据导入集群

add-node

将新节点加入集群

create

创建集群

info

查看集群信息

fix

修复集群

rebalance

平衡集群节点slot数量

 

增加节点:./redis-trib.rb add-node ip:port ip:port

     第一个参数是新节点的地址,第二个参数是任意一个已经存在的节点的IP和端口.

移除节点:redis-trib del-node   ip:port `<node-id>`

  第一个参数是任意一个节点的地址,第二个节点是你想要移除的节点地址 

改变一个从节点的主节点cluster replicate master-node-id