Redis集群环境中添加和删除节点

上一节中说道如何在window下面安装redis集群,今天给大家介绍一下如何在redis集群环境中添加和删除节点。

首先是配置六个节点,三个为从节点,三个为主节点。

配置信息如下所示:

port 6380      #端口号
loglevel notice     #日志的记录级别,notice是适合生产环境的
logfile "E:/softtools/redis-3.0.1/Logs/redis6380_log.txt"  #指定log的保持路径,默认是创建在Redis安装目录下,如果有
appendonly yes  #数据的保存为aof格式  
appendfilename "appendonly.6380.aof"     #数据保存文件
cluster-enabled yes        #是否开启集群                              
cluster-config-file nodes.6380.conf  
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

总共配置六个这样的文件,每个配置文件的端口地址等都不一样。

进入到redis安装目录之下,输入redis-server ./Logs/redis.6380.conf启动每个节点的服务

接下来就是创建集群:

在redis目录下面执行 gem install --local E:/softtools/redis-3.2.2.gem 命令。显示以下结果接说明安装Ruby成功

然后就可以输入创建节点到集群中的命令了,命令如下所示:

redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385

出现这些信息就说明添加成功,系统会让我们是否确定集群,这里我们选择yes

这样redis的集群就搭建完毕了,这里我需要解释一下的是:

这里我没有设置任何的主从redis,为什么就可以自动实现了呢?其实猫腻是在redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385这个命令里面。

replicas 1其实就是设置了主从redis了,这里的1是指是后面所有的redis服务中有一半是主服务一半是从服务。至于谁是主的、谁是从的这个都是随机分配的。

replicas 0就表示设置的节点都是主节点,没有从节点

这样redis集群就已经设置好了,下面开始接受查询节点,添加节点,删除节点的操作

一.查询节点:

首先进入某个节点的客户端中,输入以下命令进入6380节点客户端中,命令:redis-cli -c -p 6380

其中cluster nodes命令就是查看所有节点信息,这里我们可以看到是三个master、三个slave节点。

二.添加节点:

1、首先把需要添加的节点启动

在Logs配置文件目录下面创建redis.6386.conf配置文件,可以复制其它的配置文件,然后修改端口后和其它相应的内容。

配置文件信息如下所示:

port 6386
loglevel notice    
logfile "E:/softtools/redis-3.0.1/Logs/redis6386_log.txt" 
appendonly yes
appendfilename "appendonly.6386.aof"   
cluster-enabled yes                                    
cluster-config-file nodes.6386.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

2.通过上面说到的redis-server ./Logs/redis.6386.conf命令启动该服务

启动好之后会出现aof和conf这两个文件。

3.通过redis-trib.rb add-node 127.0.0.1:6386 127.0.0.1:6380 命令添加到redis集群环境中去。

这里需要注意的是:前面地址是新的添加的节点地址信息,后面是你想要复制的主节点信息,一定要是主节点才可以。

我当时犯了一个错误,就是在写了redis-trib.rb add-node 127.0.0.1:6386这样的命令,然后执行的时候一直报错,因为redis集群,在添加新的节点的时候必须要引用旧的主节点才可以。

然后可以输入cluster nodes查看节点是否添加成功。

从运行结果中可以看到,节点添加是成功的。但是节点还没分配槽给它,此时还不是可使用节点。

这里有两种选择,一种是变成从节点,一种是变成主节点

变成从节点比较简单,不需要重新分配槽。执行redis-cli -c -p 6386 cluster replicate d1feb9c8267f9b82f86db9b95bdc36c1ed28143e 命令就可以了,后面的d1feb9c8267f9b82f86db9b95bdc36c1ed28143e是主节点6380的ID号码

如果想要变成主节点就需要重新分配槽给这个新节点了。

执行 redis-trib.rb reshard 127.0.0.1:6380 命令这个主节点的IP只能是我们上面创建该节点时候跟着的旧节点的IP地址,否则错误。所以这里大家一定要注意。

