【问题标题】:Cassandra Error: "Unable to complete request: one or more nodes were unavailable."Cassandra 错误:“无法完成请求:一个或多个节点不可用。”
【发布时间】:2015-08-08 18:42:17
【问题描述】:

我是 Cassandra 的新手,我只是在设置和使用它并使用 cqlsh 测试不同的场景。

我目前在 2 个数据中心中有 4 个节点,类似这样(当然有正确的 IP):

a.b.c.d=DC1:RACK1 a.b.c.d=DC1:RACK1 a.b.c.d=DC2:RACK1 a.b.c.d=DC2:RACK1

默认=DCX:RACKX

到目前为止,一切似乎都有意义,除了我故意关闭一个节点只是为了查看结果行为,我注意到我无法再在其余节点上查询/插入数据,因为它导致“无法完成请求: 一个或多个节点不可用。”

我知道一个节点不可用(我是故意这样做的),但分布式数据库的要点之一不是即使在某些节点出现故障时也能继续支持功能吗?为什么关闭一个节点就可以完全停止一切?

我错过了什么?

任何帮助将不胜感激!

【问题讨论】:

    标签: cassandra theory distributed-database


    【解决方案1】:

    您正确地假设一个节点停机仍应允许您查询集群,但有几件事情需要考虑。

    我假设“nodetool status”返回该 DC 的预期结果(即“UN”代表 UP 节点,“DN”代表 DOWNed 节点)

    检查以下内容:

    • 连接的一致性级别(默认为 ONE)
    • 键空间复制策略和因子(默认为简单,机架/直流不感知)
      • 在 cqlsh 中,“描述键空间”

    请注意,如果您一直在使用复制因子,则需要在节点上运行“nodetool repair”。

    更多阅读here

    【讨论】:

    • 谢谢布莱克!这是复制因素。
    【解决方案2】:

    是否有可能您没有在您的键空间上设置replication factor 的值大于 1?例如:

    创建密钥空间“Excalibur” WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'dc1' : 2, 'dc2' : 2};

    将配置您的密钥空间,以便将数据复制到每个 dc1 和 dc2 数据中心的 2 个节点。

    如果您的复制因子为 1,并且拥有您正在查询的数据的节点出现故障,您将无法检索数据,并且 C* 将快速失败并出现不可用错误。一般来说,如果 C* 检测到无法满足 consistency level 来为您的查询提供服务,它将很快失败。

    【讨论】:

    • 谢谢安迪!就是这样。现在有意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2014-04-11
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    相关资源
    最近更新 更多