【问题标题】:Cassandra light weight transactions are failing for a single node cluster单节点集群的 Cassandra 轻量级事务失败
【发布时间】:2017-06-13 16:21:26
【问题描述】:

我有一个用于简单开发活动的单节点 Cassandra 集群。 所有用法都可以正常工作,但是如果我尝试执行LWT,则查询将失败,并显示一条消息,表明没有足够的主机可用。

如果配置了更多主机,这是有道理的,但是如果所有主机都可用,即 1,那么它应该会成功。

CQLSH 中的错误是 NoHostAvailable。 使用C# driver from Datastax不管一致性级别都出现了,我试了几次,错误是:

Not enough replicas available for query at consistency Quorum (2 required but only 1 alive)

有趣的是,如果我简单地从 CQL 中删除“IF NOT EXISTS”,那么查询就会成功。

如果集群中只有一个节点,是否应该使用 Paxos?

Cassandra 版本:

 [cqlsh 5.0.1 | Cassandra 3.0.11.1485 | CQL spec 3.4.0 | Native protocol v4]

键空间:

CREATE KEYSPACE "XYZ" WITH replication = {'class': 'NetworkTopologyStrategy', 'Cassandra': '1', 'Solr': '1'}  AND durable_writes = true;

节点工具环:

    administrator@cassandra-dev01:~$ nodetool ring

Datacenter: Cassandra
==========
Address       Rack        Status State   Load            Owns                Token

10.10.98.200  rack1       Up     Normal  106.92 GB       ?                   -8300708032273586829

Datacenter: SearchGraphAnalytics
==========
Address       Rack        Status State   Load            Owns                Token

10.10.98.201  rack1       Up     Normal  13.79 MB        ?                   4478178638510484591

【问题讨论】:

  • nodetool ring 显示什么?
  • 我添加了信息。我不确定搜索节点是否算作 cassandra 节点,因为它有不同的用途。

标签: cassandra transactions cql


【解决方案1】:

看起来数据中心 Solr 中的节点已关闭或无法访问。当您只说 Quorum 而不是本地 quorum 时,它实际上会转到根据您描述的另一个节点。

【讨论】:

  • Datastax 有一个节点,然后是一个搜索节点。
  • 看起来数据没有复制到第二个节点/数据中心(一侧为 192 GB,另一侧为低 MB),您可以运行 nodetool rebuild --SearchGraphAnalytics 还您指定的数据中心因为您的密钥空间的复制因子 (RF) 必须在您的 cassandra-rackdc.properties 或 cassandra-topology.properties 文件中预定义(取决于您配置的 Snitch)。加上名称似乎不匹配(创建语句中的 Solr 和 ring 命令中的 SearchGraphAnalytics)
  • 无论如何...在您的密钥空间定义中,您有一个 Solr 数据中心,当协调器收到法定人数时,它将尝试联系它。如果您不使用 Solr 数据中心,请使用 ALTER KEYSPACE "XYZ" WITH replication = {'class': 'NetworkTopologyStrategy', 'Cassandra': '1', 'Solr': '0', 'SearchGraphAnalytics': ' 0'}
  • 这似乎是我对数据如何从 Cassandra 流向 Datastax 搜索节点的误解。我认为有一个单节点集群,搜索是不同的。我发现情况并非如此。