首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无负载均衡器的ES集群节点

无负载均衡器的ES集群节点
EN

Stack Overflow用户
提问于 2016-07-05 15:21:46
回答 1查看 55关注 0票数 0

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

  1. 如何自动检测节点故障并将查询指向其他节点?
  2. 如何避免这一单一的失败点。
EN

回答 1

Stack Overflow用户

发布于 2016-07-05 18:34:00

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

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38207185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档