gpt4 book ai didi

couchbase - 更新Java SDK版本后尝试连接集群时出现问题

转载 作者:行者123 更新时间:2023-12-02 23:47:24 27 4
gpt4 key购买 nike

更新 Java SDK 版本后尝试连接集群时遇到此问题。

系统设置如下:

我们有一个使用 Java SDK 和 Couchbase 集群的 Web 应用程序。在两者之间我们有一个 VIP(虚拟 IP 地址)。我们意识到这并不理想,但我们无法立即改变这一点,因为 VIP 是由技术运营部门强制执行的。 VIP 基本上只是在应用程序启动时重新路由初始请求。这样我们就可以对集群进行修改,并确保当应用程序启动时,无论集群中的实际节点及其IP如何,它都可以找到集群。

在出现此问题之前,我们使用的是 JAVA SDK 版本 1.4.4。我们的应用程序将启动,Java SDK 将在端口 8091 上向 VIP 发起请求。请注意,端口 8091 是 VIP 上唯一开放的端口。 VIP 会将请求重新路由到当前正在使用的节点集群之一,该集群将响应 Java SDK。此时,Java SDK 将发现集群中的所有节点,并且应用程序将正常运行。在正常运行期间,如果我们从集群中添加、删除节点,Java SDK 将自动更新,并且一切都将正常运行,不会出现问题。

在上一个冲刺中,我们将 Java SDK 更新到版本 2.1.3。我们的应用程序将启动,Java SDK 将在端口 11210 上向 VIP 发起请求。由于此端口未打开,请求将失败并且 Java SDK 将抛出异常:

Caused by: java.lang.RuntimeException: java.util.concurrent.TimeoutException
at com.couchbase.client.java.util.Blocking.blockForSingle(Blocking.java:93)
at com.couchbase.client.java.CouchbaseCluster.openBucket(CouchbaseCluster.java:108)
at com.couchbase.client.java.CouchbaseCluster.openBucket(CouchbaseCluster.java:99)
at com.couchbase.client.java.CouchbaseCluster.openBucket(CouchbaseCluster.java:89)

不会在任何端口上发出进一步的请求。

版本之间使用端口的顺序似乎已更改。有人可以确认或质疑用于集群发现的端口顺序在版本之间已更改吗?另外,有人可以就我们如何解决该问题提供一些建议吗?我们正在尝试了解客户端的行为,如果我们可以打开 VIP 上的所有这些端口,客户端是否仍能正常运行并发挥全部性能?

该问题发生在我们的生产环境中,我们无法使用该环境来测试潜在的解决方案,因为它会干扰我们的产品。

最佳答案

在 Java SDK v2.x 中,默认为 11210 来获取集群映射来引导应用程序。这实际上是一个巨大的改进,因为现在映射来自托管缓存而不是集群管理器(8091)。如果 SDK 无法获取 11210 上的 map ,则它应该使用 8091 作为后备。无论如何,你真的很想从 11210 得到那张 map ,相信我。它解决了很多问题。

要解决这个长期问题并遵循 Couchbase 最佳实践,请升级到 Java 2.2.x SDK,完全摆脱 VIP 并改用 DNS SRV 记录。这为您提供了 SDK 连接对象的一个​​ DNS 条目,您只需管理 DNS 中的节点列表即可。效果很好。我说 SDK 2.2 是完全支持 DNS SRV 记录解决方案的,在 2.1 中它是实验性的。如今,Couchbase 特别建议不要使用 VIP。在旧版本的 SDK 中,这样做很好,它有助于限制从应用程序到数据库节点的连接数量,但这不再是必要的,实际上可能是一件坏事。

关于couchbase - 更新Java SDK版本后尝试连接集群时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32690374/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com