Cassandra - 在 CQLSH 中发出的每个命令都会引发错误

Posted

技术标签:

【中文标题】Cassandra - 在 CQLSH 中发出的每个命令都会引发错误【英文标题】:Cassandra - Every command issued in CQLSH throws errors 【发布时间】:2016-12-17 21:49:39 【问题描述】:

Cassandra 让我非常头疼。昨天,一切都运行良好,然后我删除了一个表,运行了一个 CQLSSTableWriter,它以某种方式抛出了关于我的 Lucene index 的错误(因为不在类路径等上),现在,我在 cqlsh 中发出的每个命令都抛出了错误.

CREATE KEYSPACE IF NOT EXISTS mydata WITH replication = 'class': 'SimpleStrategy', 'replication_factor': '1';

需要一段时间然后抛出:

Warning: schema version mismatch detected, which might be caused by DOWN nodes; 
if this is not the case, check the schema versions of your nodes in system.local and system.peers. 
OperationTimedOut: errors=, last_host=XXX.XXX.XXX.20

之后我将创建一个新表,它也会抛出同样的错误。

cqlsh:mydata> create table test (id text PRIMARY KEY, id2 text);
Warning: schema version mismatch detected, which might be caused by DOWN nodes; if this is not the case, check the schema versions of your nodes in system.local and system.peers.
OperationTimedOut: errors=, last_host=XXX.XXX.XXX.20

last_host 总是显示我运行 cqlsh 的主机的 ip。我也尝试过使用不同节点的相同命令。

键空间和表仍在创建中!该错误说明了架构版本不匹配,所以我确定并运行:

nodetool describecluster

它的输出显示我所有的节点都在同一个模式上。没有架构不匹配。我之前也发出过nodetool resetlocalschema,但没有任何运气。

当我继续往新创建的表中插入一些数据时,会出现以下错误。请注意,插入语句不会返回错误。

cqlsh:mydata> insert into test(id, id2) values('test1', 'test2');
cqlsh:mydata> select * from mydata.test ;
Traceback (most recent call last):
  File "/usr/bin/cqlsh.py", line 1314, in perform_simple_statement
    result = future.result()
  File "/usr/share/cassandra/lib/cassandra-driver-internal-only-3.0.0-6af642d.zip/cassandra-driver-3.0.0-6af642d/cassandra/cluster.py", line 3122, in result
    raise self._final_exception
Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level ONE" info='required_replicas': 1, 'alive_replicas': 0, 'consistency': 'ONE'

请注意,我有一个数据中心和五个节点。我不打算在未来使用多个数据中心。 [cqlsh 5.0.1 |卡桑德拉 3.0.8 | CQL 规范 3.4.0 |原生协议 v4]

我也多次重启 Cassandra。 nodetool status 显示所有节点都已启动并正在运行。有没有人知道发生了什么?

【问题讨论】:

【参考方案1】:

我通过...修复了这个问题

    删除键空间中的所有表

    运行 alter keyspace mydata WITH replication = 'class': 'NetworkTopologyStrategy', 'dc1': '1'; 而不是 SimpleStrategy

    在所有节点上重新启动 cassandra 服务

    重新创建所有表

    运行nodetool repair

现在我可以再次插入数据和查询数据了。老实说,仍然不太确定这一切的原因是什么。

【讨论】:

通常情况下,架构分歧可以通过重新启动受影响的节点来修复(您可以通过运行 nodetool describecluster 来查看。不过很高兴您已修复它。 @Aaron 这正是让我头疼的部分。 nodetool describecluster 的输出一直是这样的:9ae01f7c-c138-31ee-a9d1-d11527c2471b: [xxx.xxx.xxx.24, xxx.xxx.xxx.28, xxx.xxx.xxx.30, xxx.xxx.xxx.32, xxx.xxx.xxx.20] UNREACHABLE: [127.0.0.1]。如上述问题所述,我希望这意味着没有架构分歧。 UNREACHABLE: [127.0.0.1] 关心我。如果这不是您集群中的有效节点,我会在其上执行nodetool removenode...然后将其从所有其他节点上的 system.peers 中删除。否则 127.0.0.1 会卡在旧架构上,并不断报告分歧。 @Aaron 我现在已经成功删除了节点127.0.0.1nodetool describecluster 现在显示有效输出,不包括 127.0.0.1 节点。感谢您的帮助。

以上是关于Cassandra - 在 CQLSH 中发出的每个命令都会引发错误的主要内容,如果未能解决你的问题,请参考以下文章

无法登录到Google云平台中托管的3个节点的Cassandra集群中的cqlsh

Cassandra - 无法通过cqlsh连接

Cassandra cqlsh shell 上的协调器节点超时

Cassandra 数据库, python cqlsh命令

COPY FROM CSV 上的 Cassandra CQLSH TEXT 字段限制(字段大于字段限制 (131072))

Cassandra Q&A