首页 新闻 会员 周边

redisson接连redis cluster错误

0
悬赏园豆:50 [待解决问题]

自己试了试建redis cluster 我在一台云服务器开了多个节点当集群.
redis cluster 有两种配置文件

  • 一种是redis配置文件暂时用redis.conf表示,
  • 一种是集群配置文件暂时用nodes.conf表示,

redisson连接是报这个错误 , lettuce可以用

o.r.cluster.ClusterConnectionManager     : Can't connect to master: redis://10.0.16.17:7001 with slot ranges: [[0-5460]]
Not all slots covered! Only 10923 slots are available. Set checkSlotsCoverage = false to avoid this check.

然后 redissonClient bean加载失败,因为 slot 加载不完整,它也给出了解决方案 Set checkSlotsCoverage = false,这种方案是能暂时解决

我发现上面连接ip10.0.16.17 不是我的远程服务器ip地址. 地址我是用spring中lettuce配置没问题
而这个配置是redisson读取了节点nodes.conf文件的ip
我试过重新创建集群,或者把每个文件ip地址修改(重新会恢复),都不行.
这个文件是redis自己管理的
把集群从节点配置在第一个 slot加载完毕了但是还是有一个节点连不上报错
为啥redissonClient 要用这个ip地址, 不用我给的ip

可能我表达不太清楚,一句话总结: redisson 连接集群加载slot时用的redis节点的nodes,conf, 而这个文件是redis集群自己管理的且文件中自己节点ip 会自动修改. 导致redisson使用了nodes,conf 中 ip地址去连, 这个ip怎么可能连的上啊.

ps:单个节点连接可以使用

问题补充:

看图吧, 我不知道是不是云服务器问题. 上面连接ip都是我的云服务器ip, 总有一个ip是错误的.
经过检查这个ip是redis 集群自己管理的配置文件中的

如果设置 .setCheckSlotsCoverage(false) 没法解决的

月华流照的主页 月华流照 | 初学一级 | 园豆:154
提问于:2023-03-29 16:28
< >
分享
所有回答(3)
0

根据你的描述,我理解到你遇到的问题是 Redis Cluster 的节点 IP 地址被 Redis Cluster 自动修改了,导致 Redisson 使用的 IP 地址与实际 IP 地址不一致,从而无法连接到 Redis Cluster 的某些节点。

Redis Cluster 使用 Gossip 协议自动发现节点和更新集群状态,这可能导致节点的 IP 地址在 Redis Cluster 中被自动修改。Redisson 在连接 Redis Cluster 时,会从集群中的一个节点读取集群的节点信息,包括节点的 IP 地址和槽位信息。因此,如果节点的 IP 地址被修改,那么 Redisson 使用的 IP 地址就会与实际 IP 地址不一致,导致连接失败。

解决这个问题的方法是在 Redisson 的配置文件中手动指定 Redis Cluster 的节点 IP 地址,而不是从集群中自动获取。你可以在 Redisson 的配置文件中添加以下配置:

clusterServersConfig.addNodeAddress("redis://<ip>:<port>");
其中 <ip> 和 <port> 是 Redis Cluster 的一个节点的 IP 地址和端口号。你需要指定所有 Redis Cluster 节点的 IP 地址和端口号。这样 Redisson 就会使用你手动指定的 IP 地址连接到 Redis Cluster,而不会使用集群中自动获取的 IP 地址。

另外,关于 Redis Cluster 中节点的 IP 地址被修改的问题,你可以通过在 Redis Cluster 中手动指定节点的 IP 地址来避免。你可以在启动 Redis Cluster 的时候,通过命令行参数 --bind 指定节点的 IP 地址,例如:

redis-server --cluster-enabled yes --cluster-config-file nodes.conf --bind <ip>
其中 <ip> 是节点的 IP 地址。这样就可以避免节点的 IP 地址被自动修改了。

Technologyforgood | 园豆:6772 (大侠五级) | 2023-03-29 21:23

我指定节点的。因为lettuce可以使用,用的是clusterServersConfig.addNodeAddress("redis://<ip>:<port>");这个方法。(这回答一股chatGPT的味道呢)

支持(0) 反对(0) 月华流照 | 园豆:154 (初学一级) | 2023-03-29 21:32
0

您使用 Redis Cluster 部署了一个 Redis 集群,并使用 Redisson 客户端连接到该集群时遇到了问题。具体来说,Redisson 连接集群加载 slot 时使用的是 Redis 节点的 nodes.conf 文件中的 IP 地址,但该文件是 Redis 集群自己管理的,并且文件中自己节点的 IP 地址会自动修改,导致 Redisson 使用了 nodes.conf 中的 IP 地址去连接,而该 IP 地址实际上无法连接成功。

这个问题可能与 Redis 集群的配置有关。下面是一些可能有用的建议和解决方案:

确认 Redis 集群的配置是否正确。在 Redis 集群中,每个节点都应该运行在不同的端口上,且节点之间应该可以互相通信。您可以使用 redis-cli 命令行工具连接到 Redis 集群,然后使用 CLUSTER INFO 命令查看集群的信息,以确保集群配置正确。

确认 Redisson 客户端的配置是否正确。在连接 Redisson 客户端时,您需要正确地配置 Redis 集群的主节点或者 seed 节点,以确保客户端可以正确地连接到 Redis 集群。请注意,如果 Redisson 客户端连接到的是一个 Redis Sentinel 集群,则需要指定哨兵节点的 IP 地址和端口。

尝试禁用 Redisson 客户端的 checkSlotsCoverage 选项。在 Redis 集群中,每个节点负责处理不同的槽位(slot),因此客户端需要使用 cluster slots 命令获取 Redis 集群中所有节点的槽位信息,以确保客户端可以正确地路由请求。如果 Redisson 客户端在加载槽位信息时遇到了问题,则可以尝试禁用 checkSlotsCoverage 选项。

确认网络配置是否正确。如果 Redisson 客户端无法连接到 Redis 集群中的某个节点,则可能是网络配置出了问题。请确保 Redis 集群中的节点之间可以互相通信,并且 Redisson 客户端可以访问 Redis 集群中的所有节点。

lyshark | 园豆:215 (菜鸟二级) | 2023-03-30 11:03
0

问题在于哪个“独特的ip” 是内网ip地址,可以配置在redis.conf
是在docker 下运行的

cluster-announce-ip 192.168.0.1
月华流照 | 园豆:154 (初学一级) | 2023-03-30 23:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册