我在 ec2 盒子上设置了两个节点 cassandra,我的 system_auth 键空间为
> CREATE KEYSPACE system_auth WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': '2'} AND durable_writes = true;
我已使用端点_snitch 在种子中添加了两个节点:SimpleSnitch
使用nodetool进行了相同的测试
nodetool -h ::FFFF:127.0.0.1 status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
**-- Address Load Tokens Owns (effective) Host ID Rack**
UN 10.%.%.% 532.7 KiB 16 54.1% 4dd0ab16-f60602 rack1
UN 10.%.%.% 416.37 KiB 16 45.9% d1395269-0270e3 rack1
还使用默认凭据登录进行了测试 cqlsh -u cassandra -p cassandra
cqlsh -u cassandra -p cassandra
Connected to Test Cluster at 127.0.0.1:9042
[cqlsh 6.0.0 | Cassandra 4.0.2 | CQL spec 3.4.5 | Native protocol v5]
Use HELP for help.
cassandra@cqlsh>
一切正常,直到我们测试节点,一旦我们在一个节点上停止服务,我们就可以使用创建的辅助用户登录,但无法使用默认凭据登录cqlsh -u cassandra -p cassandra
Tt 抛出错误
Error from server: code=0100 [Bad credentials] message="Unable to perform authentication: Cannot achieve consistency level QUORUM"')})
我无法理解如何修复它当前的一致性是一个
`cassandra@cqlsh> consistency
Current consistency level is ONE.`
在调试问题时,它围绕一致性级别尝试将 system_auth 类从简单更改为网络拓扑,但没有帮助
您收到身份验证错误,因为 Cassandra 对默认“cassandra”超级用户的 system_auth 表的查询方式不同。
准确来说认证的一致性是:
您无法在 CQL 中调整身份验证一致性。
由于复制因子为 2 的 QUORUM 要求两个副本都可用,因此每当其中一个副本关闭时,您不应该能够以“cassandra”身份进行身份验证,而如果一个副本启动,您可以向任何其他用户进行身份验证。
更多信息参见官方文档:
在登录期间,将读取默认超级用户的凭据 QUORUM 的一致性级别,而所有其他用户的一致性级别 (包括超级用户)在 LOCAL_ONE 处读取。为了 性能和可用性以及安全性,运营商应该 创建另一个超级用户并禁用默认超级用户。这一步是 可选,但强烈推荐。默认登录时 超级用户,创建另一个超级用户角色,可用于 引导进一步配置。
我赞同官方建议创建新的超级用户来代替“cassandra”。