1. ホーム
  2. elasticsearch

[解決済み] ElasticSearchです。未割り当てのシャード、修正方法は?

2022-04-29 01:47:03

質問

4つのノードを持つESクラスタを持っています。

number_of_replicas: 1
search01 - master: false, data: false
search02 - master: true, data: true
search03 - master: false, data: true
search04 - master: false, data: true

search03を再起動したところ、問題なくクラスタに再加入しましたが、未割り当てのシャードが7つほど残っていました。

{
  "cluster_name" : "tweedle",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 4,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 15,
  "active_shards" : 23,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 7
}

現在、私のクラスタは黄色い状態になっています。 この問題を解決する最良の方法は何でしょうか?

  • シャードを削除(キャンセル)しますか?
  • シャードを別のノードに移動しますか?
  • ノードにシャードを割り当てるか?
  • number_of_replicas' を 2 に更新しますか?
  • 全く別のもの?

興味深いことに、新しいインデックスが追加されると、そのノードはそのインデックスに対して作業を開始し、クラスタの他の部分とうまく連携し、未割り当てのシャードはそのまま放置されました。

続いての質問ですが、そもそもこのようなことが起こるのは、私が何か間違ったことをしているのでしょうか? ノードを再起動したときにこのような挙動をするクラスタにはあまり信頼性がありません。

注意 何らかの理由でシングルノードクラスターを運用している場合、単純に以下のようにする必要があるかもしれません。

curl -XPUT 'localhost:9200/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}'

解決方法は?

OK、ESのサポートに助けてもらって解決しました。 全ノード(または原因と思われるノード)のAPIに対して、以下のコマンドを発行してください。

curl -XPUT 'localhost:9200/<index>/_settings' \
    -d '{"index.routing.allocation.disable_allocation": false}'

ここで <index> は、原因と思われるインデックスです。 心当たりがない場合は、すべてのノードでこれを実行してください。

curl -XPUT 'localhost:9200/_settings' \
    -d '{"index.routing.allocation.disable_allocation": false}'

この行をyaml設定に追加して以来、サーバーやサービスの再起動は問題なく行われています。 シャードはすぐに再割り当てされました。

ただし、マシンの RAM が 60G 未満の場合は、利用可能なメモリの半分に設定します。

参考文献