【问题标题】:Unexpected unequal sharing of data between nodes节点之间意外的不平等数据共享
【发布时间】:2013-06-27 09:50:09
【问题描述】:

我已配置 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)

谢谢, 桑吉萨

【问题讨论】:

  • 哪个版本的 Cassandra?另外,请努力格式化您的问题中的堆栈跟踪和示例,这将使我们更容易理解您的问题,并增加您获得答案的可能性。

标签: cassandra


【解决方案1】:

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

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

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

【讨论】:

  • 我使用的是 cassandra 1.2.5。是的,我没有太多数据。我刚刚配置和测试。我正在使用 murmur3partitioner。
  • 当只尝试在两个节点上发布时,我也会遇到同样的异常“可能没有足够的副本来处理一致性级别”
  • 检查请求的一致性级别,如果不是one,成功的机会很小(即使使用one,也不能保证一半集群停机)。你期待的是什么?您要求集群写入 N 个节点,它告诉您它不能,因为没有足够的节点来保证这一点。降低一致性要求,或添加更多节点。
  • 他还应该保证节点的token数量相等?
猜你喜欢
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2018-05-29
  • 2010-12-01
相关资源
最近更新 更多