如何处理Redis因为网络分区导致的性能回落问题?

大宇姑娘_4978

大宇姑娘_4978

2026-08-08

760人浏览

原创

redis集群网络分区时响应延迟飙升实为节点失联导致降级或拒绝写入,需先执行cluster nodes查fail/noaddr状态、cluster info查cluster_state:fail或cluster_slots_assigned:0,再排查底层网络连通性。

如何处理redis因为网络分区导致的性能回落问题?

Redis集群出现网络分区时,响应延迟飙升甚至超时

网络分区不是“Redis变慢”,而是部分节点失联后,集群自动降级为只读或拒绝写入——你看到的“慢”,其实是客户端重试、重定向、超时等待叠加的结果。关键不是优化命令,而是确认分区是否真实发生,并快速干预。

先用 redis-cli -c -h {host} -p {port} 连任意节点,执行 CLUSTER NODES,观察输出中是否有大量节点状态为 fail 或 noaddr;再检查 CLUSTER INFO 中的 cluster_state:fail 或 cluster_slots_assigned:0 —— 这两类输出是分区最直接的证据。

  • 不要依赖单个节点的 INFO replication 判断主从连通性,它只反映本节点视角
  • 防火墙、安全组、云厂商SLB健康检查失败都可能触发误判,需同步排查底层网络连通性(如 telnet、tcping)
  • 若使用 Redis Cluster,且分片数少于 16384 槽位被分配,集群会直接拒绝写操作,此时 SET 类命令会返回 (error) CLUSTERDOWN

客户端持续收到 MOVED/ASK 重定向,但请求始终失败

这不是客户端配置问题,而是网络分区后槽位映射混乱的典型表现:客户端缓存了旧的 slot → node 映射,而实际负责该 slot 的节点已不可达,导致每次重定向都跳向一个“假死”节点。

解决办法不是刷新客户端缓存,而是强制重建路由表:

  • Java 客户端(如 JedisCluster)调用 client.flushSlotCache() 或重启连接池
  • Python redis-py-cluster 需显式调用 redis_cluster.connection_pool.nodes.reset()
  • 所有客户端都应启用 retryAttempts + retryInterval(建议 ≥3 次,间隔 ≥50ms),避免在分区未恢复时疯狂重试

注意:ASKING 命令仅用于迁移中的临时重定向,不能替代 slot 表刷新;强行发送 ASKING 到错误节点只会返回 MOVED,形成循环。

从节点大量处于 wait_bgsave 状态,主节点 CPU 持续 100%

这往往不是磁盘 IO 问题,而是网络分区期间主节点反复尝试与失联从节点握手,触发频繁 fork 和心跳超时处理,消耗主线程资源。此时 INFO replication 里 connected_slaves 数值跳变、master_repl_offset 停滞,都是佐证。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载

应急操作优先级如下:

  • 立即在主节点执行 CONFIG SET repl-timeout 5(默认 60 秒),缩短心跳超时判定时间
  • 若确认某从节点永久失联,用 CLUSTER FORGET {node-id} 主动剔除(需在所有可达节点上执行)
  • 禁止在分区未修复前执行 CLUSTER RESET 或重启节点,否则可能丢失槽位元数据

分区恢复后,Redis 不会自动重新握手——必须手动触发 CLUSTER MEET 或等待心跳自然重建,但前提是双方端口互通且防火墙放行 cluster bus 端口(默认比服务端口大 10000,如 6379 → 16379)。

业务请求成功率骤降,但监控显示 Redis 实例 CPU/内存正常

这是最容易被忽略的陷阱:性能指标“好看”,不代表可用性正常。网络分区下,instantaneous_ops_per_sec 可能暴跌,rejected_connections 上升,而 used_memory 和 cpu_sys 却无明显变化。

真正该盯紧的指标只有三个:

  • cluster_stats_messages_sent 与 cluster_stats_messages_received 差值持续扩大 → 节点间通信中断
  • connected_clients 突增后又陡降 → 客户端因重试/超时批量断连
  • evicted_keys 在分区期间非预期上涨 → 内存淘汰策略被异常触发(如主节点误判从节点失联为负载过高)

别只看 Grafana 里的曲线,直接在每台 Redis 服务器上跑 redis-cli --latency -h 127.0.0.1 —— 如果本地延迟正常(100ms,基本锁定是网络层问题,而非 Redis 自身。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4329

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3855

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7012

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

623

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

756

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

6702

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1036

6

redis主要作用有哪些
redis主要作用有哪些

redis 的主要作用包括:1. 缓存数据,提高访问速度;2. 充当消息队列,实现消息传递;3. 存储各种数据类型,如字符串、散列和集合;4. 管理会话信息,确保可靠性和可用性;5. 限制请求速率,防止服务器超载等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

5938

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习