Configuration Cassandra集群中只有一个节点拥有数据

Configuration Cassandra集群中只有一个节点拥有数据,configuration,cassandra,Configuration,Cassandra,我不熟悉Cassandra,只运行了一个有5个节点的Cassandra集群(版本1.2.8),我在上面创建了几个键空间和表。但是,我发现所有数据都存储在一个节点中(在下面的输出中,我已手动将ip地址替换为节点号): 在他们的cassandra.yaml文件中,我使用了除cluster\u name、initial\u-token、endpoint\u-snitch、listen\u-address、rpc\u-address、seeds和节间压缩之外的所有默认设置。下面我列出了我修改的那些非ip

我不熟悉Cassandra,只运行了一个有5个节点的Cassandra集群(版本1.2.8),我在上面创建了几个键空间和表。但是,我发现所有数据都存储在一个节点中(在下面的输出中,我已手动将ip地址替换为节点号):

在他们的
cassandra.yaml
文件中,我使用了除
cluster\u name
initial\u-token
endpoint\u-snitch
listen\u-address
rpc\u-address
seeds
节间压缩
之外的所有默认设置。下面我列出了我修改的那些非ip地址字段:

endpoint_snitch: RackInferringSnitch
rpc_address: 0.0.0.0
seed_provider:
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
      parameters:
          - seeds: "node-1, node-2"
internode_compression: none
以及使用相同种子的所有节点

我能知道在配置中哪里可能出错吗?如果需要任何其他信息来解决问题,请随时告诉我


谢谢大家!

在创建键空间时,您应该提供一个
复制\u因子


创建键空间解调器
使用REPLICATION={'class':'SimpleStrategy','REPLICATION\u factor':3};

如果在
cqlsh
中使用
description KEYSPACE x
,您将看到当前为您的键空间设置了什么
replication\u factor
(我假设答案为1)


更多详细信息

您的令牌分配是这里的问题。分配的令牌用于确定节点在环中的位置及其存储的数据范围。当您生成令牌时,目标是使用从0到(2^127-1)的整个范围。令牌与mysql集群的id不同,在mysql集群中,您必须按顺序递增令牌

有一种方法可以帮助您根据集群的大小计算令牌


阅读以加深对标记的理解。如果您想了解生成的数字的含义。

如果您从Cassandra 1.2.8开始,您应该尝试使用vnodes功能。与其设置
初始标记
,不如取消cassandra.yaml中的
num_标记:256
,并将
初始标记
保留为空,或将其注释掉。那么你就不必计算代币的位置了。每个节点将随机为自己分配256个令牌,您的集群将基本上处于平衡状态(在几%之内)。使用VNode还意味着不必在每次添加或删除节点时“重新平衡”集群

有关VNode及其工作方式的完整描述,请参阅此博客帖子:

但即使复制系数为1,一个键空间中的数据是否应分布到多个节点?否。对于复制系数1,数据中心内不会进行数据复制
endpoint_snitch: RackInferringSnitch
rpc_address: 0.0.0.0
seed_provider:
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
      parameters:
          - seeds: "node-1, node-2"
internode_compression: none