有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

网络设置网络。使用Elasticsearch JAVA API将主机发布到客户端节点

我正在虚拟机上运行Elasticsearch节点。我在主机上编写了一个模拟器,试图连接到我的VM ES节点

客户端代码连接如下:

    Node node = nodeBuilder().clusterName("AnalyticsCluster")
                             .client(true).node();
    mClient = node.client();

我确保在VM节点上配置了正确的群集名称。我不想使用另一种使用TransportClient连接到ES节点的方法,因为根据ES文档,这将导致每次搜索通过2个跃点

它失败的原因如下:

org.elasticsearch.discovery.MasterNotDiscoveredException: waited for [1m]
    at org.elasticsearch.action.support.master.TransportMasterNodeOperationAction$3.onTimeout(TransportMasterNodeOperationAction.java:180)
    at org.elasticsearch.cluster.service.InternalClusterService$NotifyTimeout.run(InternalClusterService.java:491)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

我想我理解根本原因(不是100%)是客户端和节点使用不同的网络发布多播。我这样说是基于以下几点:

ES节点控制台

[2014-02-26 18:19:13,725][INFO ][transport                ] [Baron Samedi] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.79.128:9300]}

客户端节点控制台

INFO: [Lacuna] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.1.105:9200]}

换句话说,节点在192.168.79上发布。*网络,即VM网络,客户端在192.168.1上发布。*网络,这是我的wifi网络

似乎我可以通过在客户端设置网络来解决这个问题。发布主机。事情发生在客户身上,我没有弹性搜索。yml。我也没有找到一种方法来设置它的程序

我有两个问题,按优先顺序排列:

  1. 你可以通过网络。发布主机可以编程设置,那么,如何设置呢

  2. 如何设置elasticsearch。在我的客户端,API将用于其设置的yml

提前Thx

注意:虚拟机上的防火墙已停止


共 (1) 个答案

  1. # 1 楼答案

    我通过做两件事解决了这个问题

    A)我添加了一个src/main/resources/elasticsearch。客户端的yml,如下所示:

     network.host: 10.231.150.165
    

    这并没有完全解决问题。客户端在位于VM上的服务器端正确发送了多播。但是VM无法连接回客户端

    B)我将主机和虚拟机之间的网络配置为桥接,而不是像VMWare上默认的NAT。设置如下:

    enter image description here

    这完全解决了问题,因为现在我的主机和虚拟机在同一个局域网上