如何使用cqlsh连接到远程Cassandra主机

14

我无法连接到远程主机的cqlsh。

 ./cqlsh xx.xx.x.xxx 9042
   Connection error: ('Unable to connect to any servers', {'10.101.33.163':   
   ConnectionException(u'Did not get expected SupportedMessage response; 
   instead, got: <ErrorMessage code=0000 [Server error]      
   message="io.netty.handler.codec.DecoderException: 
   org.apache.cassandra.transport.ProtocolException: Invalid or unsupported 
   protocol version: 4">',)})

我正在使用 cqlsh 5.0.1 和 Python 2.7.10。

  ./cqlsh --version
     cqlsh 5.0.1
  python -V
    Python 2.7.10

我使用mac电脑,并按照http://www.datastax.com/2012/01/working-with-apache-cassandra-on-mac-os-x的说明下载了cassandra。

我的本地Cassandra版本是2.2.1(从zip文件中了解到),远程主机上的Cassandra似乎不是2.2.1(我猜可能是2.0或2.1)。既然无法确定远程主机上的版本,那么我该如何尝试连接远程主机上的Cassandra呢?


看起来像这样 - https://dev59.com/3Y3da4cB1Zd3GeqPuhCr - LHWizard
3个回答

15

1) 确保服务正在运行:

$ ps aux | grep cassandra

示例: 106 7387 5.1 70.9 2019816 1454636 ? SLl Sep02 16:39 /usr/lib/jvm/java-7-oracle/jre//bin/java -Ddse.system_cpu_cores=2 -Ddse.system_memory_in_mb=2003 -Dcassandra.config.loader=com.datastax.bdp.config.DseConfigurationLoader -Ddse.system_cpu_cores=2 -Ddse.system_memory_in_mb=2003 -Dcassandra.config.loader=com.datastax.bdp.config.DseConfigurationLoader -ea -javaagen...

2) 检查服务器配置确保您正在使用正确的IP地址:

$ ifconfig

示例:

eth1 Link encap:Ethernet HWaddr 08:00:27:a6:4e:46
inet addr:192.168.56.10 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fea6:4e46/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

3) 确保您可以从所在的服务器连接到该IP地址:

$ ssh user@xxx.xxx.xx.xx

4) 检查节点状态并确认它显示相同的IP地址:

$ nodetool status

5) 运行命令以使用IP地址连接(仅在未使用默认端口时指定端口):

$ cqlsh xxx.xxx.xx.xx


你能区分我们可以在哪个服务器上运行哪个命令吗?尝试实现同样的事情。连接到安装有Cassandra单集群的另一个服务器。 - Jinna Balu

3

你可能需要将 Mac 上的 cqlsh 版本更新至 2.1 或 2.0,以与你尝试连接的服务器版本匹配。所以我建议首先尝试这个。


简单明了。对我有效! - Priyank Desai

2
我遇到了相同的错误(在Windows 8.1上运行Cassandra 2.2.0),并找到了Gustav Grusell提供的可行解决方法: https://issues.apache.org/jira/browse/CASSANDRA-9467?focusedCommentId=14693410&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14693410 他所提出的解决方法是修改您的cqlsh.py脚本以接受协议版本。进行这些更改后,您将能够通过向cqlsh传递--protocolversion = 3 来指定协议版本3(例如)。
在Cassandra bin文件夹中找到并在进行这些更改之前备份它。
除其他的parser.add_option语句(大约第175行)之外,添加以下行:
parser.add_option("--protocolversion", default=DEFAULT_PROTOCOL_VERSION, help='Specify protocol version (default: %default).')

请将以下内容添加到def read_options(cmdlineargs, environment):(约2520行)下面的其他optvalues旁边:
optvalues.protocolversion =  option_with_default(configs.get, 'cql', 'protocolversion', DEFAULT_PROTOCOL_VERSION)

def read_options(cmdlineargs, environment):中的return语句之前添加以下内容(大约在2574行左右)。
if options.protocolversion:
    try:
        options.protocolversion = int(optvalues.protocolversion)
    except ValueError:
        options.protocolversion=DEFAULT_PROTOCOL_VERSION

def main(options, hostname, port):中修改Shell命令,以包含协议版本(~第2657行):

                  connect_timeout=options.connect_timeout,
                  protocol_version=options.protocolversion)

这是我的cqlsh.py文件的最新版本:http://pastebin.com/f9D2zEE4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接