我正在使用Node.js SDK连接到couchbase集群。在Node.js文档中,他们没有指定如何在创建集群对象时传递多个ips(集群节点),但是java文档显示它可以接受IP数组,这个功能在Node.js SDK中是否也可用?
此外,如果您连接到具有多个节点的群集,每当我们向群集添加新节点时,我们是否需要将其IP添加到连接字符串并重新启动应用程序?
PS 我是Couchbase和Node.js的新手,所以请耐心等待我
答案 0 :(得分:1)
最佳做法是在连接字符串中放置尽可能多的节点,以便在其中一个节点不可用时,客户端仍然可以最初连接。
但是,要回答原始问题否,应用程序更改/重新启动不是必需。客户端只需要知道属于集群的单个节点,并将连接到该节点并发现所有其他节点。
当您考虑客户端如何实际连接到群集时,这两个概念都会有意义。
由于Couchbase是一个分布式系统,所有节点都知道所有其他节点(因此,您可以登录任何节点的管理控制台来管理集群),应用程序只需了解一个初始节点,并连接到该节点将通知它们所有其他节点。
假设您已从群集10.4.4.1
中删除了单个节点,因此您的群集只有10.4.4.2
和10.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个群集节点,然后客户端无法自举并获取初始群集映射。
我知道这听起来有点奇怪,但效果很好。