見出し画像

AWS Managed「Elasticsearch Service」を利用して、特定データノードにシャードが偏って利用不可になった

※ 技術ブログからのお引っ越しです
※ 2020-1-29に記載した記事です

こんにちは!空の田仲です。
弊社で、ホテルの競合料金を出力するために、検索エンジンとして、ElasticSearchを利用しています。
その障害の一つとして、紹介していきます。

画像1

一つのIndexへの保存量が多く、一つのシャードのサイズが大きい場合、シャードが偏って、特定のデータノードがディスクフルを招き、クラスタへの書き込みができなくなるケースがあります。
シャードのRelocationは常時行われているので、滅多に起こらないかもしれません。
このケースに空きストレージ容量あり、
最小空きストレージ容量なしのステータスが
読み取れた時になります。

$ curl -XGET localhost/_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent

対象インスタンスの容量を確認し、インスタンスの特定

対象インスタンスが空き容量がないのか確認をしていってください。
インスタンスIDを特定してください。

画像2

対象Indexとシャードの確認

対象のインスタンスIDが特定できたら、対象Indexとシャードを特定してください。一列目にIndex、二列目にシャードを確認できます。

$ curl -XGET localhost_cat/shards | grep [インスタンスID]

シャードの再配置を行い、対象の書き込みステータスを正常稼働に

コマンドで、再配置を行ってください。
再配置を適切に行いたい場合は、"from_node"、 "to_node"を指定してください。

$ curl -XPOST localhost/_cluster/reroute -d '{
    "commands": [{
        "allocate": {
            "index": "Index名",
            "shard": シャードのナンバー,
            "node": "node名",
            "allow_primary": true
        }
    }]
}'

私の場合は、データが消えても良い状態にしていたことと、データが古かったので、Indexごと削除しました。

$ curl -XDELETE localhost/[Index名]

簡易的ではありますが、この流れで解消できます。
少しでもご参考になればと思っています。

以上になります。
また、ElasticSearch関連で情報出せそうであれば、続編も出していきます。

ニュースレターに登録しませんか?

プライシング市場/ダイナミックエコノミー関連ニュースや空からのお知らせをまとめてお届けするニュースレターを配信しています。こちらからご登録ください。


この記事が気に入ったらサポートをしてみませんか?