java – Cassandra复制因子大于节点数
作者:互联网
我正在为Apache Cassandra使用datastax java驱动程序(v.2.1.9),我想知道当我将replication_factor设置为大于节点数时会发生什么.我已经读过Cassandra允许这个操作的地方,但是当我尝试保存一些数据时应该会失败(当然这取决于写入一致性级别,但我的意思是ALL的情况).
问题是一切正常,即使我尝试保存数据,也不会抛出任何异常.为什么?
对于较旧版本的Cassandra,也许我读过的那些信息都很旧了?
还有一个问题,是否真的,而不是在我向集群添加另一个节点时会发生什么?
解决方法:
Cassandra具有“可调一致性”的概念,这部分意味着您可以控制读/写操作的一致性级别设置.
您可以在解释consistency levels的文档中阅读更多内容以及如何在cqlsh shell中设置它们.
要了解更多信息,我建议在Cassandra的单节点上尝试使用cqlsh.例如,我们可以创建复制因子为2的密钥空间并将一些数据加载到其中:
cqlsh> create keyspace test with replication = {'class': 'SimpleStrategy', 'replication_factor':2};
cqlsh> create table test.keys (key int primary key, val int);
cqlsh> insert into test.keys (key, val) values (1, 1);
cqlsh> select * from test.keys;
key | val
-----+-----
1 | 1
一切正常,因为默认一致性级别为1,因此只有1个节点必须在线.现在尝试相同但将其设置为ALL:
cqlsh> CONSISTENCY ALL;
Consistency level set to ALL.
cqlsh> insert into test.keys (key, val) values (2, 2);
Traceback (most recent call last):
File "resources/cassandra/bin/cqlsh.py", line 1324, in perform_simple_statement
result = future.result()
File "resources/cassandra/bin/../lib/cassandra-driver.zip/cassandra-driver/cassandra/cluster.py", line 3133, in result
raise self._final_exception
Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level ALL" info={'required_replicas': 2, 'alive_replicas': 1, 'consistency': 'ALL'}
cqlsh> select * from test.keys;
Traceback (most recent call last):
File "resources/cassandra/bin/cqlsh.py", line 1324, in perform_simple_statement
result = future.result()
File "resources/cassandra/bin/../lib/cassandra-driver.zip/cassandra-driver/cassandra/cluster.py", line 3133, in result
raise self._final_exception
Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level ALL" info={'required_replicas': 2, 'alive_replicas': 1, 'consistency': 'ALL'}
读取和写入都不起作用,因为第二个节点不存在.实际上,错误消息将提供一个有用的线索,即需要两个副本但只有一个可用.
一旦您了解了使用cqlsh,您可以使用Java驱动程序来应用它,具体取决于您的应用程序需要什么.
标签:java,cassandra,datastax-java-driver,cassandra-2-1 来源: https://codeday.me/bug/20190528/1167451.html