【问题标题】:Only one node owns data in a Cassandra clusterCassandra 集群中只有一个节点拥有数据
【发布时间】:2016-01-19 14:38:03
【问题描述】:

我是 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_nameinitial_tokenendpoint_snitchlisten_addressrpc_addressseedsinternode_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

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

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

谢谢!

【问题讨论】:

    标签: configuration cassandra


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      阅读this article 以更深入地了解令牌。如果你想了解check this article out生成的数字的含义。

      【讨论】:

        【解决方案3】:

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

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

        如果您在cqlsh 中使用DESCRIBE KEYSPACE x,您将看到replication_factor 当前为您的键空间设置了什么(我假设答案是1)。

        更多详情here

        【讨论】:

        • 但是即使复制因子为1,一个keyspace中的数据是否应该分布到多个节点?
        • no..for 复制因子 1 在数据中心内不会发生数据复制
        猜你喜欢
        • 2011-06-14
        • 2013-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        相关资源
        最近更新 更多