0

我有 NodeJS 服务,它与 couchbase 集群对话以获取数据。couchbase 集群有 4 个节点(在 ip1、ip2、ip3、ip4 上运行),服务也在相同的 4 台服务器上运行。在所有 NodeJS 服务上,我的连接字符串如下所示:

couchbase://ip1,ip2,ip3,ip4

但是每当我尝试从存储桶 X 中获取一些文档时,控制台都会显示 ip4 上的节点正在执行该操作。无论哪个 NodeJS 应用程序发出请求,相同的 ip4 都在为所有请求提供服务。

我希望每个 NodeJS 服务器都使用它们的 couchbase 节点,以便所有服务器上的 RAM 和 CPU 消耗相等,所以我更改了连接字符串中 IP 的顺序,但每次请求都由相同的 ip4 提供服务。

我创建了另一个存储桶并将我的数据放入其中并尝试获取它,但它再次进入相同的 ip4。有人可以解释为什么会发生这种情况,它会导致其中一个节点负载高吗?

4

1 回答 1

1

“我希望每个 NodeJS 服务器都使用他们的 couchbase 节点”是什么意思?在 Couchbase 中,部分活动数据集位于集群中的每个节点上。分片是自动的。当您拥有一个集群时,每个 Bucket 的 1024 个活动 vBucket(分片)分布在集群的所有节点上。因此,对于您的 4 个节点,每个节点上将有 256 个 vBucket。鉴于 Couchbase SDK 使用的一致散列算法,它将能够从 key 中判断该对象进入哪个 vBucket,并结合它从集群中获得的集群映射,知道 vBucket 位于集群中的哪个节点。因此,如果您正确配置应用程序,应用程序将从集群中的每个节点获取数据,因为数据是均匀分布的。

在文件系统上,作为 Couchbase 的一部分,将安装一个名为 vbuckettool 的 CLI 工具,该工具将 objectID 和 clustermap 作为参数。它所做的只是一致的散列算法+ clustermap。因此,即使对象尚不存在,您实际上也可以预测该对象将去往何处。

另一方面,生产中的最佳实践是不要在与 Couchbase 相同的节点上运行您的应用程序。它确实应该是分开的,以充分利用其无共享架构以及其他原因。

于 2015-05-13T17:18:51.607 回答