语境:
我们有一个 Cassandra 集群,其中 3 个节点部署为 Openshift 中的有状态集。这三个节点配置在同一个数据中心、同一个机架中。
我还编写了一个脚本来测试 Cassandra 一致性级别错误。它在 Openshift 中作为 pod 运行,连接到集群并在循环中运行选择查询。它知道所有 Cassandra 节点的 IP 地址。
问题:
如果我将有状态集(也在该节点上运行)中的副本数从 3 减少到 2 nodetool drain
,则脚本无法再连接到集群。我收到以下错误:
cassandra.cluster.NoHostAvailable: ('无法连接到任何服务器', {'172.17.0.10': OSError(None, "尝试连接到 [('172.17.0.10', 9042)]。最后一个错误:超时") , '172.17.0.9': AuthenticationFailed('无法对 172.17.0.9 进行身份验证:错误或来自服务器:code=0100 [Bad credentials] message="用户管理员身份验证期间出错:org.apache.cassandra.exceptions.UnavailableException : 无法达到一致性级别 LOCAL_ONE"',), '172.17.0.8': ConnectionRefusedError(111, "尝试连接到 [('172.17.0.8', 9042)]。最后一个错误: 连接被拒绝"), '172.17.0.11 ': AuthenticationFailed('无法向 172.17.0.11 进行身份验证:来自服务器的错误:code=0100 [Bad credentials] message="用户管理员身份验证期间出错:org.apache.cassandra.exceptions.UnavailableException: 无法达到一致性级别 LOCAL_ONE"',)})
问题:
由于两个节点仍然可用,为什么认证无法获得 LOCAL_ONE 一致性级别,我该如何解决我的问题?
创建集群时 - 您是否更改了键空间的复制因子
system_auth
?如果没有,那么您需要恢复该节点,并将其复制因子更改为 3。请参阅此处的详细说明。