我是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
默认=克莱斯勒:RACKX
到目前为止,一切似乎都有意义,除了我故意放下一个节点只是为了看到所产生的行为,我注意到我不能再查询/插入数据在剩余的节点上,因为它导致"无法完成请求:一个或多个节点不可用。"
我知道一个节点不可用了(我故意这样做的),但是分布式数据库的要点之一不是在一些节点宕机的情况下继续支持功能吗?为什么关闭一个节点就能完全停止一切?
我错过了什么?
任何帮助将非常感激!!
您假设关闭一个节点仍然允许您查询集群是正确的,但是有一些事情需要考虑。
我假设"nodeool status"返回该DC的预期结果(即。"UN"表示UP节点,"DN"表示down节点)
检查以下内容:
- 连接的一致性级别(默认为ONE)
- 键空间复制策略和因子(默认为Simple, rack/dc不知情)
请注意,如果您一直在使用复制因子,则需要在节点上运行"nodeool修复"。
更多阅读
是否可能您没有将键空间上的复制因子设置为大于1的值?例如:
CREATE KEYSPACE "Excalibur"= {'class': 'NetworkTopologyStrategy', 'dc1': 2, 'dc2': 2};
将配置您的键空间,以便将数据复制到每个dc1和dc2数据中心的2个节点。
如果您的复制因子为1,并且拥有您正在查询的数据的节点发生故障,您将无法检索数据,并且C*将快速失败并出现不可用错误。一般来说,如果C*检测到一致性级别不能满足您的查询服务,它将很快失败。