我刚接触过Cassandra,只运行了一个带有5个节点的cassandra集群(版本1.2.8),并在其中创建了几个键空间和表。但是,我发现所有数据都存储在一个节点中(在下面的输出中,我手动地用节点号替换了ip地址):
Datacenter: 105
==========
Address Rack Status State Load Owns Token
4
node-1 155 Up Normal 249.89 KB 100.00% 0
node-2 155 Up Normal 265.39 KB 0.00% 1
node-3 155 Up Normal 262.31 KB 0.00% 2
node-4 155 Up Normal 98.35 KB 0.00% 3
node-5 155 Up Normal 113.58 KB 0.00% 4在他们的cassandra.yaml文件中,我使用除cluster_name、initial_token、endpoint_snitch、listen_address、rpc_address、seeds和internode_compression之外的所有默认设置。下面我列出了我修改过的非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所有使用相同种子的节点。
我能知道我在配置中可能做错了什么吗?如果需要更多的信息来解决问题,请随时通知我。
谢谢!
发布于 2013-08-10 16:02:50
如果您是从Cassandra 1.2.8开始的,您应该尝试使用vnodes特性。与其设置initial_token,不如在cassandra.yaml中取消注释# num_tokens: 256,并将initial_token保留为空白,或者将其注释掉。那么你就不用计算令牌位置了。每个节点将随机分配自己256个令牌,并且您的集群将大部分是平衡的(在几%内)。使用nodes还意味着您不必在每次添加或删除节点时“重新平衡”集群。
有关vnodes及其工作方式的完整描述,请参阅这篇博客文章:
http://www.datastax.com/dev/blog/virtual-nodes-in-cassandra-1-2
发布于 2013-08-10 12:30:34
您的令牌分配是这里的问题。所分配的令牌用于确定节点在环中的位置及其存储的数据范围。当您生成令牌时,目标是耗尽从0到(2^127-1)的整个范围。令牌与mysql集群中的id不一样,在这种情况下,必须按顺序递增它们。
有一个git上的工具可以帮助您根据集群的大小计算令牌。
阅读这篇文章以加深对令牌的理解。如果您想了解生成查查这篇文章的数字的含义。
发布于 2013-08-10 08:20:04
在创建密钥空间时,应该提供一个replication_factor:
CREATE KEYSPACE demodb WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor': 3};
如果在DESCRIBE KEYSPACE x中使用cqlsh,您将看到当前为您的密钥空间设置了什么replication_factor (我假设答案是1)。
更多细节这里
https://stackoverflow.com/questions/18158575
复制相似问题