🐙
Elasticsearchが1ノードでConditionがYellowな時の直し方
環境
- Elasticsearch 6.4 (Basic ライセンス)
- Elasticsearch 7.12 でも確認
状態
とりあえずインストールを行い、ほぼデフォルト値で運用してある程度のインデックスが溜まった状態。
ネタ元は metricbeat や filebeat。Condition Yellow と表示はされるが、問題なく動作している。(ようだ)
ではどうするか
やるべきことは 2 つある。
1: 既存のインデックスのレプリカ数を 0 に変更する。
2: 新しく作られるインデックスのレプリカ数を 0 に設定する。
実行前の注意点
これらの操作を行うと、elasticsearch の負荷が一時的に上がります。
しかも、そのまま Condition が Red になってしまい、しばらく検索クエリを受け付けない状態にすらなりました。
メモリ量がそれなりに必要なようで、ログをみると GC を連発してほぼ、処理が進まない状態になりました。(1.5GB 割り当て)
そのため、メモリ量を増加(2GB)したところ素直に終わりました。インデックス量はおよそ 50GB でした。
大事な環境で実行する際は、テンプレート名を * ではなく、ある程度絞ってテスト実行することをおすすめします。
# 例えば、 metricbeat-*-2018.10.2*
のように
既存のインデックスのレプリカ数を 0 に変更する。
すべてのインデックスのレプリカ数を変更してよいのであれば、以下のコマンドで設定できる。
$ curl -H "Content-Type: application/json" -XPUT localhost:9200/*/_settings -d '{"number_of_replicas":0}'
{"acknowledged":true}
新しく作られるインデックスのレプリカ数を 0 に設定する。
新しく作られるインデックスは、 template_1 というテンプレートから作られるようなのでその設定を変更する。
$ curl -H "Content-Type: application/json" -XPUT localhost:9200/_template/template_1 -d '
{
"template" : "*",
"settings" : {
"number_of_shards" : 1, "number_of_replicas" : 0
}
}'
{"acknowledged":true}
確認(インデックス一覧取得)
curl "http://localhost:9200/_cat/indices?v"
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .geoip_databases F80oZbJcR2KE7BQwlL6XPQ 1 0 45 0 42.5mb 42.5mb
参考にした記事
はじめての Elasticsearch クラスタ
- シャード、レプリカの概念
- 割り当てられていないレプリカ、シャードがあると Condition = Yellow になるということ
- デフォルトのレプリカ数は 1 なので必ず複数ノードにデータがなければならない
- レプリカ数は、インデックスごとに設定される。
[Elasticsearch]Cluster Health の status が yellow となる
-
curl http://localhost:9200/(インデックス名)/_settings?pretty
でインデックスごとの設定が取得できる。
出典失念
- 次のバージョンの Elasticsearch ではレプリカ数のデフォルト値は 0 になる
- elasticsearch をスモールスタートしてはいけないということはないので、ノード 1 台でも OK
Discussion