我有一个4节点的Cassandra集群。单个节点充当Astyanax连接池的种子节点,在构建AstyanaxContext时通过setSeeds(...)方法提供。我还插入了自己的连接池监控实现。这显示我添加了一个主机(种子节点),但它没有显示其他三个节点。当取下Astyanax的种子节点时,例如,通过nodetool为这个特定节点禁用thrift,任何对Cassandra的Astyanax请求都会失败。我以为连接池通过种子节点学习集群的样子,并且不需要种子节点一直运行?
我使用RING_DESCRIBE作为NodeDiscoveryType,使用TOKEN_AWARE作为ConnectionPoolType。
答案 0 :(得分:1)
使用Astyanax发出查询时,始终需要运行提供的联系点。当您开始编写多个副本并且驱动程序需要在哪里发送额外的复制数据时,学习就开始了(因为如您所知,如果您有多个节点,则数据将被写入多个分区)
我究竟是什么意思?
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
...