我是否绝对需要至少3个节点/服务器来构建Cassandra集群,或者2个就足够了?

15

当然可以运行单节点群集,但我想要一定程度的容错能力。

目前我可以承租两个服务器(8GB RAM,1GigE私有VLAN),但不能承租三个。

我的理解是Cassandra集群需要最少3个节点,因为2个节点之间不可能形成多数派,而解决版本冲突需要多数派。哦,等等,我在想“向量时钟”和Riak吗?糟糕!Cassandra使用时间戳来解决冲突。

对于2个节点,推荐使用什么读写策略?通常应该写入所有节点并从一个节点读取吗(N=2; W=N/2+1; W=2/2+1=2)?即使只有2个节点,Cassandra也会像往常一样使用暗示传递,是吗?

这2台服务器位于同一数据中心。

谢谢!

1个回答

24

如果您需要在RF=2、clustersize=2的系统上保证可用性,那么您不能使用ALL,否则当一个节点失效时就无法进行写入操作。

这就是为什么人们建议使用3个节点而不是2个节点,因为这样可以进行法定读写,并且在单个节点失效时仍然具有强一致性和可用性。

只有两个节点,您可以选择想要强一致性(使用 ALL 进行写入)或在单个节点故障时保持可用性(使用 ONE 进行写入),但二者不能兼得。 当然,如果使用 ONE 进行写入,则Cassandra将根据需要执行 hinted handoff 等操作以使其最终达到一致性。


这还正确吗?你的回答中,“一致性级别 ONE”的含义似乎更像是当前版本Cassandra上的“一致性级别 ANY”。我猜想在某个时候,ANY从ONE分叉出来了? - Jason Punyon
当您的节点计数等于副本数时,ONE和ANY是等效的。 - jbellis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接