DSE Cassandra 4.8.4不是有效的端口号

时间:2016-10-05 19:24:01

标签: linux cassandra cqlsh

我有一个四节点集群,我正在尝试启动并运行节点1。

Cassandra版本:DSE Cassandra 4.8.4

我用来登录cqlsh的语法是:

cqlsh -u cassandra -pw cassandra 10.30.30.243 9160

我收到的输出如下:

  

用法:cqlsh [options] [host [port]]

     

cqlsh:错误:'10 .30.30.243'不是有效的端口号。

2 个答案:

答案 0 :(得分:0)

您只需要-p密码就可以将cassandra作为主机,然后使用主机作为端口。

尝试

cqlsh -u cassandra -p cassandra 10.30.30.243

您不应该使用该端口,因为这是默认端口。

答案 1 :(得分:0)

我认为我花了很多时间来分解目标代码。拥有源代码确实是一种享受。这是我在bin / cqlsh.py中在我添加的2350行附近所做的事情:

import pdb; pdb.set_trace()

就在行前:

hostname = environment.get('CQLSH_HOST', hostname)
port = environment.get('CQLSH_PORT', port)

记住,缩进对于Python很重要,如果您遇到错误的话。

使用命令“ p主机名”和“ p端口”进行调试,使用“ n”前进。

您可以阅读代码,这里只有几行:

    (Pdb) n
> /usr/local/c4/cassandra/bin/cqlsh.py(2368)read_options()
-> if optvalues.color in (True, False):
(Pdb) p port
'192.168.1.3:9042'

您可以看到“端口”已成为IP地址和端口,踩下尝试一下 并逐步执行:

    -> try: (Pdb) n
> /usr/local/c4/cassandra/bin/cqlsh.py(2383)read_options()
-> port = int(port) (Pdb) p port '192.168.1.3:9042' (Pdb) n ValueError: "invalid literal for int() with base 10: '192.168.1.3:9042'"
> /usr/local/c4/cassandra/bin/cqlsh.py(2383)read_options()
-> port = int(port)

所以您拥有它:

    > /usr/local/c4/cassandra/bin/cqlsh.py(2384)read_options()
-> except ValueError:
(Pdb) n
> /usr/local/c4/cassandra/bin/cqlsh.py(2385)read_options()
-> parser.error('%r is not a valid port number.' % port)
(Pdb) n
Usage: cqlsh.py [options] [host [port]]

cqlsh.py: error: '192.168.1.3:9042' is not a valid port number.
SystemExit: 2
> /usr/local/c4/cassandra/bin/cqlsh.py(2385)read_options()
-> parser.error('%r is not a valid port number.' % port)

我用

运行
bin/cqlsh -u cassandra -pw cassandra 192.168.1.3 9042

p len(arguments) 3 
p arguments[0] 'cassandra' 
p arguments[1]  '192.168.1.3' 
p arguments[2] '9042'

> /usr/local/c4/cassandra/bin/cqlsh.py(2386)read_options()
-> parser.error('%r is not a valid port number.' % port)
(Pdb) p port
'192.168.1.3

我看了一下Python中解析的工作方式,cqlsh.py解析例程期望:

parser.add_option("-p", "--password", help="Authenticate using password.")

bin / cqlsh -u cassandra -p cassandra 192.168.1.3 9042

现在解析器很高兴

--Return--
> /usr/local/c4/cassandra/bin/cqlsh.py(2386)read_options()->(<Values at 0x...owser': None}>, '192.168.1.3', 9042)
-> return options, hostname, port

现在要弄清楚凭据发生了什么;请记住,我没有更改Python,而只是提供了各种输入。

  

AuthenticationFailed(... e = 0100 [错误的凭据] message =“提供   用户名cassandra和/或密码不正确

逐步完成

  

https://github.com/python/cpython/blob/master/Lib/optparse.py

使用-p可以正确解析密码,并将其存储在“密码”中。 IP地址和端口都很好

/usr/lib/python2.7/optparse.py(1405)parse_args()->(<Values at 0x...owser': None}>, ['192.168.1.3', '9042'])

这使我们自然返回到我们离开cqlsh.py的地方

/usr/local/c4/cassandra/bin/cqlsh.py(2339)read_options()
-> hostname = option_with_default(configs.get, 'connection', 'hostname', DEFAULT_HOST)

一切看起来都很不错,然后我们遇到了一些以前未见的错误

(Pdb) p len(arguments)
2
(Pdb) p arguments
['192.168.1.3', '9042']
(Pdb) n
NoSectionError: No secti...nnection'
> /usr/local/c4/cassandra/bin/cqlsh.py(2258)option_with_default()
-> return cparser_getter(section, option)
(Pdb) n
> /usr/local/c4/cassandra/bin/cqlsh.py(2259)option_with_default()
-> except ConfigParser.Error:
(Pdb) n
> /usr/local/c4/cassandra/bin/cqlsh.py(2260)option_with_default()
-> return default
(Pdb) p len(arguments)
2
(Pdb) p arguments
['192.168.1.3', '9042']

然而,参数和计数看起来仍然很完美,实际上如我们前面所见返回了。从这里开始逐步显示此部分被驱动了三次,每次都会产生错误。

NoSectionError: No secti...nnection'
    > /usr/local/c4/cassandra/bin/cqlsh.py(2258)option_with_default()
    -> return cparser_getter(section, option)
    (Pdb) n
    > /usr/local/c4/cassandra/bin/cqlsh.py(2259)option_with_default()
    -> except ConfigParser.Error:

我现在的猜测;调用ConfigParser会对用户或密码字段产生不良影响,这些字段或早已被很好地存储了下来。我希望可以找到问题所在,但我没有时间为此付出努力,所以我将把问题留给专业人员解决。

现在我回到

  

authenticator:cassandra.yaml中的AllowAllAuthenticator,其中

     
    

bin / cqlsh 192.168.1.3 9042

  

让我直接进入CQLSH。