Java 卡桑德拉报道说:“我的朋友,我的朋友。”;无法完成请求:一个或多个节点不可用;当我使用CQL时:;选择“从用户中选择*”;
Cassandra在具有3个节点的集群模型中工作。当所有节点都处于“启动”状态时,我在cqlsh中使用cql“select*from User”,Cassandra返回正确的结果。但在节点死后,当我再次使用“select”时,没有结果返回,而是报告:“无法完成请求:一个或多个节点不可用”。 我转而使用cassandra cli命令:“get Users”,它会毫无错误地返回正确的数据。Java 卡桑德拉报道说:“我的朋友,我的朋友。”;无法完成请求:一个或多个节点不可用;当我使用CQL时:;选择“从用户中选择*”;,java,python,cassandra,cql,Java,Python,Cassandra,Cql,Cassandra在具有3个节点的集群模型中工作。当所有节点都处于“启动”状态时,我在cqlsh中使用cql“select*from User”,Cassandra返回正确的结果。但在节点死后,当我再次使用“select”时,没有结果返回,而是报告:“无法完成请求:一个或多个节点不可用”。 我转而使用cassandra cli命令:“get Users”,它会毫无错误地返回正确的数据。 有什么想法吗?我希望当您使用CQL时,您会收到一个一致性级别为“ALL”的请求。在这种情况下,它将等待所有服务
有什么想法吗?我希望当您使用CQL时,您会收到一个一致性级别为“ALL”的请求。在这种情况下,它将等待所有服务器(承载该节点副本的服务器)的回复,然后返回。当一个节点关闭时,它会失败,因为它无法联系关闭的节点
当您通过Cassandra cli执行此操作时,我希望一致性级别默认为“QUORUM”或“ONE”或“ANY”,因此即使有一个副本关闭,也会很高兴地返回您的数据。cqlsh和cli都默认为CL.ONE。我怀疑差异实际上是cqlsh查询显示“选择所有用户”,而cli中的“get”是“选择一个用户”。您的键空间放置策略是什么? 如果您使用NetworkTopologyStrategy,可以尝试以下操作:
CREATE KEYSPACE gxsim with placement_strategy = 'org.apache.cassandra.locator.NetworkTopologyStrategy' and strategy_options = {'DC1' : 1 , DC2' : 1} AND durable_writes = true;
如果您的cassandra集群位于aws中,则需要更改“cassandra.yaml”中的配置,只需将endpoint_snitch更改为Ec2Snitch。再次,culd可能的一件事是,您的数据中心实际上是ec2实例的“区域”,它应该类似于“us-east”,“us-west”。在您的情况下,它应该仅是“eu-west” 根据datastax的说法,EC2Snitch 使用EC2Snitch在Amazon EC2上进行简单的群集部署,其中群集中的所有节点都位于单个区域内。该区域被视为数据中心,可用性区域被视为数据中心内的机架。例如,如果节点位于us-east-1a,则us-east是数据中心名称,1a是机架位置。因为如果使用rivate IP,此告密器无法跨多个区域工作 定义密钥空间策略选项时,请使用EC2区域名称(例如,us east)作为数据中心名称 链接-
我现在要做更多的挖掘工作,如果发现任何有用的东西,我会更新。您使用的一致性是什么?可能是一个问题,因为在检索数据时使用的一致性不同。要了解有关超时和数据不可用异常的更多信息,感谢您的评论。但CQL和cli中的一致性级别为1,而wr对CQL和cli都可以读取数据。读取不适用于CQL,但在cli中可以。感谢您的回答,就是这样。顺便说一下,一个节点已死亡,但在我的群集中还有两个节点处于“启动”状态,为什么选择CQL不工作?如果复制系数为1,则数据可能存储在该停机节点上。在这种情况下,您将无法从中进行选择。