Redis集群增加节点和删除节点
本文主要是承接上一篇文章Redis集群的离线安装成功以后,我们如何进行给集群增加新的主从节点(集群扩容)以及如何从集群中删除节点(集群缩容),也就是集群的伸缩,集群伸缩的原理是控制虚拟槽和数据在节点之间进行移动,通过实际操作来整理一下集群的伸缩。
上篇文章中搭建好的集群为三主三从,端口号为7000、7001、7002、7003、7004、7005。
查看集群启动情况:ps -ef | grep redis
查看集群的slots分配情况以及节点之间的主从关系:
首先登陆节点7000:redis-cli -p 7000 -h 192.168.182.132 -c //注意不要丢了-c
cluster nodes 查看集群节点信息
在本例中我们先增加两个节点:主节点7006和从节点7007,并给7006分配4096个slots,设置7007为7006的从节点,然后再将这两个节点从集群中删除,一定要先删除主节点,再删除从节点,要不然故障转移会生效。
一、集群的扩容
1.准备新的节点
在集群目录redis_cluster目录下增加redis7006和redis7007目录
mkdir redis7006
mkdir redis7007
增加完成后的目录
复制端口7000的redis.conf配置文件到redis7006和redis7007目录下,并修改配置文件中的端口为对应目录的端口号。
例如redis7006下的redis.conf文件的内容为:
port 7006
bind 192.168.182.132 //本机IP
daemonize yes //设置为后台运行
pidfile /var/run/redis-7006.pid
cluster-enabled yes //开启集群
cluster-config-file node-7006.conf
cluster-node-timeout 15000
appendonly yes
准备完成后,启动两个新的redis节点:
redis-server redis7006/redis.conf redis-server redis7007/redis.conf ps -ef | grep redis //查看新的redis节点是否启动成功
启动以后登录7006查看节点情况:
redis-cli -p 7006 -h 192.168.182.132 -c cluster nodes
2.添加主节点
(1)向集群中添加节点7006,注意一定要保证节点里面没有添加过任何数据,不然添加会报错。
cd /usr/local/redis/redis/src ./redis-trib.rb add-node 192.168.182.132:7006 192.168.182.132:7000
//第一次节点为新增的节点 第二个节点为集群中的节点
添加成功:
可以看到使用addnode命令来添加节点,第一个参数是新节点的地址,第二个参数是任意一个已经存在的节点的IP和端口. 我们可以看到新的节点已经添加到集群中:
新节点7006现在已经连接上了集群, 成为集群的一份子, 并且可以对客户端的命令请求进行转向了, 但是和其他主节点相比, 新节点还有两点区别:
- 新节点没有包含任何数据, 因为它没有包含任何哈希槽.
- 尽管新节点没有包含任何哈希槽, 但它仍然是一个主节点, 所以在集群需要将某个从节点升级为新的主节点时, 这个新节点不会被选中。
接下来, 只要使用 redis-trib 程序, 将集群中的某些哈希桶移动到新节点里面, 新节点就会成为真正的主节点了。
(2)为主节点7006分配虚拟槽
cd /usr/local/redis/redis/src ./redis-trib.rb reshard 192.168.182.132:7001 //可以为任意的节点 在此登录的7001只是作为客户端去访问的
执行后:
因为我们增加7006为主节点后,一共存在四个主节点,为了平均分配我们需要给7006分配16384除以4等于4096个节点,所以我们输入4096,按enter继续:
输入7006的节点ID,按enter继续:
从哪些主节点抽取槽到新节点中:all为所有主节点,done:指定节点,在这里我们输入all,按enter继续:
输入yes后按enter开始给7006分配虚拟槽,分配完成后:
登录集群查看一下集群的状态:
redis-cli -p 7000 -h 192.168.182.132 -c cluster nodes
至此主节点已经添加完毕了,我们的集群由三主三从变成了四主三从。
3.添加从节点7007
(1)使用add-node添加新节点
cd /usr/local/redis/redis/src ./redis-trib.rb add-node 192.168.182.132:7007 192.168.182.132:7000
//第一次节点为新增的节点 第二个节点为集群中的节点
加入集群成功,登录到集群中查看一下集群状态:
7007还是一个Master节点,而且没有拥有自己的slot槽。那么我们接下来要让它变成从节点。
(2)将7007变为7006的 从节点
使用CLUSTER REPLICATE 命令改变一个从节点的主节点。
redis-cli -p 7007 -h 192.168.182.132 cluster replicate 52d169e7011ccdf10f99c1d83f92409dcc37ab55 //后面的字符串为节点7006的节点ID
设置成功后查看一下:
集群的从节点7007添加成功。
二、集群的缩容
只要使用 del-node
命令即可:
./redis-trib del-node 127.0.0.1:7000 <node-id>
第一个参数是任意一个节点的地址,第二个节点是你想要移除的节点地址。
使用同样的方法移除主节点,不过在移除主节点前,需要确保这个主节点是空的. 如果不是空的,需要将这个节点的数据重新分片到其他主节点上. 替代移除主节点的方法是手动执行故障恢复,被移除的主节点会作为一个从节点存在,不过这种情况下不会减少集群节点的数量,也需要重新分片数据.
1.删除从节点
删除节点用del-node命令。此命令需要制定删除节点的ip和端口,以及节点的id。
cd /usr/local/redis/redis/src ./redis-trib.rb del-node 192.168.182.132:7007 7007节点ID
删除成功后:
删除后我们再次查看集群的节点信息,如下所示,7007从节点已经被移除掉。
2.删除主节点
(1)将主节点7006的slots分配到其他主节点上
cd /usr/local/redis/redis/src ./redis-trib.rb reshard 192.168.182.132:7006
选择完这几项以后,回车继续:
输入yes,表示接受这个计划,然后回车,完成7006节点的槽的移除。
登录集群查看当前集群情况:
节点7006上没有任何槽。
(2)使用del-node命令来删除7006主节点。
cd /usr/local/redis/redis/src ./redis-trib.rb del-node 192.168.182.132:7006 52d169e7011ccdf10f99c1d83f92409dcc37ab55
删除成功:
最后登录查看集群又恢复到了三主三从的结构了,只是从刚开始的均匀分配变成了7000端口的主节点多了4096个slots。
Redis集群增加节点和删除节点的更多相关文章
- adoop集群动态添加和删除节点
hadoop集群动态添加和删除节点说明 上篇博客我已经安装了Hadoop集群(hadoop集群的安装步骤和配置),现在写这个博客我将在之前的基础上进行节点的添加的删除. 首先将启动四台机器(一主三从) ...
- redis学习五,redis集群搭建及添加主从节点
redis集群 java架构师项目实战,高并发集群分布式,大数据高可用,视频教程 在redis3.0之前,出现了sentinel工具来监控各个Master的状态(可以看上一篇博客).如果Master异 ...
- centos6搭建redis集群搭建(单机多节点)
一.安装redis 1.安装gcc环境 yum install gcc-c++ 2.下载源码包并解压 wget http://download.redis.io/releases/redis-3.2. ...
- redis集群扩容(添加新节点)
一.创建节点(接上文) 1.在H1服务器/root/soft目录下创建7002目录 2.将7001目录的配置文件redis.conf拷贝到7002,并修改配置文件的端口 3.进入 redis-5.0. ...
- Java连接redis集群操作存储、删除以及获取值
pom文件添加: <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> &l ...
- Redis集群搭建,伪分布式集群,即一台服务器6个redis节点
Redis集群搭建,伪分布式集群,即一台服务器6个redis节点 一.Redis Cluster(Redis集群)简介 集群搭建需要的环境 二.搭建集群 2.1Redis的安装 2.2搭建6台redi ...
- Redis集群研究和实践(基于redis 3.0.5)
前言 redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用.现在的2.x的稳定版本是2.8.19,也是我们项目中普遍用到的版本. redis在年初发布了3.0. ...
- Couchbase集群和Redis集群解析
Couchbase集群和Redis集群解析 首先,关于一些数据库或者是缓存的集群有两种结构,一种是Cluster;一种是master-salve. 关于缓存系统一般使用的就是Redis,Redis是开 ...
- 深入剖析Redis系列: Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
随机推荐
- python 函数和函数名的应用
一.函数 1.函数定义 def 关键字 -- 定义 func 函数名 -- 和变量定义规则一样 ()必须要写格式 : 声明语句结束 def my_len(): 函数体 def func(a:int ...
- intellIJ IDEA学习笔记
如果你初次用idea,毫无目的的度娘如何使用IDEA 浪费的将会是大量的时间.为以表诚意, 上一套IDEA教学视频,以表我诚意.(下载地址:https://pan.baidu.com/s/1g ...
- 论文解读2——Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
背景 用ConvNet方法解决图像分类.检测问题成为热潮,但这些方法都需要先把图片resize到固定的w*h,再丢进网络里,图片经过resize可能会丢失一些信息.论文作者发明了SPP pooling ...
- 在CentOS 7 / RHEL 7安装PostgreSQL 10
CentOS 到了7.x版本, PostgreSQL也来到了10.x版本. 前些天MySQL都直接跨到了8.0版本. 本文是一篇在CentOS 7.4上安装安装PostgreSQL 10.3 的教程. ...
- 使用文本框TextView/EditText的开源库清单
在实际的开发中TextView和EditText是非常基本的控件.这两个控件的使用也是十分简单.而TextView/EditText的功能其实也是非常强大,例如简单的图文就可以使用TextView配合 ...
- 如何用python进行邮件发送
使用Python调用邮件服务器发送邮件,使用的协议是SMTP(Simple Mail Transfer Protocol),下图为使用TCP/IP基于SMTP发送邮件的过程示意图: SMTP协议工作原 ...
- P3195 [HNOI2008]玩具装箱TOY 斜率优化dp
传送门:https://www.luogu.org/problem/P3195 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任 ...
- JS基础-该如何理解原型、原型链?
JS的原型.原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对 ...
- 为了完成这个功能,我竟然用5行代码制作了一个EXE可执行程序
由于用户访问我们某个网址的路径比较长,最后我们确定了在桌面添加快捷入口的方案,让用户点击快捷入口直接进入直接的网址,而且这个快捷入口要带有指定的logo(排除了新建url快捷方式的方案),所以我决定写 ...
- java杨辉三角
public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println( ...