2

Cassandra工作在3个节点的集群模式下。当所有节点都“UP”时,我在cqlsh中使用cql“select * from User”,Cassandra返回正确的结果。但是在一个节点死了之后,当我再次使用“select”时,没有结果返回但报告:“无法完成请求:一个或多个节点不可用”。我转而使用 cassandra-cli 命令:“get Users”,它返回了正确的数据,没有任何错误。有任何想法吗?

4

5 回答 5

2

我希望当您使用 CQL 时,您会收到一个一致性级别为“ALL”的请求。在这种情况下,它将等待所有服务器(托管该节点的副本)的回复,然后再返回。当一个节点关闭时,它会失败,因为它无法联系到关闭的节点。

当您通过 Cassandra-cli 执行此操作时,我希望一致性级别默认为“QUORUM”或“ONE”或“ANY”,因此即使一个副本已关闭,也会很高兴地返回您的数据。

于 2013-01-10T13:09:21.960 回答
0
  1. 您用于键空间的复制因子是什么?
  2. “用户”列族有多少行数据?

我发现自己处于类似的情况(昨天),复制因子设置为 1,“用户”列族只有一行。

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

键空间名称:rf1 SimpleStrategy Replication factor 1 列族名称:users 使用 cqlsh 查询,默认一致性

场景一:

集群中的一两个节点宕机

我发现如果 3 个节点中的任何一个节点出现故障,查询“从用户中选择 *”将返回“无法完成请求:一个或多个节点不可用”。

场景二:

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

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

我认为是这种情况,因为该行似乎在节点 3 上。

我对场景的理解:

当您进行查询“select * from users”时,您要求 Cassandra 返回列族中的所有行。它无法这样做,因为一个或多个节点已关闭,并且它无法为您提供整个列族,因为节点上可能有一些行已关闭。

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

那有意义吗?

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

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

于 2014-09-16T17:26:35.033 回答
0

如果您的 cassandra 集群在 aws 中,则更改“cassandra.yaml”中的配置只需将 endpoint_snitch 再次更改为 Ec2Snitch 可能的一件事是您的数据中心实际上是 ec2 实例的“区域”,它应该像“ us-east','us-west'。在你的情况下,它应该只是'eu-west'。

根据 datastax 所说,EC2Snitch¶

使用 EC2Snitch 在 Amazon EC2 上进行简单的集群部署,其中集群中的所有节点都在一个区域内。该区域被视为数据中心,可用区被视为数据中心内的机架。例如,如果一个节点在 us-east-1a 中,us-east 是数据中心名称,1a 是机架位置。由于使用了私有 IP,因此此告密者不适用于多个区域。

在定义您的 keyspace strategy_options 时,使用 EC2 区域名称(例如,us-east)作为您的数据中心名称。

链接 - http://www.datastax.com/docs/1.0/cluster_architecture/replication http://www.datastax.com/documentation/cql/3.1/cql/cql_using/update_ks_rf_t.html

于 2014-04-16T08:04:28.660 回答
0

您的键空间放置采用哪种策略?如果你使用 NetworkTopologyStrategy,你可以尝试如下:

 CREATE KEYSPACE gxsim with placement_strategy = 'org.apache.cassandra.locator.NetworkTopologyStrategy' and strategy_options = {'DC1' : 1 , DC2' : 1} AND durable_writes = true;
于 2013-04-18T11:07:19.913 回答
0

cqlsh 和 cli 都默认为 CL.ONE。我怀疑区别实际上是您的 cqlsh 查询说“选择所有用户”,而 cli 中的“获取”是“仅选择一个用户”。

于 2013-01-10T18:34:53.353 回答