错误信息: Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at redis.clients.util.Pool.getResource(Pool.java:53) at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226) at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnectionFromSlot(JedisSlotBasedConnectionHandler.java:66) at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:116) at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:141) at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:141) at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:141) at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:141) at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:31) at redis.clients.jedis.JedisCluster.set(JedisCluster.java:103) at com.xzk.Demo3.main(Demo3.java:25) Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect at redis.clients.jedis.Connection.connect(Connection.java:207) at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93) at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767) at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106) at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363) at redis.clients.util.Pool.getResource(Pool.java:49) ... 10 more Caused by: java.net.ConnectException: Connection refused: connect at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method) at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107) at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) at java.base/java.net.Socket.connect(Socket.java:608) at redis.clients.jedis.Connection.connect(Connection.java:184) ... 17 more
我在单独使用6379端口号做连接测试或连接池测试时都可以成功,但是在使用集群时就会报错。 在安全组规则中已经配置了那12个端口号(7001-7006、17001-17006),出入方向都有
这个具体错误是什么?怎么修改呀?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这个错误信息表明你的Java应用在尝试连接到Redis集群时遇到了问题,具体来说是JedisConnectionException: Could not get a resource from the pool
,意味着从连接池中获取资源失败。进一步看,底层原因是java.net.ConnectException: Connection refused: connect
,表示应用程序无法建立到Redis节点的连接。
尽管你已经确认了安全组规则允许了7001-7006和17001-17006端口的访问,但还是出现连接被拒绝的问题,这可能由以下几个原因导致:
Redis集群配置问题:请确保所有Redis节点都正确配置为集群模式,并且彼此之间可以相互通信。使用redis-cli --cluster check <任意节点IP>:<端口>
命令检查集群状态。
网络配置问题:
连接池配置问题:检查你的Jedis连接池配置是否正确。例如,确保指定了正确的主机列表、端口以及集群模式。错误的配置如过时的节点信息、错误的密码等都可能导致连接失败。
服务运行状态:确认所有的Redis节点都在运行并且健康。使用ping
命令测试每个节点的可达性。
时间同步问题:Redis集群对节点间的时间同步有严格要求,时间不同步也可能导致集群操作失败。确保所有节点的系统时间一致。
解决步骤建议:
telnet
或nc
)测试从应用服务器到每个Redis节点的端口连通性。根据上述排查方向,你应该能够定位并解决问题。如果问题依旧,请提供更多的环境细节以便进行更深入的分析。