2011-08-02 122 views
2

我最近设置了一个Cassandra集群和两个节点。复制因子设置为2,并且如果两个节点都打开,它们似乎都工作正常。 现在我怎样才能以这样的方式使用hector,使它至少能够在至少一个节点上运行?截至目前,我有如下的东西。Cassandra 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}]; 

我相信我失去了一些东西很琐碎,任何帮助将不胜感激。 谢谢

回答

4

默认情况下,Hector使用Quorum的一致性级别,因此如果您的某个节点关闭,则无法满足此级别。
当RF = 2 quorum意味着您需要读取和写入两个节点,因此如果其中一个节点已关闭,则无法执行。
这里是一个不错的在线工具,演示NRW(N =复制因子,R =读一致性和W =写一致性)http://www.ecyrd.com/cassandracalculator/
要更改的一致性水平,同时写入/读取使用,例如AllOneConsistencyLevelPolicyHFactory.createKeyspace(String, Cluster, ConsistencyLevelPolicy)

+0

链接真的很有帮助 – Sap

1

插入时使用的是什么一致性级别?如果您正在QUORUM或ALL中编写代码,则需要两个节点以复制因子2进行写入(2个节点的法定数为2,这就是为什么典型的cassandra集群使用奇数复制因子)

+0

我很新的,请告诉我如何设置它,什么是两个群集的理想数字... – Sap

+0

这里有一些注意事项,http://www.datastax.com/docs/0.8/一致性/指标。什么样的一致性级别取决于您的用例,但一个好的起点是一个3的群集,复制因子为3,并且在QUORUM中读写,这可以让您在单个节点故障中幸存下来。 – sbridges