首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >redisson java客户端能检测到集群拓扑中失败的主副本对的重新启动吗?

redisson java客户端能检测到集群拓扑中失败的主副本对的重新启动吗?
EN

Stack Overflow用户
提问于 2018-12-10 10:43:00
回答 1查看 1.2K关注 0票数 0

我的Spring引导应用程序使用redisson 3.3.0访问具有以下YML配置的redis集群拓扑:

代码语言:javascript
复制
redis:
   cluster:
       nodes: ${CLUSTER_HOST}:6379
       read-mode: 'MASTER'
   connections: 125
   max_wait_millis: 10000
   cluster-scan-interval: 1000

redis集群设置为默认(3个节点,每个节点有1个副本)。

我停止包含相同插槽的两个节点(主复制对)。然后,当我的应用程序试图读取这些插槽中的键时,正如预期的那样,我得到了这个异常:

代码语言:javascript
复制
org.redisson.client.RedisConnectionException: 
MasterConnectionPool no available Redis entries.  
Disconnected hosts: [/${CLUSTER_HOST}:6379] 

我认为这是正确的,因为在使用集群节点命令检查我的redis节点之后,我可以看到两个节点已经关闭,它们的插槽也从集群中丢失了。

问题是,当我再次启动节点时,我使用集群信息&集群节点检查集群是否返回。尽管如此,当我的应用程序试图再次从集群中读取时,我得到了这个redisson异常:

代码语言:javascript
复制
    io.netty.util.concurrent.DefaultPromise: 151 - An 
    exception was thrown by org.redisson.command.CommandAsyncService$9.operationComplete()
java.lang.NullPointerException: null
    at org.redisson.connection.MasterSlaveConnectionManager.connectionReadOp(MasterSlaveConnectionManager.java:731)
    at org.redisson.command.CommandAsyncService.async(CommandAsyncService.java:501)
    at org.redisson.command.CommandAsyncService.checkAttemptFuture(CommandAsyncService.java:751)
    at org.redisson.command.CommandAsyncService.access$300(CommandAsyncService.java:80)
    at org.redisson.command.CommandAsyncService$9.operationComplete(CommandAsyncService.java:610)
    at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:512)
    at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:505)
    at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:484)
    at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:425)
    at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:122)
    at org.redisson.misc.RedissonPromise.tryFailure(RedissonPromise.java:98)
    at org.redisson.client.protocol.CommandData.tryFailure(CommandData.java:78)
    at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:247)
    at ...

每当我的应用程序试图从/写到那些特定的插槽(意味着特定的mater-复制品对)时,我就一直得到它,尽管redis集群没有问题。

Redisson似乎无法为特定的主副本对检索正确的状态。

这是一个配置问题,还是默认行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-24 15:26:50

这一问题已在3.5.4版中得到解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53703998

复制
相关文章

相似问题

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