当 RF = 2 时,Cassandra 在所有节点上复制数据
Cassandra Replicates data on all nodes when RF = 2
我设置了一个总共有 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 个节点上复制。
数据仅复制到两个节点,但您可以从集群中的任何节点read/write。有关请求协调的更多信息,请参阅 here。
要查看集群中哪些节点有副本,可以使用nodetool:
nodetool getendpoints <keyspace> <table> <key value>
在 4 节点集群中 当您在创建键空间时将 replication_factor 设置为 2 时,数据仅复制到两个节点,但您可以从集群中的任何节点 read/write。当您查询数据时,您将能够看到所有节点上的数据,这并不意味着数据已复制到所有节点上。
注意:nodetool getendpoints returns 应该存储具有该键的数据的节点。它适用于任何键,即使该键不存在于集群中。它不会检查数据是否存在于任何地方。
我设置了一个总共有 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 个节点上复制。
数据仅复制到两个节点,但您可以从集群中的任何节点read/write。有关请求协调的更多信息,请参阅 here。
要查看集群中哪些节点有副本,可以使用nodetool:
nodetool getendpoints <keyspace> <table> <key value>
在 4 节点集群中 当您在创建键空间时将 replication_factor 设置为 2 时,数据仅复制到两个节点,但您可以从集群中的任何节点 read/write。当您查询数据时,您将能够看到所有节点上的数据,这并不意味着数据已复制到所有节点上。
注意:nodetool getendpoints returns 应该存储具有该键的数据的节点。它适用于任何键,即使该键不存在于集群中。它不会检查数据是否存在于任何地方。