1

我已经为 cassandra 集群配置了 4 个节点和 2 个种子。当我运行 nodetool status 时,各个节点的所有权如下,

node1 (seed1)    - 24.5%
node2            - 15.0%
node3(seed2)     - 46.1%
node4            - 14.5%

应该拥有应该有相同的百分比。如果是这样,我怎样才能使它相等。当我关闭node2和node4时,我可以插入/检索复制因子为2的数据。但是当我制作node1或node2时,我不能。得到以下异常,

SEVERE: me.prettyprint.hector.api.exceptions.HUnavailableException: : May not be enough replicas present to handle consistency level.
java.lang.Exception: me.prettyprint.hector.api.exceptions.HUnavailableException: : May not be enough replicas present to handle consistency level.
    at com.july.storage.cassandra.util.CassandraDBUtil.getData(CassandraDBUtil.java:197)
    at com.july.storage.cassandra.util.CassandraDBUtil.doSelect(CassandraDBUtil.java:370)
    at com.july.storage.cassandra.action.CassandraHandler.getCall(CassandraHandler.java:127)
    at com.july.storage.service.StorageService.GET(StorageService.java:58)
    at com.july.storage.cassandra.action.CassandraHandler.main(CassandraHandler.java:571)
Caused by: me.prettyprint.hector.api.exceptions.HUnavailableException: : May not be enough replicas present to handle consistency level.
    at me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:59)
    at me.prettyprint.cassandra.model.CqlQuery$1.execute(CqlQuery.java:130)
    at me.prettyprint.cassandra.model.CqlQuery$1.execute(CqlQuery.java:100)
    at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:103)
    at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:258)
    at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecuteOperation(ExecutingKeyspace.java:97)
    at me.prettyprint.cassandra.model.CqlQuery.execute(CqlQuery.java:99)
    at com.july.storage.cassandra.util.CassandraDBUtil.getData(CassandraDBUtil.java:179)

谢谢, 桑吉塔

4

1 回答 1

3

不平衡可能取决于很多因素,而您并没有给我们太多的帮助。

  • 您的集群中有多少数据?如果没有太多,那么这是完全正常的。如果集群中只有一千行,那么获得均匀分布的可能性极小。
  • 你启用vnodes了吗?如果您使用的是最新版本,例如 1.2.5,则默认启用此功能。如果您有旧版本或禁用了 vnode,那么节点不平衡的情况并不少见。您可以使用手动模式节点nodetool,但不要在生产系统上执行此操作,请先在测试环境中进行测试。
  • 您使用的是哪个分区程序?如果您不知道自己使用的是随机分区器,这应该会增加均匀分布的可能性,但是如果您已更改为有序分区器,则无法期望得到均匀分布,则需要移动节点手动添加数据到集群。

当两个节点关闭时您无法检索数据的原因可能是您要检索的行驻留在这两个节点上,只有四个节点和复制因子为 2,这很可能——尤其是因为您可以获得只有其他两个节点启动时的数据。尝试另一行,您很可能会得到不同的结果,并尝试将请求的一致性级别更改为一个(您没有说明您使用的是什么一致性级别,所以我假设您正在阅读 quorum,其中包含复制因子二意味着两个节点都必须启动)。

于 2013-06-27T10:18:50.700 回答