couchbase 集群文档不复制但分裂

couchbase cluster document not replicating but splitting up

我设置了一个 couchbase 集群,其中包含 4 个存储桶上的 300k 文档的 2 个节点。由于只有 2 台机器,选项 replicas 被强制设置为 1。

但是文档在一个节点中分成两半,在另一个节点中分成两半,我需要每个文档的双份副本,这样如果一个节点出现故障,另一个节点仍会向我的应用程序提供所有数据。

我在创建集群时是否遗漏了某个设置?

我还能设置集群来复制所有文档吗?

希望有人能帮忙

谢谢

PS: 我正在使用 couchbase 社区 4.5

更新: 我添加集群 web 界面和 cbstast 输出的屏幕截图:
以下是只有一个节点的状态

下一个两个节点都向上的:

然后当两个节点都启动并且 运行ning 时,cbstats 在两个节点上产生结果:

如您所见,只有一个节点显示了一半的项目。这是否意味着另一半作为副本驻留但未显示??? 我仍然可以 运行 我的应用程序只有一个节点吗???

更新: 我必须手动单击 fail-over 才能看到副本在剩余节点上变为活动状态。由于只有两个集群自动 fail-over 被禁用!!!

如您所见,Couchbase Server 将跨两个节点对文档进行分区或分片。它还会根据您的单副本配置在这些节点上放置副本。

要访问副本,您必须使用 Client SDKs 之一。

例如,如果活动文档检索失败 (get("id")),此 Java 代码将尝试检索副本 (getFromReplica("id", ReplicaMode.ALL))。

bucket.async()
    .get("id")
    .onErrorResumeNext(bucket.async().getFromReplica("id", ReplicaMode.ALL))
    .subscribe();

ReplicaMode.ALL 告诉 Couchbase 尝试所有具有副本的节点和活动节点。

所以集群中只有两个节点发生的情况是自动故障转移没有按照此处指定的那样自动启动: https://developer.couchbase.com/documentation/server/current/clustersetup/automatic-failover.html

这意味着数据副本在剩余节点中未激活,除非手动触发故障转移。

最好的办法是在投入生产之前在集群中拥有两个以上的节点。

老实说,我应该在问任何问题之前非常仔细地阅读文档。

感谢 Jeff Kurtz 的帮助,你促使我找到了解决方案。 (了解 couchbase 副本策略的工作原理)。