在 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 个节点的主要内容,如果未能解决你的问题,请参考以下文章