将新的 couchbase 节点添加到集群时是否需要更改应用程序?

Is application change required when new couchbase node added to cluster?

我正在使用 Node.js SDK 连接到 couchbase 集群。在 Node.js 文档中,他们没有指定如何在创建集群对象时传递(集群节点的)多个 ips,但是 java 文档显示它可以接受 IP 数组,这个功能在 Node.js 还有 SDK?

此外,如果这是连接到具有多个节点的集群的方式,那么每当我们向集群添加新节点时,是否需要将其 IP 添加到连接字符串并重新启动应用程序?

PS 我是 Couchbase 的新手 Node.js 所以请多多包涵

此功能在 node.js SDK 中。不幸的是,我不在可以为您提供 link.

的地方

当您向 Couchbase 集群添加新节点时,拓扑更改会通过发送更新的集群映射在每个客户端上进行更新。如果在 cluster map 还没有发出的那一瞬间抓到 cluster,SDK 会得到一个 "not my vbucket" 错误,同时会收到新的 cluster map。无论如何,您添加或删除节点对您的应用程序应该是透明的。

此外,最好在连接字符串或 DNS SRV 记录中使用至少 3 个集群节点,这样客户端就不太可能无法引导和获取初始集群映射。

我知道这听起来有点奇怪,但效果很好。

最佳做法是在连接字符串中放置尽可能多的节点,以便在其中一个节点不可用的情况下,客户端仍然能够最初连接。

然而,要回答您最初的问题,,change/restart 不需要 申请。客户端只需要知道作为集群一部分的 单个 节点,并将连接到该节点并发现所有其他节点。

当您考虑客户端实际连接到集群的方式时,这两个概念都会有意义。

使用单个节点

  1. 客户端连接到 10.4.4.1
  2. 客户端从 10.4.4.1 请求 "Cluster Map"。集群映射包含有关集群本身的信息,包括属于集群
  3. 所有个节点的列表
  4. 客户端连接到集群映射中的所有其他节点(这意味着 10.4.4.2、10.4.4.3 等等)

由于 Couchbase 是一个分布式系统,所有节点都知道所有其他节点(因此,您可以登录到 任何 节点的管理控制台来管理集群),应用程序只需要知道一个初始节点,连接到该节点将通知它们所有其他节点。

传递多个节点

假设您从集群中删除了一个节点 10.4.4.1,因此您的集群只有 10.4.4.210.4.4.3。由于您的应用程序配置为仅连接到 10.4.4.1,因此您需要立即重新配置代码以连接到另一个节点,因为与 10.4.4.1 的连接将失败。由于 10.4.4.1 不再是集群的一部分,它将无法提供有关其他节点的信息。

如果您已将 所有 节点传递给集群,客户端确实会尝试仍然连接到 10.4.4.1,但是一旦客户端连接失败,它将继续尝试下一个节点 (10.4.4.2) 并成功获取新配置。

如果您添加了另一个节点,那么一切都不会失败 - 当然,我们建议您最终更新您应用程序中的节点列表,但这不是严格要求。