You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js服务无法连接Redis 求助排查故障原因

问题描述

服务器部署在客户现场,Node.js服务无法连接Redis,但Redis状态显示运行正常:

Active: active (running) since Wed 2023-02-15 14:16:34 EAT; 18h ago
       Docs: http://redis.io/documentation,
             man:redis-server(1)
   Main PID: 3085148 (redis-server)
     Status: "Ready to accept connections"
      Tasks: 5 (limit: 19104)
     Memory: 8.2M
     CGroup: /system.slice/redis-server.service

可从某台服务器手动指定主机和端口连接Redis,但Node.js服务尝试连接时失败,错误信息如下:

[ioredis] Unhandled error event: Error: connect ETIMEDOUT
16|pdsl_pa |     at Socket.<anonymous> (/var/www/stage_env/pdsl_parking_service/node_modules/ioredis/built/redis/index.js:318:37)
16|pdsl_pa |     at Object.onceWrapper (node:events:645:28)
16|pdsl_pa |     at Socket.emit (node:events:526:28)
16|pdsl_pa |     at Socket.emit (node:domain:475:12)
16|pdsl_pa |     at Socket._onTimeout (node:net:501:8)
16|pdsl_pa |     at listOnTimeout (node:internal/timers:559:17)
16|pdsl_pa |     at processTimers (node:internal/timers:502:7)
16|pdsl_pa | [ioredis] Unhandled error event: Error: connect EHOSTUNREACH 172.**.***.***:6379
16|pdsl_pa |     at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16)
16|pdsl_pa | [ioredis] Unhandled error event: Error: connect EHOSTUNREACH 172.**.***.***:6379
16|pdsl_pa |     at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16)
16|pdsl_pa | [ioredis] Unhandled error event: Error: connect EHOSTUNREACH 172.**.***.***:6379
可能的故障原因分析
  • Redis绑定地址限制:检查Redis配置文件(通常为redis.conf)中的bind参数,如果仅绑定127.0.0.1,则仅本地可访问。即使测试服务器能连接,也可能该服务器是Redis所在机器,或Redis仅允许该机器IP访问,而Node.js服务所在机器不在允许范围内。
  • 网络路由/子网隔离:Node.js服务所在服务器与Redis服务器可能处于不同子网、VLAN,或路由表缺失指向Redis服务器的正确路径,导致出现EHOSTUNREACH(主机不可达)错误。
  • 防火墙规则差异:客户现场防火墙可能允许测试服务器访问Redis的6379端口,但拦截了Node.js服务所在服务器的请求。检查Redis服务器上的iptables/ufw规则,以及两台服务器之间的中间防火墙,确认是否放行6379端口的TCP流量。
  • Node.js配置错误:核对Node.js代码中的Redis连接参数——IP地址是否写错、端口是否匹配,是否遗漏Redis密码、SSL配置(若Redis开启了认证或SSL但Node.js未对应配置)。同时检查部署环境变量是否覆盖了正确的连接配置。
  • Redis连接数耗尽:虽然Redis状态正常,但如果达到maxclients参数设置的最大连接数,新连接会被拒绝。执行redis-cli info clients查看当前连接数与上限值,确认是否达到阈值。
  • DNS解析异常:若Node.js服务通过域名连接Redis,可能存在DNS解析失败问题。尝试直接用IP地址连接测试,或在Node.js服务器上执行ping/nslookup验证域名解析结果。
  • 安全模块拦截:Node.js服务的运行用户可能被SELinux、AppArmor等安全模块限制网络访问。检查相关安全模块的日志,确认是否存在拦截行为。

内容的提问来源于stack exchange,提问作者Abhishek Matta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:04:02