Redis-cluster调整主从关系

发布时间 2023-04-04 10:33:02作者: paul_hch

一、概述

Redis集群创建后,可能会出现互为主从关系的节点从属于同一台服务器的情况。在此种情况下,若
服务器故障宕机或需要停机维护,互为主从关系的节点同时停止运行,导致redis集群暂时失去一部
分slot插槽。此时,redis集群为fail状态,对其进行的数据读写操作均无法正常进行。为避免此种情
况的发生,应对redis集群节点的主从关系进行调整,使互为主从关系的节点分属于不同的服务器。

二.调整方法描述

1.使用redis-trib.rb脚本将待调整的从节点从redis集群中删除。(执行此步操作时,从节点会从redis集群中去除。同时,此从节点进程会被杀掉。)命令如下:
redis-trib.rb del-node 集群中某节点IP:PORT 待调整的从节点ID
2.删除待调整从节点rdb子目录下的所有文件。(包括“dump.rdb”和“nodes-节点端口号.conf”文件。)
3.重新启动待调整的从节点。
4.使用redis-trib.rb脚本将待调整的从节点加入到redis集群中,使其与合适的主节点对应,建立起新的主从关系。命令如下:
redis-trib.rb add-node --slave --master-id 主节点ID 待调整的从节点IP:PORT 集群中某节点IP:PORT

三.具体操作方法举例

1.redis集群节点主从关系信息,通过show_redis_map.sh查看主从关系

 用Excel整理出主从关系

调整前

 调整后

 

从图一、表一可见,其中一对主从节点(10.72.14.39:7005和10.72.14.39:7002)从属于同一台服务器。计划是蓝色和红色互相调整从节点

需要从redis集群中去除两个从节点(包括10.72.14.39:7002、10.72.14.38:7003),而后建立新的主从关系。具体操作方法如下。

1)从redis集群中删掉两个从节点(10.72.14.39:700210.72.14.38:7003)
命令格式:redis-trib.rb del-node 集群中某节点IP:PORT 待调整的从节点ID

在任意一台服务器上执行下面2条命令:
/opt/redis-3.2.3/bin/redis-trib.rb del-node 10.72.14.38:7000 d4d9147bbc2023960b2d19d8c27b1c564a35461d
/opt/redis-3.2.3/bin/redis-trib.rb del-node 10.72.14.38:7000 c2adf53531cd16ac23faf9be714717615de1e604

说明
10.72.14.38:7000为集群中任意节点
2)删除两个从节点rdb子目录下的所有文件 分别在10.72.14.39和10.72.14.38服务器上执行如下命令: 
由于当时建立群集时没有分别建立目录,所以dump文件在同一文件里,这里是个隐患 (包括“dump.rdb”和“nodes
-节点端口号.conf”文件。)
先备份
# cp -a dump.rdb dump.rdb.bak
# cp -a nodes-7002.conf{,.bak}
再删除
rm -rf nodes-7002.conf
rm -rf dump.rdb
3)重新启动删掉的两个从节点 分别在10.72.14.39和10.72.14.38服务器上执行如下命令: # 10.72.14.39执行 /opt/redis-3.2.3/bin/redis-server conf/7002.conf # 10.72.14.38执行 /opt/redis-3.2.3/bin/redis-server conf/7002.conf (4)将删掉的两个从节点加入redis集群并建立新的主从关系 命令格式:redis-trib.rb add-node --slave --master-id 主节点ID 待调整的从节点IP:PORT 集群中某节点IP:PORT 在任意一台服务器上执行下面2条命令: /opt/redis-3.2.3/bin/redis-trib.rb add-node --slave --master-id 56a26d4b176df4d93da7eac2cb356ea2e46acedf 10.72.14.39:7002 10.72.14.38:7000 /opt/redis-3.2.3/bin/redis-trib.rb add-node --slave --master-id 8af43aecd220384a947e4128c45306a4545f79e4 10.72.14.38:7003 10.72.14.38:7000

调整后

 

 用redisinsight查看集群状态正常

 

 

 

其中试验环境,没有数据写入所以不能证明对集群没有影响,过程中删除了俩个从节点后,redisinsight连接10.72.14.37:7000端口时出现群集无法显示。

下次会模拟有数据写入的状态下操作,已到达对生产环境的真实模拟此操作是否会有影响!

 

 参考

Redis集群怎么调整节点的主从关系 - 风纳云
https://www.fengnayun.com/news/content/84255.html