Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡桑德拉报道说:“我的朋友,我的朋友。”;无法完成请求:一个或多个节点不可用;当我使用CQL时:;选择“从用户中选择*”;_Java_Python_Cassandra_Cql - Fatal编程技术网

Java 卡桑德拉报道说:“我的朋友,我的朋友。”;无法完成请求:一个或多个节点不可用;当我使用CQL时:;选择“从用户中选择*”;

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”的请求。在这种情况下,它将等待所有服务

Cassandra在具有3个节点的集群模型中工作。当所有节点都处于“启动”状态时,我在cqlsh中使用cql“select*from User”,Cassandra返回正确的结果。但在节点死后,当我再次使用“select”时,没有结果返回,而是报告:“无法完成请求:一个或多个节点不可用”。 我转而使用cassandra cli命令:“get Users”,它会毫无错误地返回正确的数据。
有什么想法吗?

我希望当您使用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)作为数据中心名称

链接-

  • 您用于密钥空间的复制因子是什么
  • “用户”列族有多少行数据
  • 我发现自己也处于类似的情况(昨天),复制因子设置为1,“users”列族只有一行

    群集信息: AWS上的3个节点 相同的数据中心名称

    键空间名称:rf1 单纯形策略 复制因子1 列族名称:用户 使用cqlsh进行查询,默认一致性

    情景1:

    群集中的一个或两个节点已关闭

    我发现如果3个节点中的任何一个关闭,查询“select*from users”将返回“无法完成请求:一个或多个节点不可用”

    情景2:

    节点1已关闭。 节点2已关闭。 节点3已启动

    查询“select*from users where user_name='abhishek'”将返回该行

    我认为这是因为行似乎位于节点3上

    我对该情景的理解:

    当您进行“从用户选择*查询”时,您要求Cassandra返回列族中的所有行。由于一个或多个节点已关闭,它将无法执行此操作,并且无法提供整个列族,因为节点上可能有一些行已关闭

    但是带有where子句的查询将返回该行,因为它在节点3上可用,而节点3已启动

    这有意义吗

    这种解释的一个缺陷是,我希望Cassandra使用“select*from users”返回集群中可用的所有行


    我现在要做更多的挖掘工作,如果发现任何有用的东西,我会更新。

    您使用的一致性是什么?可能是一个问题,因为在检索数据时使用的一致性不同。要了解有关超时和数据不可用异常的更多信息,感谢您的评论。但CQL和cli中的一致性级别为1,而wr对CQL和cli都可以读取数据。读取不适用于CQL,但在cli中可以。感谢您的回答,就是这样。顺便说一下,一个节点已死亡,但在我的群集中还有两个节点处于“启动”状态,为什么选择CQL不工作?如果复制系数为1,则数据可能存储在该停机节点上。在这种情况下,您将无法从中进行选择。