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

时间:2015-05-09 08:36:04

标签: javascript node.js sdk couchbase

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

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

PS 我是Couchbase和Node.js的新手,所以请耐心等待我

2 个答案:

答案 0 :(得分:1)

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

但是,要回答原始问题,应用程序更改/重新启动不是必需。客户端只需要知道属于集群的单个节点,并将连接到该节点并发现所有其他节点。

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

使用单个节点

  1. 客户端连接到10.4.4.1
  2. 客户端从10.4.4.1请求“Cluster Map”。群集映射包含有关群集本身的信息,包括作为群集的一部分的所有节点的列表
  3. 客户端连接到集群映射中的所有其他节点(这意味着10.4.4.2,10.4.4.3等)
  4. 由于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)并成功获取新配置。

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

答案 1 :(得分:0)

此功能位于node.js SDK中。不幸的是,我不在一个可以为你提供链接的地方。

将新节点添加到Couchbase群集时,会通过发送更新的群集映射在每个客户端上更新拓扑更改。如果您在尚未发送集群映射的那一瞬间捕获集群,SDK将获得一个"而不是我的vbucket"错误以及新的集群映射同时发生。无论如何,添加或删除节点应该对您的应用程序透明。

此外,最佳做法是在连接字符串或DNS SRV记录中使用至少3个群集节点,然后客户端无法自举并获取初始群集映射。

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