为什么Redis集群节点经常出现Connection Refused报错_检查cluster-announce-ip配置是否正确

酷静同学_9157

酷静同学_9157

2026-06-12

1103人浏览

原创

“connection refused”本质是tcp连接建立失败,表明目标ip:port无监听进程,非集群逻辑问题;高频源于docker/k8s环境下cluster-announce-ip未显式配置或配置错误,导致客户端重定向至不可达内网ip。

为什么redis集群节点经常出现connection refused报错_检查cluster-announce-ip配置是否正确

Connection refused 本质是客户端连不上目标 IP:PORT,不是集群逻辑问题

“Connection refused”错误在 Redis 集群中高频出现,但很多人误以为是集群没搭好、节点没握手成功。实际上,只要 cluster nodes 能返回完整节点列表(哪怕状态是 fail),就说明集群协议层已运行——此时报错几乎全是网络层或地址宣告层的问题。

典型表现是:客户端能连上第一个节点(比如 192.168.1.10:7001),但收到 MOVED 12345 172.18.0.11:7001 后立刻失败,因为 172.18.0.11 是容器内网 IP,本地或客户端根本路由不到。

  • 不要先查 redis-cli -c 是否能执行命令——它会自动重试、掩盖真实连接路径
  • 用 redis-cli -h 172.18.0.11 -p 7001 ping 直接测目标节点地址,才能暴露真实不可达性
  • 如果 cluster nodes 输出里大量节点 IP 是 127.0.0.1 或 172.x.x.x,基本可锁定为 cluster-announce-ip 缺失或写错

cluster-announce-ip 必须显式配置,且值必须是客户端可路由的地址

Redis 默认不主动宣告自己对外可见的 IP,而是从 bind 或系统接口自动推导——这在 Docker/K8s 环境下必然出错。你不能依赖“它自己会选对”,必须强制指定。

正确配置方式(加在每个节点的 redis.conf 中):

cluster-announce-ip 192.168.1.10
cluster-announce-port 7001
cluster-announce-bus-port 17001
  • cluster-announce-ip 填的是客户端(如 Jedis、ARDM、IDEA)所在机器能直接访问的 IP,不是容器 IP,也不是 0.0.0.0
  • cluster-announce-port 必须和该节点实际监听的客户端端口一致(即 port 配置值),不能照抄模板里的 ${PORT} 占位符
  • cluster-announce-bus-port = 客户端端口 + 10000,必须和集群总线端口严格对应;若用 iptables 或安全组,这个端口也得放行
  • 改完配置后必须重启 Redis 进程(kill -SIGUSR2 不生效),并确认 nodes.conf 被重写——旧文件残留会导致节点仍广播错误地址

常见配置陷阱与验证方法

即使写了 cluster-announce-ip,仍可能因以下原因失效:

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

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

下载
  • 配置写在了错误的 conf 文件里(比如启动时指定了 -f /etc/redis/redis.conf,但你改的是 /opt/redis/redis.conf)
  • 用了 Docker,但 cluster-announce-ip 写成了宿主机的 127.0.0.1 或未映射的内网地址
  • 多个节点配置了相同的 cluster-announce-ip(比如全写成 192.168.1.10),导致集群认为所有节点都在同一台机器上
  • 云服务器开了多网卡,cluster-announce-ip 填的是私有网段 IP,但客户端走公网访问,中间 NAT 未做端口映射

验证是否生效最直接的方式:

在任意节点执行:redis-cli -p 7001 cluster nodes | grep -v "myself" | awk '{print $2}' | sort -u

输出的每行 IP 都应是你手动配置的 cluster-announce-ip,而不是容器 IP、127.0.0.1 或自动识别的网卡地址。

防火墙和集群总线端口经常被一起忽略

只开客户端端口(如 7001)而不开集群总线端口(如 17001),会导致节点间 gossip 失败,继而触发频繁的 fail 状态切换——这时你看到的 “Connection refused” 往往是集群内部重定向失败引发的连锁反应,而非客户端直连问题。

  • Linux 上检查:sudo ss -tlnp | grep ':17001',确认 Redis 进程确实在监听该端口
  • iptables 规则必须包含:iptables -A INPUT -p tcp --dport 17001 -j ACCEPT
  • 云平台安全组需额外添加一条入方向规则:端口 17001,协议 TCP,源 IP 为其他 Redis 节点的可访问地址(非 0.0.0.0/0)
  • Kubernetes 中若用 hostNetwork: true,要确保宿主机防火墙也放行;若用 Service 暴露,则需为每个节点单独建 Headless Service 并配置 cluster-announce-ip 为 Service 域名(不推荐,易出 DNS 解析问题)

真正麻烦的从来不是配置几行参数,而是改完之后没验证 cluster nodes 输出是否更新、没确认总线端口是否可达、也没用客户端直连目标 IP 测试——这些动作漏掉任何一环,都会让问题看起来像“玄学故障”。

相关专题

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

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

2023.11.02

4349

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

7032

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

6742

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

5978

6

热门下载

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

精品课程

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

共0课时 | 0人学习