java - redis.clients.jedis.exceptions.JedisConnectionException:连接到redis集群时无法从池中获取资源
问题描述
我正在尝试使用 java JedisCluster客户端连接到 redis 集群。
首先,我使用这个 docker 镜像制作了 Redis Cluster
创建了 6 个节点(3 个主节点 && 3 个从节点)
在 Windows 中使用 docker machine 我使用这个命令启动了 redis 集群
docker run -p 7000:7000 -p 7001:7001 -p 7002:7002 -p 7003:7003 -p 7004:7004 -p 7005:7005 -p 7006:7006 -p 7007:7007 dockerImageId
Redis 集群启动短日志:
使用 3 个主控:
172.17.0.2:7000
172.17.0.2:7001
172.17.0.2:7002
将副本 172.17.0.2:7004 添加到 172.17.0.2:7000 添加副本 172.17.0.2:7005
到 172.17.0.2:7001 添加副本
172.17.0.2:7003 到 172.17.0.2:7002
Redis 集群的 Java 客户端:
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
jedisClusterNodes.add(new HostAndPort("192.168.99.100", 7000));
JedisCluster jc = new JedisCluster(jedisClusterNodes);
jc.set("key", "Redis-Val");
String value = jc.get("key");
System.out.println("key is : "+value);
运行此代码后,我得到了这个异常
线程“主”redis.clients.jedis.exceptions.JedisConnectionException 中的异常:无法从位于 redis.clients.jedis.JedisPool 的 redis.clients.util.Pool.getResource(Pool.java:53) 的池中获取资源。 getResource(JedisPool.java:226) 在 redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnectionFromSlot(JedisSlotBasedConnectionHandler.java:66) 在 redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:116) 在 redis.clients.jedis.JedisClusterCommand .runWithRetries(JedisClusterCommand.java:141) 在 redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:141) 在 redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:141) 在 redis.clients.jedis。 JedisClusterCommand.runWithRetries(JedisClusterCommand.java:141) 在 redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:31) 在 redis.clients.jedis.JedisCluster.set(JedisCluster.java:103) 在 redis.redis_example.App.main(App.java:20) ) 引起:redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out
我通过 telnet 命令检查了 redis 是否在集群中的任何节点上运行:
远程登录 192.168.99.100 7000
连接成功
解决方案
我通过在运行容器时设置 IP env 变量来解决它:
docker run -d -p 7000-7005:7000-7005 -e "IP=0.0.0.0" grokzen/redis-cluster:latest
推荐阅读
- python - 如何使用 PyQt5 在 python 中打开基于 HTML 的游戏。?
- javascript - 在 ReactJS 中为复选框选择限制功能添加最小值和最大值
- mongodb - 在 Mongodb '$group' 汇总结果上分页
- keycloak - 是否可以使用系统的root用户作为keycloak的管理员用户
- swagger - 通过 serverless 设置 API 网关的请求验证器
- angular - “http://localhost:8100”已被 CORS 策略错误阻止
- excel - 如何过滤代码中的所有 12 位数字?
- html - Ipython 显示功能 html 等效但适用于 r 内核
- entity-framework - EF Core - 不包括二进制字段
- javascript - Angular从父组件获取所有子组件的状态