3

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

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

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

我错过了什么?

任何帮助将不胜感激!!

4

2 回答 2

3

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

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

检查以下内容:

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

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

更多阅读在这里

于 2015-05-26T22:23:28.260 回答
2

您是否可能没有在密钥空间上设置大于 1的复制因子?例如:

使用复制创建密钥空间“Excalibur” = {'class': 'NetworkTopologyStrategy', 'dc1': 2, 'dc2': 2};

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

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

于 2015-05-26T22:16:19.333 回答