1

我是 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所有默认设置。下面我列出了我修改的那些非 IP 地址字段:cluster_nameinitial_tokenendpoint_snitchlisten_addressrpc_addressseedsinternode_compression

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

并且所有节点都使用相同的种子。

我可以知道我在配置中可能做错的地方吗?如果需要任何其他信息来找出问题,请随时告诉我。

谢谢!

4

3 回答 3

2

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

git 上有一个工具可以帮助您根据集群的大小计算令牌。

阅读本文以更深入地了解令牌。如果您想了解生成的数字的含义,请查看这篇文章

于 2013-08-10T12:30:34.067 回答
2

如果您从 Cassandra 1.2.8 开始,您应该尝试使用 vnodes 功能。而不是在 cassandra.yaml中设置initial_token, 取消注释,并将其留空,或将其注释掉。然后您不必计算令牌位置。每个节点将随机分配给自己 256 个令牌,并且您的集群将大部分是平衡的(在几个 % 以内)。使用 vnodes 还意味着您不必在每次添加或删除节点时都“重新平衡”集群。# num_tokens: 256initial_token

有关 vnode 及其工作原理的完整描述,请参阅此博客文章:
http ://www.datastax.com/dev/blog/virtual-nodes-in-cassandra-1-2

于 2013-08-10T16:02:50.920 回答
-1

您应该replication_factor在创建键空间时提供:

CREATE KEYSPACE demodb WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor': 3};

如果您使用DESCRIBE KEYSPACE xincqlsh您将看到replication_factor当前为您的键空间设置的内容(我假设答案是 1)。

更多细节在这里

于 2013-08-10T08:20:04.880 回答