假设我有一个带有2个数据节点的Couchbase集群:1和2。
文档X在节点1上处于活动状态,并在节点2上复制。
假设节点1关闭,文档X被提升为“活跃”状态。在节点2上节点1停机一段时间;与此同时,对文件X进行了大量修改。
一段时间后,节点1重新上线。请记住,文档X是活跃的'在节点1中。
会发生什么?似乎Document X在两个节点上都是活动的。 Couchbase可以自己处理这个冲突,还是我必须在我的应用程序代码中做任何事情才能解决它?
答案 0 :(得分:1)
更深入一点,如果vBucket在节点2上被提升为活动状态,则表示发生了故障转移,无论是手动还是自动。当节点1重新启动时,您必须重新添加该节点。如果尚未重新平衡,则可以使用增量节点恢复添加节点,群集将从中断的位置赶上节点1。另一个选项是添加该节点,就像它是一个新节点一样,Couchbase将删除并重新填充该节点。有关更详尽的解释,go read the newer 4.5 beta documentation。它适用于4.0和4.1,大部分甚至是3.x。
无论如何,长话短说... Couchbase将负责捕获节点1,如果它在节点2上更新而节点1停止时将以某种方式离开该节点,将获得更新的版本。
答案 1 :(得分:0)
这是通过在vBucket级别重新平衡来处理的。
根据this blog post about rebalancing:
当客户端...正在向群集发送请求时,它需要 密钥和哈希它反对vbuckets列表。然后看着 它必须确定哪个服务器处于活动状态的映射 vbucket。如果其地图正确,服务器将接受请求... 如果客户端...发送到服务器的vbucket id在该服务器上未激活 服务器,它会回复一个错误,说'不是我的vbucket'。中 重新平衡,如果客户没有及时更新,有一些 请求'在飞行中'或以某种方式错过备忘录,旧节点 在此之后,任何请求都会回复“not my vbucket”错误 时间点。
这是一篇旧博文,但仍然适用。基本上,当节点重新联机时,您不必担心与旧文档的冲突。