Cassandra-无法达到一致性级别仲裁

Cassandra-无法达到一致性级别仲裁,cassandra,Cassandra,我现在只运行一个节点。我正在尝试为Cassandra启用密码身份验证 我遵循以下指南: 我要注意的是,我没有改变system\u auth的复制,因为它是一个单节点集群 我编辑了cassandra.yaml以使用authenticator:PasswordAuthenticator 然后我重新启动了cassandra,并尝试了命令cqlsh-u cassandra-p cassandra,但这给了我一个错误: Connection error: ('Unable to connect to an

我现在只运行一个节点。我正在尝试为Cassandra启用密码身份验证

我遵循以下指南:

我要注意的是,我没有改变
system\u auth
的复制,因为它是一个单节点集群

我编辑了
cassandra.yaml
以使用
authenticator:PasswordAuthenticator

然后我重新启动了cassandra,并尝试了命令
cqlsh-u cassandra-p cassandra
,但这给了我一个错误:

Connection error: ('Unable to connect to any servers',
{'127.0.0.1': AuthenticationFailed(u'Failed to authenticate to 127.0.0.1: 
code=0100 [Bad credentials] message="org.apache.cassandra.exceptions.
UnavailableException: Cannot achieve consistency level QUORUM"',)})
我试过运行
nodetool repair
,但它说:
复制因子是1。无需修复键空间“system\u auth”

如何解决此问题?

在1节点(或2节点)配置中,仲裁是不可能的,并且不需要修复(因为它用于修复节点之间的数据不一致)

默认情况下,用户“cassandra”始终在system_auth中使用仲裁。尝试创建一个不同的用户(作为超级用户),您的问题就会消失


原因是您不能在单个节点群集上拥有仲裁,请参阅Igors Anwser

我设法解决了这个问题

我必须用replication={'class':'SimpleStrategy','replication\u factor':1}运行
alterkeyspace system\u auth
之前设置为
{'class':'NetworkTopologyStrategy','DC1':'1','DC2':'1'}
,即使它是一个单节点群集


这就是它无法达到法定人数的原因。

Cassandra.yaml
文件中,将身份验证切换回
验证者:AllowAllAuthentication
并确保
授权者:AllowAllAuthorizer

也设定好了。这将允许您再次使用cqlsh。在连接之前,它将不再检查身份验证。进入cqlsh后,按照其他答案将所需复制降低到较低级别。

按照以下步骤操作:

  • 将/etc/cassandra/cassandra.yaml文件中的验证器设置为AllowAllAuthenticator
  • 重新启动卡桑德拉 sudo服务卡桑德拉重启
  • 运行以下命令 cqlsh ALTER KEYSPACE system_auth WITH replication={'class':'SimpleStrategy','replication_factor':1}
  • 现在再次将验证器更改回PasswordAuthenticator
  • 重新启动卡桑德拉 sudo服务卡桑德拉重启
  • 现在您可以使用以下命令登录 cqlsh-u cassandra-p cassandra

  • 问题发生的原因是,以前系统的身份验证设置为{'class':'NetworkTopologyStrategy','DC1':'1','DC2':'1},即使它是一个单节点集群。

    对我来说,修复它的方法是进入cqlsh外壳,使用您遇到问题的密钥空间,然后运行命令
    CONSISTENCY QUORUM

    ,正如Igor所述-您无法在单个节点群集上实现QUORUM。当我尝试创建新用户时,出现错误:
    Unauthorized:code=2100[Unauthorized]message=“只有超级用户才能创建具有超级用户状态的角色”
    。这是否意味着我不能在单个节点群集上使用密码身份验证?我是否最好让它只在本地主机上侦听
    cassandra.yaml
    以保护它?如果集群在您的控制下,您可以在cassandra.yaml中设置AllowAllAuthenticator,并在创建新超级用户时重新启动节点。你的错误是,你试图创建一个超级用户作为一个普通用户。这就是它现在设置的,当我尝试创建一个新的超级用户时,它仍然会给我这个错误。在输入
    cqlsh-u cassandra-p cassandra
    之后,我也使用了该命令。cassandra角色不应该是超级用户吗?用户cassandra是默认的超级用户-这在cassandra中总是作为仲裁进行检查。如果您使用的是AllowAllAuthenticator,您只需省略用户名和密码即可
    cqlsh
    应该单独工作。如果无法连接到cqlsh,如何运行ALTER KEYSPACE?您能帮我吗?只需在cassandra.yaml中更改为
    authenticator:AllowAllAuthenticator
    ,无需凭据即可登录。