2013-07-01 90 views
4

我有一个4节点Cassandra集群。单个节点充当Astyanax连接池的种子节点,在构建AstyanaxContext时通过setSeeds(...)方法提供。我也插入了我自己的连接池监视实现。这显示我添加了一个主机(种子节点),但它没有向我显示其他三个节点。当取下Astyanax的种子节点时,例如通过为这个特定节点通过nodetool禁用节俭,任何对Cassandra的Astyanax请求都会失败。我认为连接池通过种子节点学习了集群是怎样的,并且不需要种子节点一直运行?单节点节点关闭时,Astyanax请求在4节点集群中失败

我使用RING_DESCRIBE作为NodeDiscoveryType和TOKEN_AWARE作为ConnectionPoolType。

+0

任何人都知道为什么每个Astyanax请求在单个种子节点发生故障后失败了吗?我认为Astyanax内部学习了群集/环状的外观,然后执行到其他节点的故障转移,即使没有种子节点可用。 – tsteinmaurer

+0

您是否找到了解决方案? – Adrian

回答

1

当您向Astyanax发出查询时,始终需要运行联系点。在以后的学习踢当你开始写入多个副本和驱动程序需要锻炼何处发送额外的复制数据(因为你知道,如果你有超过1个节点,数据被写入到多个分区)

什么我的意思是?

127.0.0.1 <--- seed 
127.0.0.2 
127.0.0.3 
127.0.0.4 

// code where you initialize Astyanax 
... 
.setSeeds("127.0.0.1") // this node always has to be available 
...