Java 卡桑德拉·赫克托负载平衡

Java 卡桑德拉·赫克托负载平衡,java,cassandra,hector,Java,Cassandra,Hector,我最近设置了一个带有两个节点的Cassandra集群。复制因子设置为2,如果两个节点都打开,它们似乎都工作正常。 现在,我如何才能以这种方式使用hector,使它在至少一个节点处于运行状态时保持工作状态?到目前为止,我有以下几点 CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator( "localhost:9160,xx.xx.13.22:9160"); cassand

我最近设置了一个带有两个节点的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}];
我确信我错过了一些非常琐碎的事情,任何帮助都将不胜感激。
谢谢

插入时使用的一致性级别是什么?如果在仲裁或所有情况下进行写入,则需要两个节点都能以2的复制因子进行写入(2个节点的仲裁为2,这就是典型cassandra群集使用奇数作为复制因子的原因)

默认情况下,Hector使用仲裁的一致性级别,因此如果其中一个节点低于此级别,则无法满足要求。
当RF=2 quorum时,意味着您需要对两个节点进行读写操作,因此如果其中一个节点发生故障,则无法执行。
这是一个很好的在线工具,它演示了NRW(N=复制因子,R=读取一致性,W=写入一致性)

要在写入/读取时更改一致性级别,请使用,例如
HFactory.createKeyspace(String,Cluster,consistentylevelpolicy)

我对此非常陌生,请告诉我如何设置它,以及两个集群的理想数字是多少…这里有一些注释。什么样的一致性级别取决于您的用例,但一个好的起点是3个集群,复制因子为3,在仲裁时读写,这使您能够在单节点故障下生存。