Redis集群伸缩

集群扩容

前提准备,目前集群中一共有6台机器,端口号分别是6381、6382、6383、6384、6385、6386

1) 准备新节点

准备两个新节点,端口号为6387和6388,配置和以前集群配置一样,并启动这个两个节点。

2) 加入集群

进入集群内任意节点,使用cluster meeet命令即可使新节点加入到集群当中。

新节点刚开始都是主节点状态,但是由于没有负责的槽,所以不能接受任何读写操作。对于新节点的后续操作一般有两种选择:

◆ 为它迁移槽和数据实现扩容

◆ 作为其他主节点的从节点负责故障转移

redis-trib.rb工具也实现了为现有集群添加新节点的命令,还实现了直接添加从节点的支持,对于上述的扩容操作,可以采用如下命令实现新节点的加入:

redis-trib.rb add-node 127.0.0.1:6387 127.0.0.1:6381

redis-trib.rb add-node 127.0.0.1:6388 127.0.0.1:6381

3) 迁移槽和数据,将6381中的部分槽迁移到6387中

  a) 使用redis-trib.rb槽重分片命令:

  

  b) 需要确认迁移的槽数量,输入2000个

  

  c) 输入6387的节点ID作为目标节点,目标节点只能指定一个:

  

  d) 之后输入源节点的ID,这里分别输入6381、6382和6383三个节点ID最后用done表示结束:

  

  e) 数据迁移之前会打印出所有的槽从源节点到目标节点的计划,确认计划无误后输入yes执行迁移工作,计划执行完成之后reshard命令自动退出。

4) 添加从节点

扩容之前把6387和6388节点加入到集群,节点6387迁移了部分槽和数据作为主节点,但相比其他主节点目前还有从节点,因此该节点不具备故障转移的能力。这时需要把节点6388作为6387的从节点,从而保证整个集群的高可用。这里需要注意,在集群模式下,以前的主从配置命令slaveof添加从节点操作不再支持,执行如下命令,启动ID为master的ID,即6387的ID:

验证配置结果:

集群收缩

目前的节点状态如下:

1) 迁移槽

现在将6383和6386节点下线,6383是主节点,负责槽11589-16383,6386是它的从节点,下线6383之前需要把负责的槽迁移到其他节点。

收缩正好和扩容迁移方向相反,6383变为源节点,其他主节点变为目标节点,源节点需要把自己负责的4795个槽均匀地迁移到其他主节点中。由于每次执行reshard命令只能有一个目标节点,因此需要执行3次reshard命令,分别迁移1598、1598、1599个槽。迁移过程和扩容的操作一样,只是需要注意目标节点和源节点,不用迁移错了。

迁移完毕之后,查出集群状态,可以看到6383节点已经不负责任何槽了

2) 忘记节点

可以使用redis的cluster forget {downNodeId}命令来忘记节点,但是推荐使用redis-trib.rb命令来忘记节点,其中的ID为要下线的节点ID:

3) 再次查看集群状态

原文地址:https://www.cnblogs.com/skyer5217/p/8994390.html

时间: 2024-11-05 15:45:31

Redis集群伸缩的相关文章

Redis系列(三):Redis集群的水平扩展与伸缩

一.Redis集群的水平扩展 Redis3.0版本以后,有了集群的功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,接下来介绍下Redis高可用集群如何做水平扩展,在原集群的6个节点的基础上新增2个节点,由原来的3主3从变成4主4从,原先的3主3从部署详见Redis系列(二):Redis高可用集群,如下图: 二.水平扩展具体操作 ① 将redis-5.0.2文件夹拷贝到新的主机192.168.160.154上去,(1)scp -r /usr/local/redis

Redis的集群(伸缩)

Redis集群提供了节点的扩容和收缩方案,在不影响集群对外服务的情况下,可以为集群添加节点进行扩容,也可以下线节点进行缩容.其中的原理可理解为槽和对应的数据在不同节点间移动. 扩容集群 在Redis的集群(搭建)中搭建了6个节点,其中3个主节点分别维护自己负责的槽和数据,为了后续测试,填充若干测试数据. $ for i in $(seq 1 70000); do redis-cli -p 6879 -c set key:migrate:test:${i} ${i}; done $ redis-t

Redis 集群介绍

Redis 集群介绍 开源键值对存储数据库Redis在4月1日发布了3.0.0版.主要新特性包括:Redis Cluster,Redis子集的分布式实现:新的"嵌套字符串"对象编码减少缓存遗漏,大幅提高某些工作负荷的速度:等等.开发者Salvatore Sanfilippo表示,Redis 3.0.0是第一个原生支持集群的稳定版本,可能需要1到2年才能成熟,它对Redis生态系统具有重要意义,Redis Cluster将向用户提供某种程度的自动伸缩和容错能力,将改变用户看待Redis的

深入剖析Redis系列: Redis集群模式搭建与原理详解

前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 Redis 在 分布式 方面的需求.当遇到 单机内存.并发.流量 等瓶颈时,可以采用 Cluster 架构方案达到 负载均衡 的目的. 本文将从 集群方案.数据分布.搭建集群.节点通信.集群伸缩.请求路由.故障转移.集群运维 等几个方面介绍 Redis Cluster. 正文 1. Redis集群方

redis 集群

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

Redis集群的高可用测试(含Jedis客户端的使用)

Redis集群的使用测试(Jedis客户端的使用) 1.  Jedis客户端建议升级到最新版(当前为2.7.3),这样对3.0.x集群有比较好的支持. https://github.com/xetorthio/jedis http://mvnrepository.com/artifact/redis.clients/jedis 2.  直接在Java代码中链接Redis集群: // 数据库链接池配置 JedisPoolConfig config = new JedisPoolConfig();

redis集群

redis集群 redis锁 1.Redis集群是一个提供在多个redis节点间共熟数据的程序集. 2.redis集群的数据分片(1)Redis没有使用一致性hash而是引入hash槽的概念.(2)Redis集群共有16384个hash槽(不管redis有几台机器,整个集群一共有16384个hash槽).每个key经过CRC16校验后,对16384取余来决定放到哪个hash槽.(3)比如一个集群有A.B.C.3台机器,那么 节点A,包括0到5500号hash槽 节点B,包含 5501到11000

剑指架构师系列-Redis集群部署

初步搭建Redis集群 克隆已经安装Redis的虚拟机,我们使用这两个虚拟机中的Redis来搭建集群. master:192.168.2.129 端口:7001 slave:192.168.2.132 端口:7002 sentinel:192.168.2.129 端口:26379 来说一下这个sentinel,sentinel是一个管理redis实例的工具,它可以实现对redis的监控.通知.自动故障转移.sentinel不断的检测redis实例是否可以正常工作,通过API向其他程序报告redi

Redis集群错误

部署Redis集群时出现如下错误: >>> Creating cluster>>> Performing hash slots allocation on 9 nodes...Using 4 masters:192.168.247.40:7000192.168.247.40:7001192.168.247.40:7002192.168.247.40:7003Adding replica 192.168.247.40:7004 to 192.168.247.40:7000