一:实验介绍
在不影响集群对外服务的情况下,可以为集群添加节点进行扩容,也可以下线部分节点进行缩容。
原理可以抽象为槽和对应数据在不同节点之间灵活移动。
如果希望加入一个节点来实现集群扩容时,需要通过相关命令把一部分槽和数据迁移给新节点。
集群伸缩=槽和数据在节点之间的移动。
二:实验环境
现在想添加一个主节点127.0.0.1:6385及一个从节点127.0.0.1:6386
三:实验步骤
3.1 扩容集群
3.1.1 准备新节点
cp redis-.conf redis-.conf
cp redis-.conf redis-.conf
修改这两个文件的以下几个参数:
port
pidfile /var/run/redis_6385.pid
cluster-enabled yes
cluster-node-timeout
cluster-config-file"nodes-6385.conf"
#启动节点
redis-server /usr/local/redis/conf/redis-.conf&
redis-server /usr/local/redis/conf/redis-.conf&
3.1.2 加入集群
命令: redis-trib.rb add-node --slave --master-id<arg> new_host:new_port existing_host:existing_port --slave命令指定作为从节点加入集群。 如: redis-trib.rb add-node 127.0.0.1:6385127.0.0.1: redis-trib.rb add-node --slave --master-id33dc6f56d2992442af40827b8f73b2b487e9dc62 127.0.0.1: 127.0.0.1: 127.0.0.1:> cluster nodes
f823b940266c33b6b9e11817887c17a45c6c9183127.0.0.: slave c5424585ae85cfcc8074ee2017463a4de08de8ff 5connected
fc47848325254ee3ea3253ca5947afc553212f54127.0.0.: master - connected -
b29819d09405c5f111c15808a83fdb1c93eb6142127.0.0.: slave 33dc6f56d2992442af40827b8f73b2b487e9dc62 8connected
c5424585ae85cfcc8074ee2017463a4de08de8ff127.0.0.: master - connected -
4ef4f547ae119bd7758670153e54417b45668591127.0.0.: slave fc47848325254ee3ea3253ca5947afc553212f54 6connected
8636e84389a6ce864c5e99afc08e61d5095fc4f4127.0.0.: myself,master - connected -
33dc6f56d2992442af40827b8f73b2b487e9dc62127.0.0.: master - connected
c7a0e63f207885ac2e7261de635bf53703f24f66127.0.0.: slave 8636e84389a6ce864c5e99afc08e61d5095fc4f4 4connected
3.1.3 迁移槽和数据
#确定槽迁移计划 共16384个槽,四个节点,为了使得槽均衡,现计划每个节点4096个槽,因此,需要迁移4096个槽。 redis-trib提供了槽重分片功能,命令如下: redis-trib.rb reshard host:port--from <arg>--to <arg> --slots <arg> --yes –timeout <arg> --pipeline<arg> host:port为必传参数,可以是集群内任意节点地址,用来获取整个集群信息。
--from:源节点的id,如果有多个源节点,使用逗号分隔。
--to:目标节点id,目标节点只能填写一个。
--slots:需要迁移槽的总数量 示例:
[root@ocp ~]# redis-trib.rb reshard127.0.0.:
……
[OK] All nodes agree about slotsconfiguration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All slots covered. How many slots do you want to move (from 1to )? 4096 What is the receiving node ID?33dc6f56d2992442af40827b8f73b2b487e9dc62
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 #:8636e84389a6ce864c5e99afc08e61d5095fc4f4
Source node#:c5424585ae85cfcc8074ee2017463a4de08de8ff
Source node #:fc47848325254ee3ea3253ca5947afc553212f54
Source node #:done 这里需要输入done表示结束。 …… Moving slot from fc47848325254ee3ea3253ca5947afc553212f54
Moving slot from fc47848325254ee3ea3253ca5947afc553212f54
Moving slot from fc47848325254ee3ea3253ca5947afc553212f54
Do you want to proceed with the proposedreshard plan (yes/no)? yes …… #检查是否迁移成功 127.0.0.1:> cluster nodes
f823b940266c33b6b9e11817887c17a45c6c9183127.0.0.: slave c5424585ae85cfcc8074ee2017463a4de08de8ff 5connected
fc47848325254ee3ea3253ca5947afc553212f54127.0.0.: master - connected -
b29819d09405c5f111c15808a83fdb1c93eb6142127.0.0.: slave 33dc6f56d2992442af40827b8f73b2b487e9dc62 8connected
c5424585ae85cfcc8074ee2017463a4de08de8ff127.0.0.: master - connected -
4ef4f547ae119bd7758670153e54417b45668591127.0.0.: slave fc47848325254ee3ea3253ca5947afc553212f54 6connected
8636e84389a6ce864c5e99afc08e61d5095fc4f4127.0.0.: myself,master - connected -
33dc6f56d2992442af40827b8f73b2b487e9dc62127.0.0.: master - connected - --
c7a0e63f207885ac2e7261de635bf53703f24f66127.0.0.: slave 8636e84389a6ce864c5e99afc08e61d5095fc4f4 4connected #检查节点之间槽的均衡性
[root@ocp ~]# redis-trib.rb rebalance127.0.0.:
>>> Performing Cluster Check(using node 127.0.0.1:)
[OK] All nodes agree about slotsconfiguration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All slots covered.
*** No rebalancing needed! All nodes arewithin the 2.0% threshold.
3.2 收缩集群
这里把刚加入集群的端口号为6385,6386的两个节点给剔除掉。
3.2.1 迁移槽
由于每次执行reshard命令只能有一个目标节点,因此需要执行三次reshard命令。 分别迁移1365,,1366个槽。 这里只记录一次槽迁移。 [root@ocp ~]# redis-trib.rb reshard127.0.0.:
……
[OK] All nodes agree about slotsconfiguration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All slots covered. How many slots do you want to move (from 1to )? What is the receiving node ID?8636e84389a6ce864c5e99afc08e61d5095fc4f4 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#:33dc6f56d2992442af40827b8f73b2b487e9dc62
Source node #:done #查看节点信息 127.0.0.1:> cluster nodes
f823b940266c33b6b9e11817887c17a45c6c9183127.0.0.: slave c5424585ae85cfcc8074ee2017463a4de08de8ff connected
fc47848325254ee3ea3253ca5947afc553212f54127.0.0.: master - connected -
b29819d09405c5f111c15808a83fdb1c93eb6142127.0.0.: slave fc47848325254ee3ea3253ca5947afc553212f54 connected
c5424585ae85cfcc8074ee2017463a4de08de8ff127.0.0.: master - connected - -
4ef4f547ae119bd7758670153e54417b45668591127.0.0.: slave fc47848325254ee3ea3253ca5947afc553212f54 connected
8636e84389a6ce864c5e99afc08e61d5095fc4f4127.0.0.: myself,master - connected -
33dc6f56d2992442af40827b8f73b2b487e9dc62127.0.0.: master - connected
c7a0e63f207885ac2e7261de635bf53703f24f66127.0.0.: slave 8636e84389a6ce864c5e99afc08e61d5095fc4f4 9connected
3.2.2 下线节点
命令: redis-trib.rb del-node {host:port}{donwNodeId} 先下线从节点 [root@ocp ~]# redis-trib.rb del-node127.0.0.: b29819d09405c5f111c15808a83fdb1c93eb6142
>>> Removing nodeb29819d09405c5f111c15808a83fdb1c93eb6142 from cluster 127.0.0.1:
>>> Sending CLUSTER FORGETmessages to the cluster...
>>> SHUTDOWN the node. 再下线主节点 [root@ocp ~]# redis-trib.rb del-node127.0.0.: 33dc6f56d2992442af40827b8f73b2b487e9dc62
>>> Removing node33dc6f56d2992442af40827b8f73b2b487e9dc62 from cluster 127.0.0.1:
>>> Sending CLUSTER FORGETmessages to the cluster...
>>> SHUTDOWN the node. #确认节点状态 127.0.0.1:> cluster nodes
f823b940266c33b6b9e11817887c17a45c6c9183127.0.0.: slave c5424585ae85cfcc8074ee2017463a4de08de8ff connected
fc47848325254ee3ea3253ca5947afc553212f54127.0.0.: master - connected -
c5424585ae85cfcc8074ee2017463a4de08de8ff 127.0.0.1:6380master - connected - -
4ef4f547ae119bd7758670153e54417b45668591127.0.0.: slave fc47848325254ee3ea3253ca5947afc553212f54 connected
8636e84389a6ce864c5e99afc08e61d5095fc4f4127.0.0.: myself,master - connected -
c7a0e63f207885ac2e7261de635bf53703f24f66127.0.0.: slave 8636e84389a6ce864c5e99afc08e61d5095fc4f4 9connected
---------------------
转载地址如下
作者:雅冰石
来源:CSDN
原文:https://blog.csdn.net/yabingshi_tech/article/details/78550185
版权声明:本文为博主原创文章,转载请附上博文链接!
--Redis集群搭建可以参考:
http://blog.csdn.net/yabingshi_tech/article/details/78539871
redis集群伸缩【转】的更多相关文章
-
Redis 集群伸缩原理
Redis 节点分别维护自己负责的槽和对应的数据.伸缩原理:Redis 槽和对应数据在不同节点之间移动 环境:CentOS7 搭建 Redis 集群 一.集群扩容 1. 手动扩容 (1) 准备节点 9 ...
-
Redis学习总结(六)--Redis集群伸缩
我们在上一章讲了如何创建集群,今天我们来实现下集群的伸缩. 添加节点 操作流程 1.启动节点 2.将节点加入到集群中 3.将数据槽从原来的节点迁移部分到新节点上 实践 1)准备两个新节点并启动 [ro ...
-
Redis集群伸缩
集群扩容 前提准备,目前集群中一共有6台机器,端口号分别是6381.6382.6383.6384.6385.6386 1) 准备新节点 准备两个新节点,端口号为6387和6388,配置和以前集群配置一 ...
-
Redis系列(三):Redis集群的水平扩展与伸缩
一.Redis集群的水平扩展 Redis3.0版本以后,有了集群的功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,接下来介绍下Redis高可用集群如何做水平扩展,在原 ...
-
Redis集群案例与场景分析
1.背景 Redis的出现确实大大地提高系统大并发能力支撑的可能性,转眼间Redis的最新版本已经是3.X版本了,但我们的系统依然继续跑着2.8,并很好地支撑着我们当前每天5亿访问量的应用系统.想当年 ...
-
Redis集群最佳实践
今天我们来聊一聊Redis集群.先看看集群的特点,我对它的理解是要需要同时满足高可用性以及可扩展性,即任何时候对外的接口都要是基本可用的并具备一定的灾备能力,同时节点的数量能够根据业务量级的大小动态的 ...
-
深入剖析Redis系列: Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
-
Redis集群增加节点和删除节点
本文主要是承接上一篇文章Redis集群的离线安装成功以后,我们如何进行给集群增加新的主从节点(集群扩容)以及如何从集群中删除节点(集群缩容),也就是集群的伸缩,集群伸缩的原理是控制虚拟槽和数据在节点之 ...
-
03 . Redis集群
Redis集群方案 Redis Cluster 集群模式通常具有 高可用.可扩展性.分布式.容错等特性.Redis分布式方案一般有两种 客户端分区方案 客户端 就已经决定数据会被 存储到哪个 redi ...
随机推荐
-
Qt 5.0+ 中 connect 新语法与重载函数不兼容问题的解决方法,以及个人看法
Qt 5.0+ 版本提供了 connect 的新语法,相比之前的语法新语法可以提供编译期检查,使用也更方便.可是使用过程中发现一个小问题——当某个 signal 和成员函数是重载关系的时候,qmake ...
-
搭建一个Mongodb (Windows) 版本
因为有项目需要借助nosql 做一个中间层,所以选择了Mongodb 来搞,其实之前呢已经搭建过这部分的环境,这次再次搭建也是记录一下,当时给自己的一个扫盲123教程 借助Mongodb 其实也是缓存 ...
-
Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json &; pickle
目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...
-
Android酷炫实用的开源框架(UI框架) 转
Android酷炫实用的开源框架(UI框架) 前言 忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮 ...
-
linux学习心得之vim/Cvim篇
linux学习心得之vim/Cvim篇 在linux 下,vim 时一种最常见的编辑器,很多linux的发行版就自带了.我的是CentOS 6.3. 基本上Vim共分为3种模式,分别是一般模式,编辑模 ...
-
Java关于日期的计算持续汇总~
/** * 00 * 描述:传入Date date.转为 String yyyyMMdd. * [时间 2019-04-18 15:41:12 作者 陶攀峰] */ public static Str ...
-
css实现三角形相关
1.css样式面包屑导航条实现矩形和三角箭头拼接 .cssTest { font-family: PingFangSC-Regular; font-size: 16px; color: #333333 ...
-
Java设计模式系列之装饰者模式
装饰者模式的定义 动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案 装饰者模式的UML类图 一般来说装饰者模式有下面几个参与者: Component:装饰者和被装饰者共同 ...
-
angular浏览器滚动条滚动到指定element 触发事件
angular.module('app').directive('ScrollTrigger', () => { return { restrict: "A", link:f ...
-
SQL 函数 DateDiff()
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]]) 描述 返回两个日期之间的时间间隔. 语法 DateDiff( ...