我是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完成请求:一个或多个节点不可用。"
我得到一个节点不可用(我是故意这样做的),但分布式数据库的要点之一是,即使某些节点出现问题,仍然需要继续支持功能吗?为什么让一个节点停下来完全停止一切?
我错过了什么?
非常感谢任何帮助!!
答案 0 :(得分:3)
您认为假设一个节点仍然允许您查询群集,但您需要考虑一些事项。
我假设" nodetool status"返回该DC的预期结果(即" UN"对于UP节点," DN"对于DOWNed节点)
检查以下内容:
请注意,如果您一直在玩复制因素,那么您需要运行" 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来为您的查询提供服务,它将很快失败。