网络设置网络。使用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。我也没有找到一种方法来设置它的程序
我有两个问题,按优先顺序排列:
你可以通过网络。发布主机可以编程设置,那么,如何设置呢
如何设置elasticsearch。在我的客户端,API将用于其设置的yml
提前Thx
注意:虚拟机上的防火墙已停止
# 1 楼答案
我通过做两件事解决了这个问题
A)我添加了一个src/main/resources/elasticsearch。客户端的yml,如下所示:
这并没有完全解决问题。客户端在位于VM上的服务器端正确发送了多播。但是VM无法连接回客户端
B)我将主机和虚拟机之间的网络配置为桥接,而不是像VMWare上默认的NAT。设置如下:
这完全解决了问题,因为现在我的主机和虚拟机在同一个局域网上