【问题标题】:Elasticsearch server discovery configurationElasticsearch 服务器发现配置
【发布时间】:2011-12-25 04:50:15
【问题描述】:

我已经安装了 ElasticSearch 服务器,我正在运行它:

$ ./elasticsearch -f
 {0.18.2}[11698]: initializing ...
 loaded [], sites []
 {0.18.2}[11698]: initialized
 {0.18.2}[11698]: starting ...
 bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.1.106:9300]}
 new_master [Stingray][ocw4qPdmSfWuD9pUxHoN1Q][inet[/192.168.1.106:9300]], reason: zen-disco-join (elected_as_master)
 elasticsearch/ocw4qPdmSfWuD9pUxHoN1Q
 recovered [0] indices into cluster_state
 bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.1.106:9200]}
 {0.18.2}[11698]: started

如何配置 Java 客户端以连接到此服务器? 我刚刚:

node.client=true

但是,在尝试连接后,我收到了:

org.elasticsearch.discovery.MasterNotDiscoveredException: 
    at org.elasticsearch.action.support.master.TransportMasterNodeOperationAction$3.onTimeout(TransportMasterNodeOperationAction.java:162)

如果我将 java 客户端配置为:

node.data=false

我收到以下日志:

INFO main node:internalInfo:93 - [Stark, Tony] {0.18.2}[13008]: starting ...
INFO main transport:internalInfo:93 - [Stark, Tony] bound_address {inet[/0:0:0:0:0:0:0:0:9301]}, publish_address {inet[/192.168.1.106:9301]}
INFO elasticsearch[Stark, Tony]clusterService#updateTask-pool-13-thread-1 service:internalInfo:93 - [Stark, Tony] new_master [Stark, Tony][WkNn96hgTkWXRnsR0EOZjA][inet[/192.168.1.106:9301]]{data=false}, reason: zen-disco-join (elected_as_master)

据我了解,这意味着这个新节点(应该是客户端节点)使自己成为一个新的主节点。而且我不会从日志中找到它并连接到任何其他节点。

服务器和客户端都在同一台机器上启动。 192.168.1.106:9200 可以从浏览器访问。

而且我找不到任何关于发现配置的好文档。我可以在哪里阅读有关 ElasticSearch 配置的更多信息?以及如何配置Java客户端?

【问题讨论】:

    标签: java lucene elasticsearch


    【解决方案1】:

    这样的事情应该可以工作:

            Settings s = ImmutableSettings.settingsBuilder()
                    .put(this.settings)
                    .build();
            TransportClient client = new TransportClient(s);
            client.addTransportAddress(new InetSocketTransportAddress(
                    "localhost",
                    9300)
            );
    

    让我感到困惑的是我最初尝试将客户端连接到 9200,而不是 9300。上面的设置指南可以从 http://www.elasticsearch.org/guide/reference/java-api/client.html 找到

    【讨论】:

    • 其实我也开始使用TransportClient,预配置了addr。但我认为 ElasticClient 必须自动发现现有节点。还是我误解了什么?
    • 自动发现通过为每个节点提供相同的集群名称来实现,如下所述:elasticsearch.org/guide/reference/setup/configuration.html
    • 是的,当然,我在两个部分都有相同的集群名称。至少配置它有。
    【解决方案2】:

    此故障最可能的原因是您计算机上的防火墙阻止了端口 54328 上的多播发现流量。客户端和主服务器在初始发现期间都在此端口上进行广播,并且他们没有收到对方的回复。这就是为什么当您指定 node.client=true 时,客户端节点(不能是主节点)失败并出现 MasterNotDiscoveredException 并且没有数据的节点选择自己作为主节点。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,通过使用配置文件中的 IP 号码为我解决了这个问题。

      在 /config/elasticsearch.yml

      取消注释并将 network.host 设置更改为:

      network.host: 127.0.0.1
      

      您也可以在 ifconfig 中将其更改为您的机器 IP 号。

      【讨论】:

      • 这实际上帮助了我解决另一个问题,我对你如此赞成,先生。 :)
      【解决方案4】:

      我有同样的问题。最终,我发现我遇到了防火墙问题,我的防火墙(在 Ubuntu 上)阻止了 ElasticSearch 的端口。我在 Ubuntu 上使用默认防火墙,ufw

      所以,为了打开端口,我在终端上运行了这些命令:

      sudo ufw allow proto tcp to any port 9200:9400
      sudo ufw allow proto tcp to any port 54328
      

      我的集群在 9200 上本地运行,我所有的客户端都在 9300+ 上打开。所以,我只是为他们打开了 9200-9400 的范围。 54328 用于多播广播。

      为了完整起见:我也使用了 TransportClient,它可以工作,但是我将我的本地主机硬编码到了 TransportClient 将处理的地址中。对于生产代码来说不是一件好事:-)

      【讨论】:

      • 组播广播是UDP,不是TCP
      【解决方案5】:

      将网络主机配置为本地主机:

      network.host: 127.0.0.1

      【讨论】:

        【解决方案6】:

        面临相同的问题,即节点无法在节点重新启动时选择主节点。

        问题在于节点之间的通信。

        请确保在您的弹性搜索日志中,节点重启是否显示

          publish_address {127.0.0.1:9200}
          or
          publish_address {0.0.0.1:9200}
        

        这意味着当前节点没有将其 IP 地址发布给其他节点,因此即使节点 IP 可能存在于 discovery.zen.ping.unicast.hosts

        解决方案 在 elasticsearch.yml 中进行以下更改。添加

         network.host: _non_loopback:ipv4_
         and restart the node.
         Ensure that the bound address now shows the <IP address>:<port no> and not the localhost.
        

        这意味着现在您的节点是可发现的。使其在集群中可发现的第二步是将节点的 ip 地址添加到所有 master 节点的单播主机列表中,这样每当我们有一个新的 master 时,该节点就可以被新的 master 发现。

           Add the node IP to the discovery.zen.ping.unicast.hosts 
           list of hosts of all the masters to make it disoverable. A masterpings all the 
           nodes present in the unicast list.
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-21
          • 2017-08-21
          • 2020-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-04
          相关资源
          最近更新 更多