nosql - 对于 Cassandra 集群,我绝对需要至少 3 个节点/服务器还是 2 个就足够了?

标签 nosql cassandra fault-tolerance

当然可以运行一个单节点集群,但我想要某种程度的容错。

目前我可以租两台服务器(8GB RAM,私有(private) VLAN @1GigE),但不能租 3 台。

我的理解是,Cassandra 集群至少需要 3 个节点,因为 2 个节点之间不可能存在多数,解决版本冲突需要多数。哦,等等,我在想“矢量时钟”和 Riak 吗?确认! Cassandra 使用时间戳来解决冲突。

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

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

谢谢!

最佳答案

如果您需要 RF=2、clustersize=2 系统上的可用性,那么您不能使用 ALL,否则当节点出现故障时您将无法写入。

这就是为什么人们推荐 3 个节点而不是 2 个节点的原因,因为这样您就可以进行仲裁读取+写入,并且在单个节点出现故障时仍然具有强一致性和可用性。

只需 2 个节点,您就可以选择是想要强一致性(使用 ALL 写入)还是在面对单个节点故障时的可用性(使用 ONE 写入),但不能两者兼而有之。当然,如果您使用 ONE cassandra 编写,则会根据需要进行提示切换等,以使其最终保持一致。

关于nosql - 对于 Cassandra 集群,我绝对需要至少 3 个节点/服务器还是 2 个就足够了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2330562/

相关文章:

rest - 如何在 HBase REST curl 中以相反的顺序获取行

mysql - 使用 NoSql?如果是的话怎么办?

cassandra - 使用 datastax java 驱动程序 2.1.4 连接到 Cassandra 集群太慢

database - 我可以用哪种格式存储 golang 的 time.Time 在 scylladb 中?

spring-boot - 具有用户定义类型的 map 的 Sprint-data-Cassandra 映射失败,错误为 "not of type of the persistent entity"

Java Web 应用程序监控和容错

java - 如何设计:避免在随机访问文件时资源泄漏

java - 如何确定 Akka actor/supervisor 层次结构?

java - CouchDb - MongoDb 和 NoSQL 数据库比较(使用 XML 文档)

database - 如何在 Redis 中对哈希值进行排序?