Cassandra错误:"无法完成请求:一个或多个节点不可用。"

时间:2015-05-26 21:53:04

标签: cassandra theory distributed-database

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

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

我得到一个节点不可用(我是故意这样做的),但分布式数据库的要点之一是,即使某些节点出现问题,仍然需要继续支持功能吗?为什么让一个节点停下来完全停止一切?

我错过了什么?

非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:3)

您认为假设一个节点仍然允许您查询群集,但您需要考虑一些事项。

我假设" nodetool status"返回该DC的预期结果(即" UN"对于UP节点," DN"对于DOWNed节点)

检查以下内容:

  • 连接的一致性级别(默认为一个)
  • Keyspace复制策略和因素(默认为简单,机架/直流不知道)
    • 在cqlsh中,"描述键空间"

请注意,如果您一直在玩复制因素,那么您需要运行" nodetool repair"在节点上。

更多阅读here

答案 1 :(得分:2)

您是否可能未将键空间的replication factor设置为大于1的值?例如:

  

创建KEYSPACE“Excalibur”     WITH REPLICATION = {'class':'NetworkTopologyStrategy','dc1':2,'dc2':2};

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

如果您的复制因子为1且某个节点发生故障并拥有您要查询的数据,则无法检索数据,并且C *将因不可用错误而快速失败。一般情况下,如果C *检测到无法满足consistency level来为您的查询提供服务,它将很快失败。