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 条评论
登录 后参与评论

相关文章

来自专栏崔庆才的专栏

内网主机从外面连接不了?SSH反向隧道来帮你!

1645
来自专栏北京马哥教育

docker容器技术系列六:docker容器的数据管理

刚接触docker时总在思考两个问题: 1、docker容器如何实现将数据持久化呢?比如一个httpd容器中用户上传的文件或者访问日志等! 2、如何实现便捷的更...

2528
来自专栏Pythonista

自动化部署nginx负载均衡及监控短信报警

开发脚本自动部署及监控 1.编写脚本自动部署反向代理、web、nfs; 要求: I、部署nginx反向代理三个web服务,调度算法...

812
来自专栏容器云生态

KVM简单命令详解

#virsh list                    显示当前运行的虚拟机 #virsh list --all              显示当前所有...

1946
来自专栏菜鸟计划

HTTP请求详解

使用http协议进行前后端通信 web使用一种名为HTTP(HyperText Transfer Protocol),超文本传输协议作为规范,完成从客户端到服务...

4047
来自专栏后端技术探索

使用Nginx的proxy_cache缓存功能取代Squid|--|下一篇区分桃花和樱花

Nginx从0.7.48版本开始,支持了类似Squid的缓存功能。这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意UR...

621
来自专栏L宝宝聊IT

Squid代理服务器应用示例

1903
来自专栏程序员互动联盟

【记忆卡片】linux网络命令

一、ifconfig是查看网卡的信息 ifconfig [Interface] Interface是可选项,如果不加此项,则显示系统中所有网卡的信息。如果添加此...

3095
来自专栏java工会

常见HTTP请求错误码大全

853
来自专栏乐沙弥的世界

Linux 下配置nginx到php的连接

安装Nginx:Linux 6 下安装编译安装Nginx 安装PHP : Linux 6 下编译安装 PHP 5.6

641

扫码关注云+社区