从明显的版本冲突开始的 CQLSH 协议错误

CQLSH Protocol Error proceeding from apparent version conflicts

我是 运行 Cassandra 3.7,在 Ubuntu 服务器 16.04 LTS 32 位机器上,我正在从存储中重新利用它。我设法正确配置 JVM 以在 32 位环境中运行。 Nodetool 状态工作正常。但是我很难让 CQLSH 工作。我最终遇到以下错误:

('Unable to connect to any servers', {'127.0.0.1': ProtocolError("cql_version '3.4.2' is not supported by remote (w/ native protocol). Supported versions: [u'3.4.0']",)})

显然这里存在一些版本冲突,但我对为什么以及如何解决它感到困惑。我之前安装了 Cassandra 3.0,我配置了 cassanda-env.sh 以正确启动 JVM。当我安装到 3.7 时,我保留了那个 .sh 文件。我用新安装更新了 cassandra.yaml。

所以我的问题是:Cassandra 3.7 是否支持 CQL 3.4.2?如果不是那么为什么它似乎是随附的?如果没有,我需要做什么才能降级到 CQL 3.4.0?如果它确实支持它并且我的配置文件是错误的那么错误是什么以及我该如何修复它?或者,这里是否还有我完全缺少的另一种配置?

这是我当前的配置:

卡桑德拉-env.sh:https://www.dropbox.com/s/dcs99hgry5behqd/cassandra-env.sh?dl=0 cassandra.yaml:https://www.dropbox.com/s/boi8bh7gin0390f/cassandra.yaml?dl=0

非常感谢任何帮助。

编辑:在第一个答案的帮助下,我发现我有一个较旧的服务器实例 运行。我无法从正确的版本开始...所以我从 /etc/init.d 中删除了 cassandra,现在我无法让 debian 包自动注册服务。

EDIT2:从 git repo 下载了 cassandra 脚本,现在 cassandra 将在重启后再次启动。现在 cassandra -v 显示给我:

3.7

我想看到的并解决了我关于版本冲突的问题。但现在不幸的是我看到了一个新错误:

Connection error: ('Unable to connect to any servers', {'127.0.0.1': TypeError('ref() does not take keyword arguments',)})

此问题已解决:

看起来你是 运行 3.7 cqlsh 对较旧的服务器实例。首先,确保您实际上是 运行 Cassandra 3.7(您可以只检查 jar 路径或查看日志)。

如果您想使用广告 cql_version 进行连接,则有一个命令行选项: https://github.com/apache/cassandra/blob/cassandra-3.7/bin/cqlsh.py#L222

select release_version, cql_version from system.local;

(或者只看cqlsh welcome header)看看这些参数是什么。