我使用cassandra 3.9。
我有两个数据中心。
每个数据中心包含3个节点作为我的数据库服务器。
当我通过执行CREATE USER 'hello' WITH PASSWORD 'world' SUPERUSER
在一个节点中创建一个超级用户时,我收到了以下错误。
NoHostAvailable:
但是,有趣的是,当我执行LIST USERS
时,用户hello
被列为超级用户,我可以使用此用户和密码登录CQLSH。
我可以在同一数据中心的其他两个节点中登录CQLSH,但是我无法在其他数据中心的任何节点中登录CQLSH。这对我来说非常奇怪,因为这两个数据中心都应该传播一切。我想强调的是,每个数据用户输入在这些数据中心中都会传播,没有任何问题。那么,为什么超级用户不传播?
当我尝试在其他数据中心登录CQLSH时,我收到了以下错误。
Connection error: ('Unable to connect to any servers', {'172.51.11.232': AuthenticationFailed('Failed to authenticate to 172.51.11.232: Error from server: code=0100 [Bad credentials] message="org.apache.cassandra.exceptions.UnavailableException: Cannot achieve consistency level LOCAL_ONE"',)})
我没有在这些数据中心之间特别更改任何内容。
我确保将authenticator
设置为PasswordAuthenticator
,将authorizer
设置为每个Cassandra.yaml文件中的CassandraAuthorizer
,并通过这两个数据中心重新启动Cassandra。
我感谢任何建议。
更新:以下是执行DESCRIBE KEYSPACE system_auth
的结果。
CREATE KEYSPACE system_auth WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;
系统键空间的复制策略(保留,除其他方面,用户数据)是错误的:
CREATE KEYSPACE system_auth WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;
应该更改它以匹配您"常规"密钥的复制策略,至少对于数据中心部分,每个数据中心的复制因子可能更高。