You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

.NET Core连接AWS Redis缓存遇RedisConnectionException问题求助

这种VPC环境下Redis集群连接失败的问题我之前帮团队排查过好多次,结合你说的本地能正常连接、VPC内其他资源可访问的情况,咱们一步步来定位问题:

排查步骤

1. 先检查Redis安全组的入站规则

这是最常见的坑,哪怕同属一个VPC,AWS安全组也不会自动放行流量:

  • 确认Redis集群的安全组入站规则,是否允许你的应用服务器所在的安全组ID(或者服务器的私有IP段)访问Redis的端口(默认6379,集群模式可能还有其他端口)。
  • 可以临时添加一条0.0.0.0/0的入站规则测试(测试完立刻删除,别留安全隐患),如果能连接成功,那百分百是安全组配置的问题。

2. 核对Redis集群的网络配置

  • 确认Redis集群是否部署在你的应用所在的VPC子网内?如果Redis在另一个VPC,需要先配置VPC对等连接(VPC Peering)或者中转网关(Transit Gateway),同时检查两边的路由表是否有对应的路由条目。
  • 你用的Redis端点是私有DNS还是公有DNS?在VPC内必须用私有DNS,公有DNS会走公网链路,而你的应用服务器可能没有公网访问权限,或者Redis集群根本没开启公网访问。

3. 检查应用侧的Redis连接配置

从报错的SocketFailure来看,也可能是连接参数配置不对:

  • 先按照报错提示,在连接字符串里加上AbortOnConnectFail=false,这样连接多路复用器不会直接崩溃,能输出更多调试日志,方便定位问题。
  • 确认是否开启了SSL:AWS托管的Redis默认可能开启SSL,连接字符串里必须加ssl=true,否则会出现握手失败导致Socket错误。
  • 增加超时参数:比如connectTimeout=5000,syncTimeout=5000,避免因为VPC内网络延迟导致超时。
  • 如果Redis设置了密码,连接字符串里要加上password=你的Redis密码
  • 给你一个参考的集群模式连接字符串:
    redis://your-redis-cluster-endpoint:6379,connectTimeout=5000,syncTimeout=5000,ssl=true,password=yourpwd,AbortOnConnectFail=false
    

4. 在应用服务器上做网络连通性测试

直接在服务器上测试,能快速区分是网络问题还是应用问题:

  • telnet测试端口连通性:
    telnet your-redis-private-endpoint 6379
    
    如果连接失败(提示Connection refused或者超时),说明是网络层面的问题,回到安全组和路由表排查;如果能连接上,继续下一步。
  • 测试Redis命令:如果telnet能连上,输入PING,看是否返回PONG。如果返回NOAUTH,说明是密码问题;如果正常返回,那就是应用侧的配置问题(比如连接字符串写错了)。

5. 检查Redis集群的自身状态

  • 登录AWS控制台,查看Redis集群的状态是否为Available,有没有节点故障、正在维护或者扩容的情况。
  • 检查Redis的参数组,是否开启了protected-mode?如果开启了,需要在参数组里配置允许访问的IP段,或者临时关闭(不建议长期关闭,优先配置白名单)。

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

火山引擎 最新活动