如何将基于Java的Cassandra客户端连接到Cassandra集群而不是特定节点?

时间:2011-05-25 20:03:26

标签: java cassandra

我正在尝试学习Cassandra并设置了一个4节点的Cassandra集群。我使用Hector编写了一个Java客户端,它目前连接到集群中的硬编码单个节点。理想情况下,我希望我的客户端连接到“集群”而不是特定节点....所以如果4个节点中的任何一个节点关闭,客户端仍将连接到某个东西。从客户端应用程序的角度来看,这是如何工作的?我似乎无法找到一个好的解释。

我的Hector连接字符串当前,我需要在这里指定一个特定的节点:

Cluster c = getOrCreateCluster("Test Cluster", cassandraNode1:9160);

我的Cassandra节点都配置了我的rpc_address:0.0.0.0

2 个答案:

答案 0 :(得分:5)

如果您将CassandraHostConfigurator传递给getOrCreateCluster(),则可以将多个节点指定为以逗号分隔的字符串:

  public CassandraHostConfigurator(String hosts) {
    this.hosts = hosts;
  }

  ...

  String[] hostVals = hosts.split(",");

  CassandraHost[] cassandraHosts = new CassandraHost[hostVals.length];
  ...

答案 1 :(得分:3)

您还可以切换CassandraHostConfigurator#setAutoDiscoverHosts和#setUseAutoDiscoverAtStartup,以使用您的初始主机通过Thrift API方法describe_keyspaces自动添加找到的所有主机。这使配置更容易,因为您只需要引用单个主机。

保持自动发现功能(默认情况下处于关闭状态)可以更容易扩展,因为新节点将在发现时添加。添加节点的功能也可通过JMX获得,因此可以随时手动添加节点,但每个Hector实例必须执行一次。