【问题标题】:Lettuce fail over in cluster集群中的生菜故障转移
【发布时间】:2020-02-14 03:10:55
【问题描述】:

在旧的失败后,我试图让 Lettuce 连接到新提升的主人(前奴隶)。但是所有的写入都停止了。失败的主机重新连接后继续写入,现在作为从机。并且它会继续写入新的 master(以前的 slave)。

我尝试设置定期拓扑刷新,以及所有事件的自适应刷新,但没有帮助。我必须使用其他设置吗?

这是我配置客户端的方式:

final List<RedisURI> redisURIs = buildRedisURIs(redisServerSettings.getNodes());
final RedisClusterClient client = RedisClusterClient.create(clientResources, redisURIs);
final ClusterTopologyRefreshOptions refreshOptions =
        ClusterTopologyRefreshOptions.builder()
                                     .enableAllAdaptiveRefreshTriggers()
                                     .adaptiveRefreshTriggersTimeout(Duration.ofMinutes(2))
                                     .refreshTriggersReconnectAttempts(2)
                                     .enablePeriodicRefresh(Duration.ofMinutes(10))
                                     .build();
client.setOptions(ClusterClientOptions.builder().topologyRefreshOptions(refreshOptions).build());

【问题讨论】:

  • 您运行的是哪个版本的生菜?我今天早上确实发生了这种情况。 5.2.0 的 github.com/lettuce-io/lettuce-core/releases 引用了 github.com/lettuce-io/lettuce-core/issues/672,这在理论上似乎可能会有所帮助。但不知道。
  • 没关系,它看起来只添加了一个新的刷新触发器——在我的例子中,整个客户端在中途被重新创建——即在 aws 事件日志之后(以及从lettuce) 声称从站已被提升 - 所以我看到 4 个主站(在 3 个分片上),旧主站有标志 flags=[MASTER, FAIL] 一旦旧主站重新连接,一切正常。

标签: java redis lettuce


【解决方案1】:

我解决了这个问题。

因为 lettuce 通常不会超时,所以它一直在等待服务器的响应。设置超时导致部分事务失败,但事务失败后,读写继续。

【讨论】:

    猜你喜欢
    • 2014-06-14
    • 2020-06-16
    • 2017-08-31
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多