我已经在4个桶中设置了一个包含2个节点的couchbase集群,其中包含300k文档。选项副本被强制为1,因为只有2台机器。
但是文档在一个节点中被分成一半在另一个节点中,我需要有每个文档的双重副本,所以如果一个节点发生故障,另一个节点仍然会向我的应用程序提供所有数据。
创建群集时是否存在我错过的设置?
我仍然可以将群集设置为复制所有文档吗?
我希望有人可以提供帮助。
感谢
PS:我正在使用couchbase社区4.5
更新:
我添加了集群web界面和cbstast输出的截图:
以下是仅具有一个节点的状态
然后当两个节点都启动并运行时,cbstats会在两个节点上生成:
如您只能看到一个节点,则会显示一半的项目。这是否意味着另一半作为复制品存在但未显示? 我还能用一个节点坚持运行我的应用程序???
更新: 我必须手动单击故障转移才能看到副本在剩余节点上变为活动状态。只有两个集群自动故障转移被禁用!!!
答案 0 :(得分:1)
如您所见,Couchbase Server将在两个节点之间对文档进行分区或分片。它还将根据您的单副本配置在这些节点上放置副本。
要访问副本,您必须使用Client SDKs之一。
例如,如果活动文档检索失败(getFromReplica("id", ReplicaMode.ALL)
),此Java代码将尝试检索副本(get("id")
)。
bucket.async()
.get("id")
.onErrorResumeNext(bucket.async().getFromReplica("id", ReplicaMode.ALL))
.subscribe();
ReplicaMode.ALL
告诉Couchbase尝试所有包含副本和活动节点的节点。
答案 1 :(得分:0)
因此,群集中只有两个节点发生的事情是自动故障转移没有按照此处的指定自动启动: https://developer.couchbase.com/documentation/server/current/clustersetup/automatic-failover.html
这意味着在剩余节点中未激活的数据副本除非故障转移被触发manullay。
最好的方法是在投入生产之前在群集中拥有两个以上的节点。
说实话,在提出任何问题之前,我应该非常仔细地记录文件。
感谢Jeff Kurtz的帮助,你推动我走向解决方案。 (了解couchbase复制策略的工作原理)。