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集群节点主从关系脚本执行情况

原文地址:https://blog.51cto.com/14661718/2468022

时间: 2024-10-30 05:00:49

Redis集群节点主从关系调整的相关文章

Redis集群节点的选举(实验)

Redis集群节点的选举: 当master挂掉之后,就会在该集群中的slave中选取一个来代替mater角色, 从而保证redis集群slot的完整性. 如果其中一个mster和它的slave都挂掉后,会导致slot不完整,整个集群都会挂掉. 集群节点信息: 192.168.2.200:6379> cluster nodes 3ff3a74f9dc41f8bc635ab845ad76bf77ffb0f69 192.168.2.201:6379 master - 0 1527145806504 5

redis集群(主从配置)

市面上太多kv的缓存,最常用的就属memcache了,但是memcache存在单点问题,不过小日本有复制版本,但是使用的人比较少,redis的出现让kv内存存储的想法成为现实.今天主要内容便是redis主从实现简单的集群,实际上redis的安装配置砸门ttlsa之前就有个文章,废话少说,进入正题吧 Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合)和zset(有序

Redis集群节点管理

Redis集群一旦启动,就不能轻易删除掉一个节点了. 需要由redis-trib.rg这个ruby脚本行使集群管理的功能.所有的哈希槽都分配于master节点 一.delete master node 1. 重新分片 reshard后的参数可以是集群中任何一个节点 redis-3.2.9/src/redis-trib.rb reshard 192.168.1.6:7000 2.删除主节点 redis-3.2.9/src/redis-trib.rb del-node 192.168.1.6:700

redis集群节点宕机

redis集群是有很多个redis一起工作,那么就需要这个集群不是那么容易挂掉,所以呢,理论上就应该给集群中的每个节点至少一个备用的redis服务.这个备用的redis称为从节点(slave). 1.集群是如何判断是否有某个节点挂掉 首先要说的是,每一个节点都存有这个集群所有主节点以及从节点的信息.它们之间通过互相的ping-pong判断是否节点可以连接上.如果有一半以上的节点去ping一个节点的时候没有回应,集群就认为这个节点宕机了,然后去连接它的备用节点. 2.集群进入fail状态的必要条件

Redis 集群方案- 主从切换测试

大约一年多前,公司同事开始使用Redis,不清楚是配置,还是版本的问题,当时的Redis经常在使用一段时间后,连接爆满且不释放.印象中,Redis 2.4.8以下的版本由于设计上的主从库同步问题,就会导致整个问题,不知是否确为这个Bug所致.但从那以后,我就很少敢去尝试使用Redis.曾想转投MongoDB,但公司同事给我的回复是,由于MongoDB宕机,数据丢失,公司损失惨重.于是,我一直停留在Memcached使用范畴,且用的还比较一般. 由于前段时间使用Kestrel,同时要操作Memca

redis集群之主从架构

https://redis.io/topics/replication1. redis主从架构概述(1)一个master可以配置多个slave(2)slave与master之间使用异步复制进行数据同步.(3)redis主从数据同步是非阻塞的. 2. 配置主从master配置: repl-diskless-sync yes # 无磁盘复制,子进程直接叫RDB文件发送给slave repl-diskless-sync-delay 5 # 无盘复制延迟,默认为5s min-slaves-to-writ

redis集群之Cluster

RedisCluster 是 Redis 的亲儿子,它是 Redis 作者自己提供的 Redis 集群化方案. 相对于 Codis 的不同,它是去中心化的,如图所示,该集群有三个 Redis 节点组成,每个节点负责整个集群的一部分数据,每个节点负责的数据多少可能不一样.这三个节点相互连接组成一个对等的集群,它们之间通过一种特殊的二进制协议相互交互集群信息. Redis Cluster 将所有数据划分为 16384 的 slots,它比 Codis 的 1024 个槽划分的更为精细,每个节点负责其

Redis集群知识解析

redis集群在启动的时候就自动在多个节点间分好片.同时提供了分片之间的可用性:当一部分redis节点故障或网络中断,集群也能继续工作.但是,当大面积的节点故障或网络中断(比如大部分的主节点都不可用了),集群就不能使用. 所以,从实用性的角度,Redis集群提供以下功能: 自动把数据切分到多个redis节点中 当一部分节点挂了或不可达,集群依然能继续工作 Redis集群的TCP端口 redis集群中的每个节点都需要建立2个tcp连接,监听这2个端口:一个端口称之为“客户端端口”,用于接受客户端指

Redis集群容器化安装

Redis集群概述Redis作为当前非常热门的内存型数据结构存储,可用于数据存储,缓存和消息代理等.本文将讲解如何基于docker搭建Redis集群,Redis的集群设计包括两个部分:主从复制和哈希Slot.1.1. 主从复制主从复制在数据库中很常见,一般用来做读写分离,Redis中也是如此.要求只有1个Master(主节点),可以有N个slaver(从节点),而且Slaver也可以有自己的Slaver,由于这种主从的关系决定他们是在配置阶段就要指定他们的上下级关系,而不是Zookeeper那种