Cassandra Clustering失败处理

时间:2013-07-12 09:53:02

标签: cassandra

当联系节点死亡时,Cassandra的行为如何?我的意思是说,Cassandra具有“n”个节点的环形结构,如果客户端要访问第一个节点但它已经死了。第一个节点在java客户端中指定。 我无法理解故障处理。有谁可以帮助我?

2 个答案:

答案 0 :(得分:2)

如果您只有一个节点,或者只指定一个节点,并且该节点已关闭,那么客户端将无法连接(显然);但通常客户端库(如Hector)将允许您指定一组节点并维护一个连接池,连接到哪个节点可用。

Hector documentation更详细一些,但指定多个节点的最简单方法是在创建集群时在CassandraHostConfigurator中传递以逗号分隔的主机列表:

String hosts = "node1.example.com:9160, node2.example.com:9160, node3.example.com:9160";
Cluster cluster = HFactory.getOrCreateCluster(CLUSTER_NAME, new CassandraHostConfigurator(hosts));

答案 1 :(得分:1)

这取决于客户端,不同的客户端做不同的事情来处理这个问题,但是对于大多数驱动程序,您可以提供多个联系点。

Astyanax 使用令牌发现来跟踪群集中的各种节点。 Full docs here

  

主机供应商将连接池与动态主机注册表相关联。连接池将经常轮询此供应商以获取当前主机列表,并更新其内部主机连接池以考虑新主机或已删除主机。

这是在您设置上下文时配置的:

AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder()
    ...
    .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()      
        .setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE)
        .setConnectionPoolType(ConnectionPoolType.TOKEN_AWARE)
    )
...
context.start();

只要您提供了多个联系点,DataStax java驱动程序就可以很好地处理故障。如果3个节点的SimpleStrategy用于复制,复制因子为3(所有3个节点上都存在所有数据),只要3个节点中有一个存活,就可以查询。

Cluster cluster = Cluster.builder()
                         .addContactPoint("127.0.0.1")
                         .addContactPoint("127.0.0.2")
                         .addContactPoint("127.0.0.3")
                         .build();
Session session = cluster.connect();