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が作成されます。
- つまり、Elasticsearchディレクトリの内部に
-
path.logs- ログファイルが書き込まれる場所。
- デフォルトは
./logsです。
-
-
network.*network.host- デフォルトは
_local_に設定されてい_local_、実質的にlocalhostです。- つまり、デフォルトでは、現在のマシンの外部からノードを通信することはできません。
- デフォルトは
network.bind_host- 潜在的に配列です。これはElasticsearchにソケットをバインドする現在のマシンのアドレスを通知します。
- このリストは、マシンの外部のマシン(たとえば、クラスタ内の他のノード)がこのノードと通信できるようにします。
- デフォルトは
network.hostです。
- 潜在的に配列です。これはElasticsearchにソケットをバインドする現在のマシンのアドレスを通知します。
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の設定
- 例に示す
- 動的設定
- 例に示す
設定が適用される順序は、最も動的な順序です:
- 一時的な設定
- 永続的な設定
- コマンドラインの設定
- YAML(静的)設定
設定が2回、いずれかのレベルで1回設定されている場合、最高レベルが有効になります。
静的な弾性検索設定
ElasticsearchはYAML(Yet Another Markup Language)設定ファイルを使用します。このファイルは、デフォルトのElasticsearchディレクトリ( RPMとDEBインストールではこの場所が変更されます)内にあります。
config/elasticsearch.ymlで基本設定を行うことができます:
# Change the cluster name. All nodes in the same cluster must use the same name!
cluster.name: my_cluster_name
# Set the node's name using the hostname, which is an environment variable!
# This is a convenient way to uniquely set it per machine without having to make
# a unique configuration file per node.
node.name: ${HOSTNAME}
# ALL nodes should set this setting, regardless of node type
path.data: /path/to/store/data
# This is a both a master and data node (defaults)
node.master: true
node.data: true
# This tells Elasticsearch to bind all sockets to only be available
# at localhost (default)
network.host: _local_
永続的な動的クラスタ設定
クラスターがすでに開始した後に動的に設定を適用する必要があり、実際に動的に設定できる場合は、 _cluster/settings APIを使用して_cluster/settingsできます。
永続的な設定は、適用可能な2つのタイプのクラスター全体の設定の1つです。永続的な設定は 、完全なクラスタの再起動後も存続します。
注:すべての設定を動的に適用できるわけではありません。たとえば、クラスターの名前を動的に変更することはできません。ほとんどのノードレベル設定は、個別にターゲティングすることはできないため、動的に設定することもできません。
これは、インデックスレベルの設定に使用するAPIではありません 。設定はインデックスで始まる必要があるため、インデックスレベルの設定であることがわかりindex. 。名前がindices.形式の設定indices.彼らはすべてのインデックスに適用されるため、クラスタ全体の設定です 。
POST /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
警告 :Elasticsearch 1.xおよび2.xでは、永続的な設定を解除できません。
幸運なことに、これはElasticsearch 5.xで改善されました。これで、 null設定することで設定を削除できるようになりました。
POST /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
未設定の設定は、デフォルト値、または優先度の低いレベルで定義された値(コマンドライン設定など)に戻ります。
一時的な動的クラスタ設定
クラスターがすでに開始した後に動的に設定を適用する必要があり、実際に動的に設定できる場合は、 _cluster/settings APIを使用して_cluster/settingsできます。
一時的な設定は、適用可能な2つのタイプのクラスター全体の設定の1つです。一時的な設定は、完全なクラスタ再起動では存続しません 。
注:すべての設定を動的に適用できるわけではありません。たとえば、クラスターの名前を動的に変更することはできません。ほとんどのノードレベル設定は、個別にターゲティングすることはできないため、動的に設定することもできません。
これは、インデックスレベルの設定に使用するAPIではありません 。設定はインデックスで始まる必要があるため、インデックスレベルの設定であることがわかりindex. 。名前がindices.形式の設定indices.彼らはすべてのインデックスに適用されるため、クラスタ全体の設定です 。
POST /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
警告 :Elasticsearch 1.xおよび2.xでは、クラスタを完全に再起動せずに一時的な設定を解除することはできません。
幸運なことに、これはElasticsearch 5.xで改善されました。これで、nullに設定することで設定を削除できるようになりました。
POST /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": null
}
}
設定を解除すると、デフォルト値、またはより低い優先度で定義された値(たとえば、 persistent設定)に戻ります。
インデックスの設定
インデックス設定は、単一のインデックスに適用される設定です。このような設定はindex.始まりindex. 。この規則の例外はnumber_of_shardsとnumber_of_replicasであり、 index.number_of_shardsとindex.number_of_replicas形式でも存在します。
名前が示すように、インデックスレベルの設定は単一のインデックスに適用されます。一部の設定は、インデックスのプライマリ断片の数を制御するindex.number_of_shards設定など、動的に変更できないため、作成時に適用する必要があります。
PUT /my_index
{
"settings": {
"index.number_of_shards": 1,
"index.number_of_replicas": 1
}
}
より簡潔な形式で、キープレフィックスをそれぞれ組み合わせることができます. :
PUT /my_index
{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
}
上記の例では、指定された設定でインデックスが作成されます。 index _settingsエンドポイントを使用して、インデックスごとの設定を動的に変更することができます。例えば、ここでは、動的に変化slowlog設定を 唯一の警告レベルのために:
PUT /my_index/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
警告 :Elasticsearch 1.xおよび2.xでは、インデックスレベルの設定名を厳密に検証していませんでした。タイプミスがあった場合や、単に設定を行った場合は、それを盲目的に受け入れるでしょうが、そうでなければ無視します。 Elasticsearch 5.xは厳密に設定名を検証し、不明な設定(タイプミスまたはプラグインがないため)のインデックス設定を適用しようとする試みを拒否します。両方のステートメントは、動的に変更されるインデックス設定および作成時に適用されます。
複数のインデックスの動的インデックス設定を同時に
「 Index Settings例に示されている同じ変更を、 すべての既存のインデックスに1回のリクエストで適用することも、それらのサブセットを適用することもできます。
PUT /*/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
または
PUT /_all/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
または
PUT /_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
より選択的に選択したい場合は、すべてを使用せずに複数を選択することができます。
PUT /logstash-*,my_other_index,some-other-*/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}