Redis集群节点主从关系调整

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis集群节点主从关系调整相关的知识,希望对你有一定的参考价值。

一.概述
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集群节点主从关系信息

                                                 图一 redis集群节点主从关系

技术图片
主节点信息 从节点信息

主节点ID 主节点地址 从节点ID 从节点地址
487247ac4e34c0102d54eaca3256dce9b24667f4 132.46.115.146:6580 23b674847132d82c355b3f440aa3f1f940316b69 132.46.115.148:6581
3e745792f2a1f179501aea3264186aa55103a434 132.46.115.148:6580 06b296c1d87fbf69638076d53054d89bd15ef2ad 132.46.115.146:6581
2d93e76a04d20ca0a91e22694201f3b4b18c740b 132.46.115.149:6580 f8a342695baac0bce608ed468f2414c2e68abc49 132.46.115.149:6581

表一 redis集群节点主从关系

从图一、表一可见,其中一对主从节点(132.46.115.149:6580和132.46.115.149:6581)从属于同一台服务器。
需要从redis集群中去除两个从节点(包括132.46.115.149:6581),而后建立新的主从关系。具体操作方法如下。
(1)从redis集群中删掉两个从节点(132.46.115.146:6581和132.46.115.149:6581)
在任意一台服务器上执行下面2条命令:
redis-trib.rb del-node 132.46.115.146:6580 06b296c1d87fbf69638076d53054d89bd15ef2ad
redis-trib.rb del-node 132.46.115.146:6580 f8a342695baac0bce608ed468f2414c2e68abc49
(2)删除两个从节点rdb子目录下的所有文件
分别在132.46.115.146和132.46.115.149服务器上执行如下命令:
rm ${REDIS_CLUSTER_HOME}/redis6581/rdb/*
(3)重新启动删掉的两个从节点
分别在132.46.115.146和132.46.115.149服务器上执行如下命令:
${REDIS_CLUSTER_HOME}/redis6581/bin/redis-server ${REDIS_CLUSTER_HOME}/redis6581/conf/redis.conf
(4)将删掉的两个从节点加入redis集群并建立新的主从关系
在任意一台服务器上执行下面2条命令:
redis-trib.rb add-node --slave --master-id 2d93e76a04d20ca0a91e22694201f3b4b18c740b 132.46.115.146:6581 132.46.115.146:6580
redis-trib.rb add-node --slave --master-id 3e745792f2a1f179501aea3264186aa55103a434 132.46.115.149:6581 132.46.115.146:6580

调整之后的redis集群节点关系见表二

主节点ID 主节点地址 从节点 从节点地址
487247ac4e34c0102d54eaca3256dce9b24667f4 132.46.115.146:65 23b674847132d82c355b3f440aa3f1f940316b69 132.46.115.148:6581
3e745792f2a1f179501aea3264186aa55103a434 132.46.115.148:6580 f8a342695baac0bce608ed468f2414c2e68abc49 132.46.115.149:6581
2d93e76a04d20ca0a91e22694201f3b4b18c740b 132.46.115.149:6580 06b296c1d87fbf69638076d53054d89bd15ef2ad 132.46.115.146:6581

表二 redis集群节点新主从关系

四.自动检测redis集群节点主从关系的脚本

技术图片

图二 自动检测redis集群节点主从关系的脚本技术图片

图二为自动检测redis集群节点主从关系的脚本。执行此脚本时需要传入2个参数。参数一为redis集群任一节点IP,参数二为redis集群任意节点port。若存在主从节点从属于同一台服务器的情况,信息将以红色底色显示。否则,信息以绿色底色显示。脚本执行方法及输出结果如图三所示。

技术图片
图三 自动检测redis集群节点主从关系脚本执行情况

以上是关于Redis集群节点主从关系调整的主要内容,如果未能解决你的问题,请参考以下文章

Redis集群架构

「故障演练」 Redis Cluster集群,当master宕机,主从切换

接近3w详解Docker搭建Redis集群(主从容错主从扩容主从缩容)

故障演练 Redis Cluster集群,当master宕机,主从切换,客户端报错 timed out

玩转Redis的高可用(主从、哨兵、集群)

redis高可用之主从复制,哨兵,集群