概要
elasticsearchを運用していると自分のオペミスなどで、cluster statusがredになることがある。unsignedなインデックスが削除可能であるときは、削除することでclusterのstatusをgreenにすることが出来る。
環境
Elasticsearch version 6.5.1
クラスターの状態を見る
Elasticsearchクラスターの状態は/_cluster/health APIで確認することができます。確認してみると下の例ではstatusがredになっています。
$ curl localhost:9200/_cluster/health?pretty=true
{
"cluster_name" : "prd-hogehoge-cluster",
"status" : "red",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 27,
"active_shards" : 54,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 10,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 84.375
}
kibanaでも確認してみると、状態がredになっています。
/_cluster/health APIをみていると、unassigned_shardsが存在することがわかります。
どのshardがunsignnedなのかを、確認してみましょう。
$ curl -XGET localhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason
.monitoring-es-6-2019.01.03 0 r STARTED
.monitoring-es-6-2019.01.03 0 p STARTED
.monitoring-kibana-6-2019.01.08 0 p STARTED
.monitoring-kibana-6-2019.01.08 0 r STARTED
.monitoring-es-6-2019.01.04 0 r STARTED
.monitoring-es-6-2019.01.04 0 p STARTED
.monitoring-es-6-2019.01.08 0 r STARTED
.monitoring-es-6-2019.01.08 0 p STARTED
.monitoring-kibana-6-2019.01.01 0 p UNASSIGNED CLUSTER_RECOVERED
.monitoring-kibana-6-2019.01.01 0 r UNASSIGNED CLUSTER_RECOVERED
.monitoring-kibana-6-2019.01.06 0 p UNASSIGNED CLUSTER_RECOVERED
.monitoring-kibana-6-2019.01.06 0 r UNASSIGNED CLUSTER_RECOVERED
.monitoring-es-6-2019.01.07 0 p UNASSIGNED CLUSTER_RECOVERED
.monitoring-es-6-2019.01.07 0 r UNASSIGNED CLUSTER_RECOVERED
hogehoge_v1 1 p STARTED
hogehoge_v1 1 r STARTED
hogehoge_v1 2 p STARTED
hogehoge_v1 2 r STARTED
hogehoge_v1 3 r STARTED
hogehoge_v1 3 p STARTED
hogehoge_v1 4 p STARTED
hogehoge_v1 4 r STARTED
hogehoge_v1 0 r STARTED
hogehoge_v1 0 p STARTED
確認してみると、kibanaでグラフ表示に使うデータを保存しているインデックスが、unsignedになっていることがわかりました。
現場によると思いますが、kibanaのモニタリングは自分しか見ていないので、削除して問題ないので削除します。
$ curl -XDELETE localhost:9200/.monitoring-kibana-6-2019.01.01
{"acknowledged":true}
略
結果
無事StatusはGreenになりました。
この方法は消して大丈夫なindexを消したのであって、間違ってもサービスで使っているindexを消すようなことはしないようにしてください。王道の方法はもう1クラスタを作成し、サービスをそちらに向けてから再インデックスをする方法だと思います。
$ curl localhost:9200/_cluster/health?pretty=true
{
"cluster_name" : "prd-hogehoge-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 27,
"active_shards" : 54,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}