【问题标题】:How to connect my Java based Cassandra client to a Cassandra cluster, rather than a specific node?如何将我的基于 Java 的 Cassandra 客户端连接到 Cassandra 集群,而不是特定节点?
【发布时间】:2015-10-12 04:08:50
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java cassandra


    【解决方案1】:

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

      public CassandraHostConfigurator(String hosts) {
        this.hosts = hosts;
      }
    
      ...
    
      String[] hostVals = hosts.split(",");
    
      CassandraHost[] cassandraHosts = new CassandraHost[hostVals.length];
      ...
    

    【讨论】:

      【解决方案2】:

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

      保持启用自动发现(默认情况下处于关闭状态)可以更轻松地进行横向扩展,因为新节点会在发现时添加。添加节点的功能也可以通过 JMX 获得,因此可以随时手动添加节点,尽管您必须为每个 Hector 实例执行一次。

      【讨论】:

      • «您只需要引用一个主机»—我认为这是主要问题之一。如果在您尝试连接到集群时该主机已关闭,那么您根本无法连接。
      猜你喜欢
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2014-11-15
      • 1970-01-01
      相关资源
      最近更新 更多