我有NodeJS服务,它可以与couchbase集群对话来获取数据。couchbase集群有4个节点(运行在ip1、ip2、ip3、ip4上),服务也运行在相同的4台服务器上。在所有NodeJS服务上,我的连接字符串如下所示:
couchbase://ip1,ip2,ip3,ip4但是,每当我试图从桶X中获取一些文档时,控制台就会显示ip4上的节点正在执行该操作。无论哪个NodeJS应用程序提出请求,同一个ip4都在为所有请求提供服务。
我希望每个NodeJS服务器使用它们的couchbase节点,这样所有服务器上的内存和CPU消耗是相等的,所以我改变了连接字符串中ip4的顺序,但是每次请求都由同一个ip4处理。
我创建了另一个桶,并将我的数据放入其中并尝试获取它,但它又转到了同一个ip4中。有人能解释一下为什么会发生这种情况吗?它会导致某个节点的高负载吗?
发布于 2015-05-13 17:18:51
您所说的“我希望每个NodeJS服务器使用它们的couchbase节点”是什么意思?在Couchbase中,活动数据集的一部分位于集群中的每个节点上。切分是自动的。当您有一个集群时,每个桶的1024个活动vBuckets (碎片)分布在集群的所有节点上。因此,对于4个节点,每个节点上将有256个vBuckets。给定Couchbase所使用的一致散列算法,它将能够从该对象进入哪个vBucket键中判断,并与它从集群获得的集群映射相结合,从而知道vBucket驻留在集群中的哪个节点。因此,如果数据分布均匀,应用程序将从集群中的每个节点获取数据,如果配置正确的话。
在文件系统中,将作为Couchbase的一部分,安装一个以objectID和集群地图为参数的CLI工具调用vbuckettool。它所做的就是一致的散列算法+聚类图。所以,即使一个对象还不存在,你也可以预测它的去向。
另外,生产中的最佳实践是不要在与Couchbase相同的节点上运行应用程序。它实际上应该是分开的,以最大限度地利用它的共享架构,以及其他原因。
https://stackoverflow.com/questions/30214637
复制相似问题