我已经建立了一个总共有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个节点上复制。
答案 0 :(得分:1)
数据仅复制到两个节点,但您可以从群集中的任何节点进行读/写。有关请求协调的更多信息,请参阅here。
要检查群集中哪些节点具有副本,可以使用nodetool:
nodetool getendpoints <keyspace> <table> <key value>
答案 1 :(得分:0)
在4节点群集中在创建键空间时将replication_factor设置为2时,数据仅复制到两个节点,但您可以从群集中的任何节点读取/写入。查询数据时,您将能够查看所有节点上的数据,这并不意味着数据将在所有节点上复制。
注意:nodetool getendpoints返回应该存储具有该密钥的数据的节点。即使密钥不存在于集群中,它也适用于任何密钥。它不会检查数据是否存在于任何地方。