我有一个3节点的Cassandra集群,其密钥空间的复制因子为3:
CREATE KEYSPACE demo
WITH REPLICATION = {
'class':'SimpleStrategy',
'replication_factor':3
};
(仅部署在一个数据中心)
当进行失败测试时,即关闭一个节点,我在尝试查询我的键空间时得到这些异常:
Caused by: org.apache.cassandra.exceptions.UnavailableException: Cannot achieve consistency level LOCAL_ONE
at org.apache.cassandra.db.ConsistencyLevel.assureSufficientLiveNodes(ConsistencyLevel.java:296) ~[apache-cassandra-3.10.jar:3.10]
at org.apache.cassandra.service.AbstractReadExecutor.getReadExecutor(AbstractReadExecutor.java:162) ~[apache-cassandra-3.10.jar:3.10]
at org.apache.cassandra.service.StorageProxy$SinglePartitionReadLifecycle.<init>(StorageProxy.java:1774) ~[apache-cassandra-3.10.jar:3.10]
at org.apache.cassandra.service.StorageProxy.fetchRows(StorageProxy.java:1736) ~[apache-cassandra-3.10.jar:3.10]
at org.apache.cassandra.service.StorageProxy.readRegular(StorageProxy.java:1682) ~[apache-cassandra-3.10.jar:3.10]
at org.apache.cassandra.service.StorageProxy.read(StorageProxy.java:1597) ~[apache-cassandra-3.10.jar:3.10]
at org.apache.cassandra.db.SinglePartitionReadCommand$Group.execute(SinglePartitionReadCommand.java:997) ~[apache-cassandra-3.10.jar:3.10]
at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:277) ~[apache-cassandra-3.10.jar:3.10]
at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:247) ~[apache-cassandra-3.10.jar:3.10]
at org.apache.cassandra.auth.CassandraRoleManager.getRoleFromTable(CassandraRoleManager.java:521) ~[apache-cassandra-3.10.jar:3.10]
at org.apache.cassandra.auth.CassandraRoleManager.getRole(CassandraRoleManager.java:503) ~[apache-cassandra-3.10.jar:3.10]
... 47 common frames omitted
我不知道为什么会看到这个错误,因为:
所以我的例子中的问题是system_auth密钥空间,它需要将复制因子增加(增加到2或3)才能高度可用。这是必需的,因为我使用PasswordAuthenticator进行身份验证。
我必须使用以下语句来解决此问题:
ALTER KEYSPACE "system_auth"
WITH REPLICATION = {
'class':'SimpleStrategy',
'replication_factor':3
};
(复制因子的默认值为1)
此处记录了执行此操作的需要:https://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/secureConfigNativeAuth.html
您在日志中看到的一致性级别是 Cassandra 内部用于检索存储在system_auth密钥空间中的身份验证信息的一致性级别。
Cassandra在查询默认Cassandra用户“cassandra”的系统身份验证时使用QUORUM
Cassandra在为其他用户查询system_auth时使用LOCAL_ONE
默认情况下,Cassandra对system_auth密钥空间使用SimpleStrategy(这不太好),复制因子为1(这不好)。强烈建议改为使用NetworkTopologyStrategy,并将每个数据中心的复制因子增加到至少3。这应该可以解决您的问题。
一切都在Apache Cassandra留档中解释:
http://cassandra.apache.org/doc/latest/operating/security.html#authentication
我用的是3 node cassandra 2.1.14,用的是authenticator:password authenticator。 但是当试图以cassandra/cassandra的身份登录来创建用户时。我需要在布景中做些什么吗? 卡珊德拉@cqlsh 服务器错误: message="java.lang.RuntimeException:org.apache.cassandra.excep
有人能帮助我如何通过datastax.cassandraconnector设置一致性吗?
想象一个电子商务应用程序: 假设我有三个并且我的一致性级别(CL)很弱:即 我有一个产品表,例如 这是跨三个节点同步的初始数据 > 现在,客户端A从N1读取信息,客户端B从N2读取信息 客户端1看到1台计算机可用 客户端 2 看到 1 台计算机可用 他们现在都去购买客户A先下订单。所以N1,表格如下所示: 现在客户端 2 下订单,因此在 N2 处,表将如下所示: 但实际上客户2的订单不应该被处理。
我正在努力实现强烈的一致性。让我们调用我的模型PVPPlayer: 模型的每个关键点都是这样创建的: 其中,配置文件是父模型: 我有2个REST api url: 在1)我做: 在2)我做: 我的流程如下所示: 问题: 使用保证了很强的一致性,所以我不明白的是为什么有时由于,我得到了一些陈旧的数据,比如点根本没有更新。 示例:
本文向大家介绍memcache一致性hash的php实现方法,包括了memcache一致性hash的php实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了memcache一致性hash的php实现方法。分享给大家供大家参考。具体如下: 最近在看一些分布式方面的文章,所以就用php实现一致性hash来练练手,以前一般用的是最原始的hash取模做 分布式,当生产过程中添加或删除一台me
主要内容:1 事务隔离级别的实现,2 一致性视图的具体实现,3 可重复读的普通查询原理,4 可重复读的更新原理,5 读已提交的原理,6 总结详细介绍MySQL数据库事务隔离级别的实现原理,以及MVCC一致性视图的概念和实现。 下面我们来看看MySQL事务隔离级别的实现原理,以及经常被提到的MVCC一致性视图到底是什么。 1 事务隔离级别的实现 可重复读和读已提交的事务隔离级别在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。 在“可重复读”隔离级别下,这个视图是在事务启动时创建