当RF = 2时,Cassandra在所有节点上复制数据

时间:2015-04-17 13:09:57

标签: python cassandra cassandra-2.0

我已经建立了一个总共有4个节点的Cassandra集群,其中2个节点是种子节点,另外2个节点是普通节点。我将复制因子设置为2。

这是我的 cassandra.yaml 。除以下值外,每个设置都保持相同的默认值。

rpc_address: 0.0.0.0
endpoint_snitch: GossipingPropertyFileSnitch

我使用上述配置在所有4个节点上安装了cassandra(当然有不同的listen_address)

接下来,我在所有4个节点上运行sync_tables.py文件。

以下是sync_tables.py文件

connection.setup(CLUSTER_NODES_LIST, "mad")

create_keyspace_simple("mad", replication_factor=2)
models_list = []
sync = True
if sync: 
    for model in models_list:
        sync_table(model)

它创建了KEYSPACE'mad'和N列系列。

现在当我触发查询以在seed1上插入数据时,它会复制所有4个节点上的数据。 为什么会这样?我将我的RF设置为2,然后将其复制到所有4个节点上。

当我DESCRIBE KEYSPACE mad;时,结果如下: -

CREATE KEYSPACE mad WITH replication = {
  'class': 'SimpleStrategy',
  'replication_factor': '2'
};

清楚地表明RF已被设置为2.这是正常行为。 为什么即使将RF设置为2,它也会在所有4个节点上复制。

2 个答案:

答案 0 :(得分:1)

数据仅复制到两个节点,但您可以从群集中的任何节点进行读/写。有关请求协调的更多信息,请参阅here

要检查群集中哪些节点具有副本,可以使用nodetool:

nodetool getendpoints <keyspace> <table> <key value>

答案 1 :(得分:0)

在4节点群集中在创建键空间时将replication_factor设置为2时,数据仅复制到两个节点,但您可以从群集中的任何节点读取/写入。查询数据时,您将能够查看所有节点上的数据,这并不意味着数据将在所有节点上复制。

注意:nodetool getendpoints返回应该存储具有该密钥的数据的节点。即使密钥不存在于集群中,它也适用于任何密钥。它不会检查数据是否存在于任何地方。

相关问题