我最近设置了具有两个节点的Cassandra集群。复制因子设置为2,并且如果两个节点都打开,它们似乎都工作良好。
现在,我该如何使用hector使其保持工作状态,直到至少一个节点启动?截至目前,我有类似以下内容。
CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator(
"localhost:9160,xx.xx.13.22:9160");
cassandraHostConfigurator.setMaxActive(20);
cassandraHostConfigurator.setMaxIdle(5);
cassandraHostConfigurator.setCassandraThriftSocketTimeout(3000);
cassandraHostConfigurator.setMaxWaitTimeWhenExhausted(4000);
Cluster cluster = HFactory.getOrCreateCluster("structspeech",
cassandraHostConfigurator);
Keyspace keyspace = HFactory.createKeyspace("structspeech", cluster);
....
假设主机xx.xx.13.22发生故障,那么我在控制台中收到以下消息,并且所有插入均失败,直到该节点出现为止。
Downed xx.xx.13.22(xx.xx.13.22):9160 host still appears to be down: Unable to open transport to xx.xx.13.22(xx.xx.13.22):9160 , java.net.ConnectException: Connection refused: connect
这就是我的键空间的定义方式
update keyspace structspeech with placement_strategy =
'org.apache.cassandra.locator.SimpleStrategy'
and strategy_options =[{replication_factor:2}];
我确信我缺少一些琐碎的东西,任何帮助将不胜感激。
谢谢
最佳答案
默认情况下,Hector使用Quorum的一致性级别,因此如果您的某个节点发生故障,则无法满足该级别。
当RF = 2仲裁时,意味着您需要读写两个节点,因此,如果其中一个发生故障,您将无法执行。
这是一个不错的在线工具,可以演示NRW(N =复制因子,R =读取一致性,W =写入一致性)http://www.ecyrd.com/cassandracalculator/
在写/读使用时更改一致性级别,例如AllOneConsistencyLevelPolicy HFactory.createKeyspace(String, Cluster, ConsistencyLevelPolicy)