Redis集群重新分片(新增/移除节点)【理论】

redis集群重新分片原理:(增加或移除节点)

以增加节点为例:

我们只需要将已经分配给节点的哈希槽(hash slot),重新分配即可。

注:hash slot重新分配时,如果槽中存在key-value,那么key-value也将一起被分配出去。

例如:

node1的哈希槽:0-5000

node2的哈希槽:5001-10000

node3的哈希槽:10001-16383

现在新增node4:

我们可以将node3的哈希槽调整为:10001-15000、node4的哈希槽:15001-16383

也可以在三个现有节点中,各自分出一部分哈希槽,给新的节点。

redis集群的重新分片操作是由redis的集群管理软件redis-trib负责执行的,

但它不支持自动分片,需要自己计算从哪些节点上分配slot。

redis集群在重新分片时,客户端获取数据原理:  


重新分片时,集群不需要下线,并且源节点和目标节点都可以继续处理命令请求。

在hash slot迁移过程中(一部分key-value在node3中,另一部分key-value在node4中)

如果客户端向node3发送一个与数据库key有关的命令:

1)node3会先在自己的数据库里面查找请求的key,

如果找到,直接执行客户端发送的命令。

2)如果没找到,node3给客户端返回一个ASK错误,指引客户端转向node4,

并且客户端需要再次发送想要执行的key相关的命令。

3)客户端转向node4,首先发送ASKING命令,然后再次发送想要执行的key相关的命令。

如果直接发送想要执行的key相关的命令,node4此时并不处理,

因为key所在的槽还未迁移完,槽还属于node3,会返回错误给客户端。

但如果先发送ASKING命令,node4在执行key相关的命令时,

不仅会检查key所属槽是否属于自己,

还会检查migration_slots_to数组(正在迁往自己的槽)

判断key相关的槽是否正在迁往自己,如果是的话,则执行key相关的命令。

原文地址:http://blog.51cto.com/13690439/2119294

时间: 2024-10-05 04:50:32

Redis集群重新分片(新增/移除节点)【理论】的相关文章

redis集群与分片(2)-Redis Cluster集群的搭建与实践

Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接.其redis-cluster架构图如下: 其结构特点: 1.所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.     2.节点的fail是通过集群中超过半

Redis集群中,是选择奇数节点还是偶数节点?(理论)

我们来通过一组组示例进行分析: 3节点环境:1个master.2个slave 存储空间:最大等于1个节点的容量.(如果是2个master的话,那么数据会丢失一部分) 冗余性:允许1个节点故障. 4节点环境:2个master.2个slave 存储空间:2个节点的容量. 冗余性:允许1个节点故障.(集群中,半数以上节点认为故障,才会选举.) 5节点环境:2个master.3个slave 存储空间:2个节点的容量. 冗余性:允许2个节点故障. 6节点环境:3个master.3个slave 存储空间:3

redis集群操作:增加和减少节点

一  增加节点: STEP1:  我们新建俩个服务,按照之前搭建的集群方式新增俩个节点:(一主一从master.slave) Master:7007   Slave: 7008 (1)创建7007/7008文件夹.拷贝redis.conf文件到对于的7007,7008目录下要进行修改配置文件. <root@localhost redis-cluster># mkdir 7007 7008 <root@localhost redis-cluster># cp 7001/redis.c

自学总结redis第四部分(集群搭建以及增加和删除节点)

十六.redis集群 参考网站"https://redis.io/topics/cluster-tutorial" 16.1集群搭建 #下述是在一台机器模拟六个节点,3主3从 [[email protected] ~]# cd /application/ [[email protected] application]# cd redis [[email protected] redis]# mkdir redis-cluster [[email protected] redis-clu

Redis集群知识解析

redis集群在启动的时候就自动在多个节点间分好片.同时提供了分片之间的可用性:当一部分redis节点故障或网络中断,集群也能继续工作.但是,当大面积的节点故障或网络中断(比如大部分的主节点都不可用了),集群就不能使用. 所以,从实用性的角度,Redis集群提供以下功能: 自动把数据切分到多个redis节点中 当一部分节点挂了或不可达,集群依然能继续工作 Redis集群的TCP端口 redis集群中的每个节点都需要建立2个tcp连接,监听这2个端口:一个端口称之为“客户端端口”,用于接受客户端指

redis 集群

redis 集群 redis集群是redis提供分布式数据库方案, 集群通过分片(Sharding)来进行数据共享,并提供复制和故障转移功能. 节点 redis集群通常由多个节点(node)组成,在开始每个node 都是相互独立的. 要组建成真正可工作的集群,我们必须将各个独立的节点连接起来,构成一个包含多个节点的集群. 命令 cluster meet <ip> <port> 向一个node 发送命令 cluster meet,让节点与ip/port所指定的节点 进行握手(hand

Redis集群搭建

Redis集群是一个提供在多个Redis节点间共享数据的程序集. Redis集群中不支持处理多个keys的命令. Redis集群通过分区来提供一定程度的可用性.在某个节点宕机或者不可用的时候可以继续处理命令. Redis集群数据分片 在Redis集群中,使用数据分片(sharding)而不是一致性hash(consistency hashing)来实现,一个Redis集群包含16384个哈希槽(hash slot),数据库中的每个键都存在这些哈希槽中的某一个,通过CRC16校验后对16384取模

Redis集群搭建&amp;访问

集群搭建步骤 1.创建多个节点: 2.为每个节点指派槽,并将多个节点连接起来,组成一个集群: 3.当集群数据库的16384个槽都有节点在处理时,集群进入上线状态: 要求:搭建一个包含6个节点的Redis集群,其中三个主节点,三个从节点,每个主节点都有一个从节点 注:在极端情况下,如果将16384个槽都指派给一个主节点,那么只有一个主节点也可以让集群进入上线状态,但是要让集群的故障转移特性生效,最起码要有3个主节点,而要让故障转移真正有意义,至少要为三个主节点分别设置一个从节点,这也是本例子中使用

高性能网站架构设计之缓存篇(5)- Redis 集群(上)

集群技术是构建高性能网站架构的重要手段,试想在网站承受高并发访问压力的同时,还需要从海量数据中查询出满足条件的数据,并快速响应,我们必然想到的是将数据进行切片,把数据根据某种规则放入多个不同的服务器节点,来降低单节点服务器的压力. 上一篇我们讲到了 Redis 的主从复制技术,当实现了多节点的 master-slave 后,我们也可以把它叫做集群,但我们今天要讲的集群主要是利用切片技术来组建的集群. 集群要实现的目的是要将不同的 key 分散放置到不同的 redis 节点,这里我们需要一个规则或