我正在尝试学习Cassandra并设置了一个4节点的Cassandra集群。我使用Hector编写了一个Java客户端,它目前连接到集群中的硬编码单个节点。理想情况下,我希望我的客户端连接到“集群”而不是特定节点....所以如果4个节点中的任何一个节点关闭,客户端仍将连接到某个东西。从客户端应用程序的角度来看,这是如何工作的?我似乎无法找到一个好的解释。
我的Hector连接字符串当前,我需要在这里指定一个特定的节点:
Cluster c = getOrCreateCluster("Test Cluster", cassandraNode1:9160);
我的Cassandra节点都配置了我的rpc_address:0.0.0.0
答案 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实例必须执行一次。