首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jedis for Java连接Docker Redis集群实例?

如何使用jedis for Java连接Docker Redis集群实例?
EN

Stack Overflow用户
提问于 2020-04-12 02:49:54
回答 1查看 1.3K关注 0票数 4

我已经使用redis docker-compose创建了一个包含6个节点的集群(3个主节点和3个从节点),并将它们全部链接起来。集群信息

代码语言:javascript
复制
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:5
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:23
cluster_stats_messages_pong_sent:31
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:55
cluster_stats_messages_ping_received:26
cluster_stats_messages_pong_received:24
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:55

集群节点

代码语言:javascript
复制
d794a9ab002f0c3cb699ce68a09310dd0fdb17de 192.168.65.3:32789@32783 slave c6c05515c3be01a1438b6d2aad823c0fa50b1743 0 1586629088989 5 connected
7d4fab850bcfac8754a559c5e9469698b7f182bc 192.168.65.3:32792@32787 master - 0 1586629087000 2 connected 5461-10922
c6c05515c3be01a1438b6d2aad823c0fa50b1743 192.168.65.3:32793@32788 master - 0 1586629089995 4 connected 10923-16383
229b9b4f919f79a1c24b7b849c42acb9e3378532 192.168.65.3:32790@32785 slave 9b649a67dc53084ed7416b20e8bab00289e636d2 0 1586629089000 6 connected
9b649a67dc53084ed7416b20e8bab00289e636d2 192.168.65.3:32791@32786 myself,master - 0 1586629086000 1 connected 0-5460

如上所示,集群似乎正在工作,但是当我尝试使用jedis在java应用程序中调用集群实例时,使用以下代码

代码语言:javascript
复制
jedis = new JedisCluster(new HostAndPort("0.0.0.0", 32790));
jedis.set("events/city/rome", "32,15,223,828");

然后我得到了下面的错误

代码语言:javascript
复制
Exception in thread "main" redis.clients.jedis.exceptions.JedisClusterMaxAttemptsException: No more cluster attempts left.
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:86)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
    at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:25)
    at redis.clients.jedis.JedisCluster.set(JedisCluster.java:112)
    at sc.dev.algordf.ALGORDF.main(ALGORDF.java:53)

请帮我找出可能是什么问题。是否因为我在创建jedis实例时没有指定正确的IP和端口号。还是我遗漏了什么。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-08-04 14:42:06

问题出在Redis集群配置中!

您的应用程序向其中一个已配置的节点发出请求。接收所有Redis节点的地址,本例中为Docker网络中的IP。因此,您会得到一个连接错误。

要解决此问题,请向集群中的每个节点添加以下参数,以更新"advertise“地址

节点192.168.83.101:7000:17000示例(扩展坞主机为192.168.83.101,命令端口为7000,群集总线端口为17000)

代码语言:javascript
复制
cluster-announce-ip 192.168.83.100
cluster-announce-port 7000
cluster-announce-bus-port 17000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61162024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档