Elasticsearchの設定方法について簡単に解説

Elasticsearchの設定方法について簡単に解説

どうもこんにちはkoheiです。

最近は結婚式の準備で忙しくなってきて寝不足気味です。

体調管理気をつけます。

先日に下記のツイートをしました。

 

 

elasticsearch の設定方法って大きく分けて2種類あるんですね。たしかにクラスタ構成を組んでるときは1つのノードでの設定が全ノードに反映されたら便利。不整合もなくなるからよい。

 

上記の通り、Elasticsearchでは多くの設定項目を設定していく必要があります。

今回はElasticsearchの設定方法について、実際の業務で使うまではよくわからなかったので解説したいと思います。

 

犬
Elasticsearchの設定方法は何があるのかわからない。
Elasticsearchの設定方法って1種類しか知らない。
たこ
たこ

そういった人向けです。

設定方法(結論)

結論は大きく分けて2種類の設定方法があります。(以下)

 

  1. 設定ファイルに記載
  2. Rest APIを叩く

 

それぞれの役割について、以下に記載します。

設定ファイル

まず、はじめに設定ファイルについて解説します。

Elasticsearchの設定ファイルは「elasticsearch.yml」ファイルです。

elasticsearch.ymlに書く内容

ノード(1サーバー)固有の設定を記載するのがよいみたいです。

 

ノード固有の設定とは、node.nameやパスなど、またはノードがクラスターに参加するために必要な設定(cluster.nameやnetwork.hostなど)を含める必要があります。

 

詳しくは以下公式ドキュメントを参照してみてください。

 

では、固有の設定以外はどうやって設定するのでしょうか。

以下で解説します。

Rest APIを叩く

ElasticsearchではCluster update settings APIというものが存在します。

設定用のRest API(以下では設定APIで表現します)が用意されてるということです。

 

 

設定APIでは2種類の設定項目が存在します。

  1. persistent:永続的な設定。
  2. transient:一時的な設定。

 

設定値取得

設定値取得のRest APIは以下になります。

 

curl -XGET http://localhost:9200/_cluster/settings
{
  "persistent" : { },
  "transient" : { }
}

※何も設定されていない状態です。

設定値登録

設定値登録のRest APIは以下になります。

 

curl -XPUT http://localhost:9200/_cluster/settings
{
  "persistent" : { },
  "transient" : { "indices.recovery.max_bytes_per_sec" : "50mb"}
}

リセットするときはNULLを指定する

設定値をリセットする場合はNULL値を指定します。(以下)

 

curl -XPUT http://localhost:9200/_cluster/settings
{
  "persistent" : { },
  "transient" : { "indices.recovery.max_bytes_per_sec" : null}
}

Persistentとtransientの違い

上記で説明したように、設定APIでは一時的なpersistentと永続的なtransientが存在しますが、何がちがうのでしょうか?

自分が知る限りだと、elasticsearchにはバックアップ機能が存在しますが、バックアップ時には一時的なpersistentは保存されず、永続的なtransientは保存されます

よって、バックアップしたスナップショットをリストアする場合には永続的なtransientの設定のみが生きてきます。

設定の優先順位

以上、設定方法には大きく分けて2つ存在し、設定APIに関しても2つ存在することがわかりました。

では、この設定の優先順位はどうなっているのでしょうか?

 

優先順位は以下になります。

  1. 設定API(transient)
  2. 設定API(persistent)
  3. 設定ファイル(yml)
  4. デフォルト値

 

留意点

上記でも説明しましたが、ノード特有の設定に関してのみelasticsearch.ymlファイルで設定し、

それ以外は設定APIを使用してすべてのクラスター全体の設定をするのが推奨されてます。

 

理由は設定APIで設定した値はクラスタ構成内のどれか1つのノードに対して反映すれば、

クラスタ内のすべてのノードに自動的に反映されるからです。

 

このことにより、クラスタ内の設定値の不整合を防ぐことができます。

以上のことに気をつけてクラスタ構成の設定をするようにしましょう。

疑問点

設定API(transient)は一時的設定ではあるが、再起動時に設定値は消えるか?

関連記事

以下の記事ではElasticsearchについてのまとめを記載してます。

全体像を掴みたい方は以下の記事も読んでみると理解度が深まるかと思います。

ぜひ読んでみてください。

 

全文検索エンジンElasticsearchについてまとめてみました

 

人気記事:【最新】Elastic Stack学習におすすめの本5選