集群扩容

前提准备,目前集群中一共有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) 再次查看集群状态

Redis集群伸缩的更多相关文章

  1. redis集群伸缩【转】

    一:实验介绍 在不影响集群对外服务的情况下,可以为集群添加节点进行扩容,也可以下线部分节点进行缩容. 原理可以抽象为槽和对应数据在不同节点之间灵活移动. 如果希望加入一个节点来实现集群扩容时,需要通过 ...

  2. Redis 集群伸缩原理

    Redis 节点分别维护自己负责的槽和对应的数据.伸缩原理:Redis 槽和对应数据在不同节点之间移动 环境:CentOS7 搭建 Redis 集群 一.集群扩容 1. 手动扩容 (1) 准备节点 9 ...

  3. Redis学习总结(六)--Redis集群伸缩

    我们在上一章讲了如何创建集群,今天我们来实现下集群的伸缩. 添加节点 操作流程 1.启动节点 2.将节点加入到集群中 3.将数据槽从原来的节点迁移部分到新节点上 实践 1)准备两个新节点并启动 [ro ...

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

    一.Redis集群的水平扩展 Redis3.0版本以后,有了集群的功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,接下来介绍下Redis高可用集群如何做水平扩展,在原 ...

  5. Redis集群案例与场景分析

    1.背景 Redis的出现确实大大地提高系统大并发能力支撑的可能性,转眼间Redis的最新版本已经是3.X版本了,但我们的系统依然继续跑着2.8,并很好地支撑着我们当前每天5亿访问量的应用系统.想当年 ...

  6. Redis集群最佳实践

    今天我们来聊一聊Redis集群.先看看集群的特点,我对它的理解是要需要同时满足高可用性以及可扩展性,即任何时候对外的接口都要是基本可用的并具备一定的灾备能力,同时节点的数量能够根据业务量级的大小动态的 ...

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

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  8. Redis集群增加节点和删除节点

    本文主要是承接上一篇文章Redis集群的离线安装成功以后,我们如何进行给集群增加新的主从节点(集群扩容)以及如何从集群中删除节点(集群缩容),也就是集群的伸缩,集群伸缩的原理是控制虚拟槽和数据在节点之 ...

  9. 03 . Redis集群

    Redis集群方案 Redis Cluster 集群模式通常具有 高可用.可扩展性.分布式.容错等特性.Redis分布式方案一般有两种 客户端分区方案 客户端 就已经决定数据会被 存储到哪个 redi ...

随机推荐

  1. 【线段树】Bzoj1798 [AHOI2009] 维护序列

    Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...

  2. 使用NOOBS给树莓派安装系统Raspbian

    使用NOOBS给树莓派安装系统Raspbian --英文原版教程:https://www.raspberrypi.org/learning/software-guide/quickstart/ 1.原 ...

  3. 面试必问!Java 多线程中两个线程交替执行,一个输出偶数,一个输出奇数

    前言 楼主今天在面经上看到这个题,挺有意思,小小的题目对多线程的考量还挺多.大部分同学都会使用 synchronized 来实现.楼主今天带来另外两种优化实现,让你面试的时候,傲视群雄! 第一种 sy ...

  4. Map集合中,关于取值和遍历的相关操作

    这是自己的关于map集合的相关操作的小研究,分享给大家. 主要代码内容包含以下: 1,map集合的遍历 2,根据key值获取value值 3,根据value值获取key值 4,返回最大value值对应 ...

  5. 用js制作数码时钟

    实现效果 实现效果 图片素材 图片素材 原理分析 用setInterval(fn, 1000)来循环刷新图片. 用date对象的getHours().getMinutes().getSeconds() ...

  6. JAVA基础第一章-初识java

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 从今天开始,我将会持续更新java基础知识,欢迎关注. java的诞生 ...

  7. Linux安装任意版本的dotnet环境

    下载地址 https://www.microsoft.com/net/download/dotnet-core/2.1 安装符合服务器CPU架构的二进制包. 如果架构不对,会出现一下错误: -bash ...

  8. go语言调度器源代码情景分析之四:函数调用栈

    本文是<go调度器源代码情景分析>系列 第一章 预备知识的第3小节. 什么是栈 栈是一种“后进先出”的数据结构,它相当于一个容器,当需要往容器里面添加元素时只能放在最上面的一个元素之上,需 ...

  9. 干货|一个案例学会Spring Security 中使用 JWT

    在前后端分离的项目中,登录策略也有不少,不过 JWT 算是目前比较流行的一种解决方案了,本文就和大家来分享一下如何将 Spring Security 和 JWT 结合在一起使用,进而实现前后端分离时的 ...

  10. Asp.Net Core对接钉钉群机器人

    钉钉作为企业办公越来越常用的软件,对于企业内部自研系统提供接口支持,以此来打通多平台下的数据,本次先使用最简单的钉钉群机器人完成多种形式的消息推送,参考钉钉开发文档中自定义机器人环节,此次尝试所花的时 ...