如何强制Cassandra不要在具有vnodes的模式中使用相同的节点进行复制

时间:2016-09-14 19:34:02

标签: cassandra

在单个节点中安装Cassandra以运行某些测试,我们注意到我们使用的RF为3,一切正常。

这当然是因为该节点有256个vnode(默认情况下),因此可以在不同的vnode中的同一节点中复制相同的数据。

这令人担忧,因为如果一个节点发生故障,即使您认为数据已在不同节点中复制,您也会丢失所有数据。

我怎样才能确定在标准安装中(带有多个节点的环)相同的数据将不会在同一个"物理"中复制。节点?是否有设置可以避免Cassandra使用相同的节点来复制数据?

3 个答案:

答案 0 :(得分:2)

复制策略依赖于架构。您可能在架构中使用 SimpleStrategy 并使用 RF = 3 。这意味着每条数据将被放置在由分区键确定的节点上,并且连续的副本将被放置在连续的节点上。在您的情况下,后续节点是相同的物理节点,因此您可以在那里获得3个数据副本。

增加节点数可以解决您的问题。通常,当您的复制因子 RF 小于/等于 N 的节点数时,您的数据将被放置在不同的物理节点中。

另一种解决方案是切换复制策略并使用通常在多数据中心群集中使用的 NetworkTopologyStrategy ,您可以在其中指定每个数据中心中需要的副本数量。这个策略

  

通过顺时针转动环将副本放在同一数据中心   直到到达另一个机架中的第一个节点。的 NetworkTopologyStrategy   尝试将副本放在不同的机架上,因为节点位于同一个机架中   机架(或类似的物理分组)经常由于失败而同时失败   电源,冷却或网络问题。

请查看DataStax documentation以获取更多信息。

答案 1 :(得分:0)

如果没有vnodes,每个物理节点都拥有一个令牌范围。对于vnode,每个物理节点将拥有多个非连续令牌范围(也称为vnode),并且vnode随机分配给物理节点。

这意味着,即使数据在主副本节点旁边的vnode上被复制(即使用SimpleStrategy时),副本也会 - 很有可能但不能保证 - 是在不同的物理节点上。

这个随机分配可以在nodetool ring的输出中看到。

可以找到更多信息here

答案 2 :(得分:0)

Cassandra将副本存储在同一键空间中的不同节点上。在同一密钥空间中拥有多个副本是没有意义的。如果复制因子超过节点数,则节点数是您的复制因子。

但是,为什么这不是错误?好吧,这允许以后配置更多节点。

  

As a general rule, the replication factor should not exceed the number of nodes in the cluster. However, you can increase the replication factor and then add the desired number of nodes later.