【问题标题】:DSE Cassandra 4.8.4 not a valid port numberDSE Cassandra 4.8.4 不是有效的端口号
【发布时间】:2017-02-14 09:05:08
【问题描述】:

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

Cassandra 版本:DSE Cassandra 4.8.4

我用来登录 cqlsh 的语法是:

cqlsh -u cassandra -pw cassandra 10.30.30.243 9160

我收到的输出如下:

用法:cqlsh [选项] [主机[端口]]

cqlsh: 错误:'10.30.30.243' 不是有效的端口号。

【问题讨论】:

  • 您有问题吗?
  • 我对 cqlsh 一无所知,但在类似情况下,我的下一个尝试是在 -u-pw 之后留下空格。
  • 让我提出这个问题。为什么 OP 提供的正确语法会产生错误消息,而不是按需要启动 CQLSH?

标签: linux cassandra cqlsh


【解决方案1】:

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

试试

cqlsh -u cassandra -p cassandra 10.30.30.243

你不应该需要这个端口,因为那是默认端口。

【讨论】:

  • 我试过了, -pw 是必需的语法。如果不包含端口号,则会产生相同的错误消息,与 OP 语句中描述的方式完全相同。
【解决方案2】:

我想我花了很多时间来反汇编目标代码。拥有源代码真的是一种享受。这是我在 bin/cqlsh.py 中所做的,在我添加的第 2350 行附近:

import pdb; pdb.set_trace()

就在行之前:

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

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

使用命令 'p hostname' 和 'p port' 进行调试,使用 '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'

可以看到“port”已经变成了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 [Bad credentials] 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']

然而,参数和计数看起来仍然完美,实际上正如我们之前看到的那样返回。从这里往前走显示这部分被驱动了 3 次,每次都产生错误。

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 的调用对之前存储好的用户或密码字段产生了不良影响。我希望可以追查到问题,但我没有时间进行这项工作,所以我将把它留给专业人士。

现在我已经回到了

身份验证器:cassandra.yaml 中的 AllowAllAuthenticator

bin/cqlsh 192.168.1.3 9042

让我直接进入 CQLSH。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 2021-08-24
    • 2015-04-25
    • 2020-05-08
    • 1970-01-01
    • 2016-04-27
    • 2016-06-20
    • 1970-01-01
    相关资源
    最近更新 更多