对于Cassandra,假设复制因子为1(即数据集的两个副本),则最少需要三个节点来启用具有强一致性的写入。 Couchbase似乎没有这个要求,至少我没有在任何地方找到它。尽管如此,Couchbase仍然建议生产系统至少使用三个节点。
我发现的唯一动机是(1)双节点系统中的单节点故障将导致单点故障,以及(2)当扩展到第三节点时,双节点系统将需要更加努力,而不是三节点系统(我假设这是因为重新平衡)。
没有任何动机对我来说特别引人注目:
原因(1)感觉有点像说双磁盘RAID-1没用,只有三磁盘RAID-6(一个数据,两个校验和)是可以接受的。然而,RAID-1非常流行(远远超过三磁盘RAID-6:es),通常被认为是相对安全的。据推测,节点的丢失将导致管理员快速采取行动,因此风险应该是短暂的。
原因(2)对我来说似乎更加短暂。当添加第三个节点时,两个节点需要更加努力地工作。尽管如此,这只是一个问题,并且大多数应用程序都有负载的日常变化,可以完成重新平衡的适应性。
所以我想知道是否还有其他原因可以避免双节点Couchbase集群,假设这两个节点能够很好地承载负载?
答案 0 :(得分:10)
主要原因是使用少于三个节点禁用自动故障转移。这是为了防止出现“裂脑”的情况。考虑两个节点,节点A和节点B.如果一个节点不可访问(由于网络问题),则:
任何仍然可以看到两个节点的客户现在基本上都有两个独立的集群,他们都认为他们拥有整个数据集。
基本上在这种情况下,您违反了CAP中的一致性。
因此,Couchbase将不执行少于三个节点的自动故障转移,并且由于这是在生产系统中使用的推荐功能,因此群集中至少需要三个节点。
有关详情,请参阅Couchbase管理指南中的Failover considerations章节。