尝试登录Cassandra控制台(cqlsh),但被拒绝了。

4

我正在为Cassandra设置用户身份验证时,遇到了以下问题。

首先,我更新了cassandra.yaml文件:

authenticator: PasswordAuthenticator

然后创建了system_auth keyspace,复制因子为3,如下:

CREATE KEYSPACE system_auth WITH REPLICATION =  { 'class' : 'SimpleStrategy', 'replication_factor' : 3};

然后使用以下命令重新运行cassandra:

bin/cassandra

然后在完成所有这些步骤之后,我继续修复了我的节点(尽管我不确定为什么这很重要/必要):
nodetool repair

即使我完成了所有这些步骤,Cassandra/Java仍然会报错:
    Traceback (most recent call last):
  File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/cqlsh", line 2044, in <module>
    main(*read_options(sys.argv[1:], os.environ))
  File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/cqlsh", line 2030, in main
    display_float_precision=options.float_precision)
  File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/cqlsh", line 480, in __init__
    cql_version=cqlver, transport=transport)
  File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/../lib/cql-internal-only-1.4.1.zip/cql-1.4.1/cql/connection.py", line 143, in connect
  File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/../lib/cql-internal-only-1.4.1.zip/cql-1.4.1/cql/connection.py", line 59, in __init__
  File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/../lib/cql-internal-only-1.4.1.zip/cql-1.4.1/cql/thrifteries.py", line 157, in establish_connection
  File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/../lib/cql-internal-only-1.4.1.zip/cql-1.4.1/cql/cassandra/Cassandra.py", line 465, in login
  File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/../lib/cql-internal-only-1.4.1.zip/cql-1.4.1/cql/cassandra/Cassandra.py", line 486, in recv_login
cql.cassandra.ttypes.AuthenticationException: AuthenticationException(why='org.apache.cassandra.exceptions.UnavailableException: Cannot achieve consistency level QUORUM')

说实话,目前我不确定该怎么做。如果有任何想法,将不胜感激。

我正在Ubuntu虚拟机上运行cassandra 2.0.5,不确定这是否有所帮助。

当我运行以下命令时:

nodetool status

以下是相关内容:
nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address Load    Tokens  Owns   Host ID                              Rack
UN  127.0.0.1  1.57 MB  256     100.0%  37ae1d4c-0df5-43d2-9593-4603ac68c34a  rack1

1
你的集群中有多少个节点? - Aaron
我该如何找到那个信息? - Charlie Parker
1
请发布 nodetool status 的输出结果。 - Aaron
@BryceAtNetwork23 我已经发布了! :) - Charlie Parker
1个回答

7
'class' : 'SimpleStrategy', 'replication_factor' : 3

由于您的集群中只有一个节点,将副本因子设置为3将成为您的问题。这里有一篇有关Cassandra复制的文章。您应该快速阅读一下。特别适用于此处的是其中的一部分:

当副本因子超过节点数时,写入会被拒绝,但只要满足所需的一致性级别,读取就会被服务。

Cannot achieve consistency level QUORUM

卡桑德拉计算“Quorum”的公式为(复制因子/2)+1。因此,如果您的复制因子为3,则需要运行2个节点以满足一致性级别。
基本上,将您的复制因子设置回1,应该就可以了。

1
我有点困惑,因为无论我在哪里阅读,当更改授权内容时,都需要将我的复制因子设置为大于1,为什么我需要相反的操作呢?我有些困惑。 - Charlie Parker
另外,如果这对您来说非常明显,那么请问如何在cassandra.yaml文件中指定复制因子?我所做的是将验证器还原为AllowAllAuthenticator,然后在cqlsh中更改它...我想从您的建议中得出我的方法有点傻。 - Charlie Parker
1
将复制因子(replication_factor)设置为1以外的值的原因是,如果持有system_auth keyspace的节点崩溃了,您将无法进入其他节点。 - Aaron
1
如果您正在使用DSE-Cassandra,则应在您的.yaml文件中找到“auth_replication_options:”和“replication_factor”的位置。如果没有,则重置您的验证器和授权器将是正确的方法。 - Aaron
Datastax的文档对此有点混淆。他们说不要使用复制因子1,但如果您只计划永远拥有1个节点,则必须使用复制因子1。http://www.datastax.com/documentation/datastax_enterprise/4.5/datastax_enterprise/sec/secConfSysAuthKeyspRepl.html - marathon

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