这里系统会给我们选择移动槽的个数和移动给节点的ID号码,这里我设置的是移动1000,移动给新节点62aff61bb7ee6adb6131c2b0330545fd690b4843

输入all 表示从所有的主节点中随机转移,凑够1000个哈希槽,然后再输入yes,redis集群就开始分配哈希槽了。查看新节点槽分配情况,发现已经添加好了。

三.删除节点:

删除从节点的话,不需要清空槽,直接就可以删除

redis-trib.rb del-node 127.0.0.1:6386 62aff61bb7ee6adb6131c2b0330545fd690b4843

最后一个参数为需要删除节点的ID  

删除主节点的话,就需要先清空槽,然后重新分配给原先创建指定的那个节点,最后才能删除。

第一步先移动槽,上面我们分配给这个节点的槽是1000,这里我们也移动1000

redis-trib.rb reshard 127.0.0.1:6386

后面就是输入要分配给哪个节点的ID,这里我们上面是从6380节点分配过来的,所以我们就分配回去,改节点的ID为:62aff61bb7ee6adb6131c2b0330545fd690b4843,最后系统会让我们确实我们要移除节点的ID,这里我们写62aff61bb7ee6adb6131c2b0330545fd690b4843

最后就可以执行

redis-trib.rb del-node 127.0.0.1:6386 62aff61bb7ee6adb6131c2b0330545fd690b4843

命令来删除节点了,最后一个参数为需要删除的节点ID  

到这边关于redis集群节点的添加就介绍到这边了,如果对上面的内容还有什么疑义或者问题都可以加我QQ:208017534咨询。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏cloudskyme

vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化)

环境准备 软件:vmware workstation 9.0      ubuntu-12.04.2-server-amd64(官方下载) 硬件:确认CPU支持...

2835
来自专栏androidBlog

Git 命令行教程及实例教程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

611
来自专栏HadesMo

调用对象存储Put Object接口创建空目录

注意:生成签名时的【HttpURI】参数必须在末尾加【/】,否则是无法创建目录的。

965
来自专栏北京马哥教育

原创投稿 | 使用zabbix自带的模板监控mysql

? 1.系统环境 软件及其版本 软件|版本 ----|---- OS|Centos6.8-2.6.32-642.el6.x86_64 zabbix|za...

28711
来自专栏青玉伏案

Git常用命令

 以下是学习git时常用的命令,大致总结了以下,用git做版本控制所用的命令挺多的,但常用的也在大脑承受的范围之中,把自己总结的东西给大家分享一下。   1....

1948
来自专栏java架构师

发布一个.net mvc站点遇到的问题及解决

1、先通过vs2012发布.net mvc项目,遇到问题是一路默认下来,提示发布已成功,但对应文件夹里没有任何文件 解决: 第一步,新建了一个文件夹 第二步,在...

31611
来自专栏漫漫全栈路

Docker循序渐进

上一篇的演示中使用的都是默认登录了Root权限后的操作,而实际的开发运维情况下,我们一般极少使用Root权限,所以Docker提供了一个权限组,我们只需要把当前...

3019
来自专栏Java面试笔试题

在VMware上安装CentOS版本的Linux虚拟机

2.点击“编辑虚拟机设置”,选择“CD/DVD”,点击"使用ISO映像文件"在本地找到合适的镜像文件;

782
来自专栏地方网络工作室的专栏

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十)打包项目并发布到子目录

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十)打包项目并发布到子目录 前情回顾 通过上一章《Vue2+VueRou...

2018
来自专栏云计算教程系列

如何在CentOS 7上将BIND配置为专用网络DNS服务器

管理服务器配置和基础架构的一个重要部分包括通过设置适当的域名系统(DNS),维护一种通过名称查找网络接口和IP地址的简便方法。使用完全限定的域名(FQDN)而不...

630

扫码关注云+社区