クイック エンジニアリングブログ

株式会社クイック Web事業企画開発本部のエンジニアリングチームが運営する技術ブログです。

Elasticsearch運用で気をつけていること ~インデックス再構築編~

株式会社クイックでアプリケーションエンジニアをしているhamanokamiです。


弊社ではあるシステムの検索機能でElasticsearchを使用しています。

ただチームメンバ全員がElasticsearchの知識を持っているわけではないため、
Elasticsearchに詳しくなくても、ある程度運用できるように設計を行っています。


その1つとして、無停止でのインデックス再構築フローがあります。

Elasticsearchを運用していると、途中でマッピング構造やフィールド型を変更したいことがあります。

その場合、サービスでは既存マッピングで検索機能を使用しつつ、
裏でインデックスを再構築を行うことで、サービスの質を保ちたいものです。

その方法として一般的なのは、エイリアスを使用した再構築フローだと思います。

(参考)
http://techlife.cookpad.com/entry/2015/09/25/170000
https://www.elastic.co/blog/changing-mapping-with-zero-downtime


ただ前述のとおり、Elasticsearchの知識を持っていないメンバでも運用できるよう、
設定ファイルでインデックス再構築可能なように設計を行いました。


設定内容としては

  • 検索で参照するインデックス
  • 画面で情報更新時に書き込みするインデックス(※複数指定可)
  • ターミナルから情報更新時に書き込みするインデックス

の3つです。

図にするとこのようになります。

f:id:aimstogeek:20150928173502p:plain

※実際には設定ファイルは一つです


インデックス再構築手順

では再構築の手順を説明していきます。

1. 「画面で情報更新時に書き込みするインデックス」と
ターミナルから情報更新時に書き込みするインデックス」に
任意の新しいインデックス名を追加する

2. 設定ファイルを本番環境に反映する

f:id:aimstogeek:20150928173504p:plain


3. ターミナルからインデックス構築バッチを実行する
⇒インデックス作成とデータ挿入

~~3実行完了までおとなしく待ちます~~

4. 「検索で参照するインデックス」に1で指定した新しいインデックス名を追加する

5. 「画面で情報更新時に書き込みするインデックス」から古いインデックス名を除外する

6. 設定ファイルを本番環境に反映する

~~インデックス再構築完了~~


f:id:aimstogeek:20150928173508p:plain

7. 古いインデックスを完全に削除する
⇒Elastic HQなどのモニタリングツール使用


最後に

本当はエイリアスを使用し再構築を行ったほうが、
無駄な手順を踏まずに運用できるのですが、
現状運用知識のあるメンバが少ないなどの場合は、
今回のような運用が適しているのでは思います。

ただ私もElasticsearchの知識のある、
または勉強したいというエンジニア仲間が職場に欲しいので、
もしご興味があれば株式会社クイックにぜひ応募してください。


社内SE(アプリ開発) | 株式会社 クイック | IT/Web業界の求人・採用情報に強い転職サイトGreen(グリーン) | 2014/08/23 15:53:17更新 | id:27758
インフラ系社内SE | 株式会社 クイック | IT/Web業界の求人・採用情報に強い転職サイトGreen(グリーン) | 2014/08/23 15:51:22更新 | id:9390