2016-07-05 100 views
0

我有一个3 ES节点集群。所有这些都是数据和主节点。在我的api(JAVA)中,我使用传输通信。我使用xxx.yy.zz.aaa IP地址来访问/查询ES索引。但我只是想知道,如果那个xxx.yy.zz.aaa机器关闭,那么我必须重新配置API以指向集群中可用的任何一台机器。但有没有办法来没有负载均衡器的ES集群节点

  1. 如何自动检测节点故障和点查询到其他节点?
  2. 如何避免这种单点故障。

回答

0

您应该将所有3个IP地址添加到您的客户端,以便在发生一个节点故障时连接到其他节点。您的连接器可能如下所示:

Settings.Builder settings = Settings.settingsBuilder(); 
     settings.put("cluster.name", "elasticsearchcluster"); 
     List<String> hosts = new LinkedList<String>(); 
     ArrayList<ElasticSearchHost> esHosts = elasticSearchConfig.esHostsConfig.esHosts; 
     for (ElasticSearchHost host : esHosts) { 
      hosts.add(host.host + ":" + host.port); 
     } 
     settings.put("discovery.zen.ping.multicast.enabled", "false"); 
     settings.put("discovery.zen.ping.unicast.hosts", StringUtils.join(hosts, ",")); 
     //settings.put("discovery.zen.ping.unicast.hosts","xxx.yy.zz.aaa:9300, xxx.yy.zz.bbb:9300, xxx.yy.zz.ccc:9300"); 
     client = TransportClient.builder().settings(settings).build(); 
     for (ElasticSearchHost host : esHosts) { 
      ((TransportClient) client).addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(host.host, host.port))); 

     } 
     ClusterHealthResponse clusterHealth = client.admin().cluster().health(clusterHealthRequest().waitForGreenStatus()).actionGet();