Cassandra Error: "Unable to complete request: one or more nodes were unavailable."

Cassandra Error: "Unable to complete request: one or more nodes were unavailable."

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

到目前为止,一切似乎都有意义,除了我故意关闭一个节点只是为了查看结果行为,我注意到我无法再 query/insert 剩余节点上的数据,因为它导致 "Unable to complete request: one or more nodes were unavailable."

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

我错过了什么?

任何帮助将不胜感激!!

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

CREATE KEYSPACE "Excalibur" WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'dc1' : 2, 'dc2' : 2};

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

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

您假设一个节点关闭仍应允许您查询集群是正确的,但有几件事需要考虑。

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

检查以下内容:

  • 连接的一致性级别(默认为 ONE)
  • 键空间复制策略和因素(默认为简单,rack/dc不知道)
    • 在 cqlsh 中,"describe keyspace "

请注意,如果您一直在研究复制因子,则需要在节点上 运行 一个 "nodetool repair"。

多读书here