8

私が実行している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 クライアントを構成する方法は?

4

6 に答える 6

13

この失敗の最も可能性の高い理由は、ポート 54328 でマルチキャスト検出トラフィックをブロックするマシンのファイアウォールです。クライアントとマスターの両方が最初の検出中にこのポートでブロードキャストを行っており、お互いに応答がありません。そのため、node.client=true を指定すると、クライアント ノード (マスターになることはできません) が MasterNotDiscoveredException で失敗し、データのないノード自体がマスターとして選択されます。

于 2011-11-11T03:49:14.313 に答える
9

私は同じ問題に遭遇し、構成ファイルで IP 番号を使用することで解決しました。

/config/elasticsearch.yml で

コメントを外して、network.host 設定を次のように変更します。

network.host: 127.0.0.1

ifconfig でこれをマシンの IP 番号に変更することもできます。

于 2011-12-14T21:22:32.623 に答える
5

同じ問題がありました。最終的に、ファイアウォール (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が機能するアドレスにローカルホストをハードコーディングしました。プロダクションコードにとっては良いことではありません:-)

于 2012-07-23T15:13:03.820 に答える
1

このようなものが動作するはずです:

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

私を悩ませたのは、最初にクライアントを9300ではなく9200に接続しようとしたことです。上記の設定のガイダンスは、http: //www.elasticsearch.org/guide/reference/java-api/client.htmlから見つけることができます

于 2011-11-09T20:27:26.493 に答える