Looking for elasticsearch Answers? Try Ask4KnowledgeBase
Looking for elasticsearch Keywords? Try Ask4Keywords

Elasticsearch弾性検索構成


備考

Elasticsearchには、開発のための優れたエクスペリエンスを提供するデフォルトのセットが付属しています。暗黙のステートメントは、それが必ずしも自分のニーズに合わせて作られなければならず、したがって予測することができない、生産にとって必ずしも素晴らしいものではないということです。

既定の設定では 、構成を変更することなく同じマシン上で複数のノード簡単にダウンロードして実行できます。

設定はどこですか?

Elasticsearchの各インストールの中にはconfig/elasticsearch.ymlます。そこには以下の設定があります

  • cluster.name
    • ノードが結合しているクラスターの名前。同じクラスタ内のすべてのノードは、同じ名前を共有する必要があります。
    • 現在、デフォルトはelasticsearchです。
  • node.*
    • node.name
      • 指定しない場合は、ノードが起動するたびにランダムな名前が生成されます 。これは楽しいかもしれませんが、実稼働環境には適していません。
      • 名前は一意である必要ありませが、一意である必要があります。
    • node.master
      • ブール値の設定。 true場合、ノードは適格なマスターノードであり選択されたマスターノードである可能性があります。
      • デフォルトはtrueです。これは、すべてのノードが適格なマスターノードであることを意味します。
    • node.data
      • ブール値の設定。 true場合、ノードがデータを格納し、検索アクティビティを処理することを意味します。
      • デフォルトはtrueです。
  • path.*
    • path.data
      • ノードのファイルが書き込まれる場所。 すべてのノードはこのディレクトリ使用してメタデータを格納しますが、データノードはこれを使用してドキュメントを格納/索引付けします。
      • デフォルトは./dataです。
        • つまり、Elasticsearchディレクトリの内部configするピアディレクトリとしてdataが作成されます。
    • path.logs
      • ログファイルが書き込まれる場所。
      • デフォルトは./logsです。
  • network.*
    • network.host

      • デフォルトは_local_に設定されてい_local_ 、実質的にlocalhostです。
        • つまり、デフォルトでは、現在のマシンの外部からノードを通信することはできません。
    • network.bind_host

      • 潜在的に配列です。これはElasticsearchにソケットをバインドする現在のマシンのアドレスを通知します。
        • このリストは、マシンの外部のマシン(たとえば、クラスタ内の他のノード)がこのノードと通信できるようにします。
      • デフォルトはnetwork.hostです。
    • network.publish_host

      • このノードとの最適な通信方法を他のノードに通知するために使用される単一のホスト。
        • network.bind_hostに配列を提供する場合、これはノード間通信に使用される1つのホストでなければなりません。
      • デフォルトはnetwork.host`です。
  • discovery.zen.*
    • discovery.zen.minimum_master_nodes
      • マスター選挙の定足数を定義します。これ 、次の式を使用して設定する必要あります。 (M / 2) + 1ここで、 M適格なマスターノードの数です( node.master: trueを使用するノードnode.master: true暗黙的または明示的にnode.master: true )。
      • デフォルトは1で、単一のノードクラスタに対してのみ有効です。
    • discovery.zen.ping.unicast.hosts
      • このノードをクラスタの残りの部分に結合するためのメカニズム。
      • これにより、ノードがクラスタの残りの部分を見つけることができるように適格なマスターノードリストされます。
      • ここで使用する必要がある値は、他のノードのnetwork.publish_hostです。
      • デフォルトはlocalhostになります。つまり、ローカルマシン上でクラスタを結合することのみを調べます。

どのような設定がありますか?

Elasticsearchは3つの異なるタイプの設定を提供します:

  • クラスタ全体の設定
    • これらは、すべてのノードやすべてのインデックスなど、クラスタ内のすべてに適用される設定です。
  • ノード設定
    • これらは、現在のノードだけに適用される設定です。
  • インデックスの設定
    • これらは、インデックスだけに適用される設定です。

設定に応じて、次のように設定できます。

  • 実行時に動的に変更されました
  • インデックスの再起動(クローズ/オープン)後に変更されました
    • インデックスレベルの設定によっては、インデックスを閉じて再オープンする必要はありませんが、インデックスを強制的に再マージして適用する必要があります。
      • 索引の圧縮レベルは、このタイプの設定の例です。それは動的に変更することができますが、新しいセグメントのみが変更を利用します。したがって、インデックスが変更されない場合、インデックスを強制的にセグメントを再作成しない限り、変更を利用することはありません。
  • ノードの再起動後に変更された
  • クラスタの再起動後に変更された
  • 変更されていない

設定で何ができるかできないかについては、常にElasticsearchのバージョンのドキュメントをチェックしてください。

どのように設定を適用できますか?

設定にはいくつかの方法がありますが、そのうちのいくつかは示唆されていません。

  • コマンドライン引数

Elasticsearch 1.xおよび2.xでは、ほとんどの設定をJavaシステムプロパティとしてプレフィックスとしてes.

$ bin/elasticsearch -Des.cluster.name=my_cluster -Des.node.name=`hostname`

Elasticsearch 5.xでは、 -Des.の代わりに-Eカスタム引数型を使用する代わりに、Java System Propertiesを使用しないように変更されています-Des.

$ bin/elasticsearch -Ecluster.name=my_cluster -Enode.name=`hostname`

Puppet、Chef、またはAnabilitiesなどのツールを使用してクラスタを起動および停止する場合、この設定を適用するこのアプローチは効果的です。しかし、手動で行うと非常にうまく動作しません。

  • YAMLの設定
    • 例に示す
  • 動的設定
    • 例に示す

設定が適用される順序は、最も動的な順序です:

  1. 一時的な設定
  2. 永続的な設定
  3. コマンドラインの設定
  4. YAML(静的)設定

設定が2回、いずれかのレベルで1回設定されている場合、最高レベルが有効になります。

弾性検索構成 関連する例