【问题标题】:Elasticsearch client does not fetch result when a single client node goes down当单个客户端节点出现故障时,Elasticsearch 客户端不会获取结果
【发布时间】:2017-02-13 21:34:35
【问题描述】:

我们有一个非常标准的弹性搜索设置,有 3 个主节点、6 个数据节点和 3 个客户端节点。这是我们从 Java 应用程序连接到 Elasticsearch 客户端的连接代码。

    Settings settings = Settings.settingsBuilder()
            .put("cluster.name", configuration.getString("clusterName"))
            .put("client.transport.sniff", false)
            .put("client.transport.ping_timeout", "5s")
            .build();

    TransportClient client = TransportClient.builder().settings(settings).build();

    for (String hostname : (Collection<String>)configuration.get("hostnames")){
        try {
            client = client.addTransportAddresses(
                    new InetSocketTransportAddress(InetAddress.getByName(hostname), 9300)
            );
            break;
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

我们目前在主机名列表中有三个不同的主机。但是,只要此主机名列表中的单个客户端出现故障,此 Elasticsearch 传输客户端就会停止响应。我已经浏览了 Elasticsearch 站点上的传输客户端文档,并且还尝试查看他们的 Github 问题,据此,每当一个节点出现故障时,只有 elasticsearch 应该将其从节点列表中删除并继续与其他节点合作,但在我们的情况下,事情只是分解。任何人都知道可能是什么问题? 我们现在使用的是 elasticsearch 2.4.3。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    在添加单个节点后,您似乎正在中断循环。尝试删除 break 语句:

    for (String hostname : (Collection<String>)configuration.get("hostnames")){
            try {
                client = client.addTransportAddresses(
                        new InetSocketTransportAddress(InetAddress.getByName(hostname), 9300)
                );
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
        }
    

    【讨论】:

    • 天哪!!!就这么简单。可能我只是被困在一个我不会错的盒子里。
    • @Hardik127 发生在我们最好的人身上!有时我们会错过最愚蠢的事情。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2013-03-31
    • 2018-04-27
    • 2017-02-12
    相关资源
    最近更新 更多