在 3 节点 Cassandra 集群中将复制因子设置为 2;但数据仍在插入时被复制到所有 3 个节点

Posted

技术标签:

【中文标题】在 3 节点 Cassandra 集群中将复制因子设置为 2;但数据仍在插入时被复制到所有 3 个节点【英文标题】:Set replication factor to 2, in a 3 node Cassandra cluster; but still data is getting replicated to all 3 nodes on insertion 【发布时间】:2017-01-24 16:25:04 【问题描述】:

我有一个 3 节点集群,复制因子为 2,但数据正在所有 3 个节点上复制。这就是我创建密钥空间的方式:

如果不存在 DEMO 则使用复制创建密钥空间 = 'class':'SimpleStrategy', 'replication_factor':2;

这里缺少什么?

【问题讨论】:

你怎么知道它是“在所有 3 个节点上复制”? 【参考方案1】:

Cassandra 根据行的主键分配数据。任何表一般分布在所有机器上,插入一行时,只插入“两台机器”(这两台机器不是随机的,可以用nodetool计算)

如果您想了解更多有关数据如何按主键分布的信息,请查看分区器。 Cassandra Partitioners

【讨论】:

你的“任意两台机器”而已是错误的。应该是两台机器,因为您设置了 RF=2 对不起,我不明白你强调的那两个句子之间的区别。他们的意思是一样的(至少对我来说) 是的,我只是说每行没有“任何两台机器”,每行有“正好两台知名机器”,而句子“任意两台机器”可以是误导(对我来说)。【参考方案2】:

数据被分布3 个节点上,每个节点都持有 2 条数据:它自己的一条属于其分配的数据分区,以及属于其邻居节点的数据。

【讨论】:

【参考方案3】:

尝试在具有该键空间的表中的任何分区键上执行getendpoints。您将获得包含该分区的节点列表。在这种情况下,您应该只获得 2 个节点的输出。

$ nodetool getendpoints <keyspace> <table> key

【讨论】:

以上是关于在 3 节点 Cassandra 集群中将复制因子设置为 2;但数据仍在插入时被复制到所有 3 个节点的主要内容,如果未能解决你的问题,请参考以下文章

尽管复制因子为 3 的 QUORUM 一致性级别,Cassandra 仍不一致

Cassandra:挂节点工具修复

如何在 cassandra 中将环从集群中分离出来

Cassandra复制因子:需要节点具有完整的报告数据

Cassandra 全局快照

如何在节点关闭时平衡 cassandra 集群