Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

はじめてのElasticsearchクラスタ

16,694 views

Published on

The First Elasticsearch Cluster
2018-07-25
JJUG ナイトセミナー「Elasticsearch特集」

Published in: Engineering
  • Be the first to comment

はじめてのElasticsearchクラスタ

  1. 1. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1 JJUG ナイトセミナー「Elasticsearch特集」 はじめてのElasticsearchクラスタ 2018-07-25 Acroquest Technology 束野 仁政(つかの さとゆき)
  2. 2. 自己紹介 • 束野 仁政(つかの さとゆき) • 仕事 1. Elasticsearch関連(コンサル, 設計, 構築, 運用) 800億件、100TBのクラスタ運用経験あり Elastic{ON} 2018 San Franciscoに参加 2. 分散処理・ビッグデータ関連(Hadoop, Spark等) 3. データ分析・機械学習関連 https://qiita.com/snuffkin Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2 http://qiita.com/snuffkin/items/19b33797b8b5f828b1b6 Elasticsearch勉強会の 発表資料まとめ @snuffkin
  3. 3. Acroquest Technology • Elastic社のパートナー http://www.acroquest.co.jp/elastic/ • Elasticテクニカルワークショップ https://info.elastic.co/japan-technical-workshop.html • GPTW「働きがいのある会社」ランキング1位 • Java本格入門 ~モダンスタイルによる基礎から オブジェクト指向・実用ライブラリまで 技術評論社  現場で使える実践的な内容が詰まっています Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3
  4. 4. このセッションの内容 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4 背景 1. Elasticsearchは分散型のデータストアで、 クラスタ化することにより大量のデータを高速に処理できる 2. Elasticsearchはカジュアルに動かせるが、 設計すべきことをやらずに本番運用に入るのはトラブルの元 前半  分散システムの視点から見たElasticsearchクラスタの仕組み 後半  安全なクラスタにするために本番運用前にやっておくべきこと この資料はElasticsearch6.3をベースに作成してます
  5. 5. 目次 前半: Elasticsearchクラスタの仕組み 1. ノードの種類 2. シャードとレプリカ 3. インデクシングの流れ 4. 検索の流れ 5. Data nodeの障害検出 後半: 本番運用前にやっておくべきこと 1. シャード設計 2. レプリカ設計 3. マッピング設計 4. ディスクサイズ設計 5. スプリットブレイン対策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 5
  6. 6. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 6 Elasticsearchクラスタの仕組み
  7. 7. ノードの種類 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 7 Elasticsearchクラスタの仕組み 1. ノードの種類 2. シャードとレプリカ 3. インデクシングの流れ 4. 検索の流れ 5. Data nodeの障害検出
  8. 8. ノードの種類 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 8 1. ノード=Elasticsearchのプロセス 2. その他にも何種類かありますが、今回は説明を省きます Shard 0 Primary Shard 2 Replica Data node 1 Shard 2 Primary Data node 2 Shard 1 Replica Data node 3 Shard 0 Replica Shard 1 Primary Data node 4 Coordinating node Master-eligible node Master
  9. 9. ノードの種類 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 9 No. ノードの種類 役割 1 Master-eligible node クラスタ全体の処理(※)を行うノードをMaster nodeと 呼ぶ。 Master nodeの候補となるノードをMaster-eligible nodeと呼び、この中から1ノードがMaster nodeに選出 される。 ※クラスタの状態管理、シャードの割り当てなど 2 Data node Elasticsearchのデータを保持するノード。データを保持 し、クエリに対応した結果を返す。 3 Coordinating node 検索リクエストやインデクシングリクエストなどを受け 付けるノード。 すべてのノードはCoordinating nodeとしての機能を持 つ。 4 Coordinating only node(Client node) Coordinating nodeの役割のみのノード。 1ノードが複数の種類を兼任できます
  10. 10. シャードとレプリカ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 10 Elasticsearchクラスタの仕組み 1. ノードの種類 2. シャードとレプリカ 3. インデクシングの流れ 4. 検索の流れ 5. Data nodeの障害検出
  11. 11. シャード、レプリカとは? Copyright © Acroquest Technology Co., Ltd. All rights reserved. 11 Elasticsearchのデータ階層  インデックス(RDBのテーブルに近い概念)  シャード(RDBのパーティションに近い概念) 1インデックスを複数シャードで構成することにより、 次の効果がある。 1. 処理のスケール 2. 冗長化による耐障害性の確保
  12. 12. シャード、レプリカとは?~処理のスケール Copyright © Acroquest Technology Co., Ltd. All rights reserved. 12 インデックスのデータをシャードに分散して保持して いるため、並列処理を行うことができる この例では3並列で検索が可能 Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3
  13. 13. シャード、レプリカとは? ~冗長化による耐障害性の確保 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 13 Data Node 3が故障しても、コピーがあるため、 別ノードのシャードを利用して処理を継続 Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3
  14. 14. シャード、レプリカに関連する主な機能 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 14 1. インデックス単位でシャード数、レプリカ数を 設定可能  シャード数はインデックス作成後に変更できない 2. レプリケーショングループ  同じシャード番号同士でレプリケーション 3. シャード単位で処理することの注意点  Aggregation等の処理はシャード単位で実行した結果をマ ージする
  15. 15. インデックス単位でシャード数、レプリカ数を設 定可能 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 15 • シャード数はインデックス作成後に変更できない (再インデックスが必要) • レプリカ数はインデックス作成後でも変更可能 Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 • デフォルトではシャード数=5, レプリカ数=1 • REST APIで変更可能 インデックスA (シャード数=3, レプリカ数=1) Shard 0 Primary Shard 0 Replica Shard 0 Replica インデックスB (シャード数=1, レプリカ数=2)
  16. 16. レプリケーショングループ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 16 Shard 0のレプリケーショングループ (同一シャード番号) Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 • 同一レプリケーショングループのデータは別ノードに配置される • 「レプリカ数 ≧ ノード数」に設定しても、ディスクアクセスを並列化できなければ 性能を向上できない
  17. 17. シャード単位で処理することの注意点 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 17 • Aggregation等は、まずシャード単位で実行し、各シャード の実行結果をマージし、クライアントに返す • そのため、処理によっては正確な結果にならない場合がある Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 各シャードの実行結果をマージ シャード単位の実行結果
  18. 18. インデクシングの流れ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 18 Elasticsearchクラスタの仕組み 1. ノードの種類 2. シャードとレプリカ 3. インデクシングの流れ 4. 検索の流れ 5. Data nodeの障害検出
  19. 19. インデクシングの流れ~概要 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 19 Elasticseachクラスタ内でのインデクシング処理の流れ 1. クライアントからのリクエストを受けたCoordinating nodeはインデクシング先のシャード番号を決める 2. Coordinating nodeはPrimaryシャードにインデクシン グをリクエストする 3. Primaryシャードは、インデクシングを行う 4. Replicaシャードは、並列でインデクシングを行う 5. Replicaシャードは、Primaryシャードにレスポンスを返 す 6. Primaryシャードに全Replicaシャードからレスポンスが 返ってきたら、Coordinating nodeにレスポンスを返す 7. Coordinating nodeはクライアントにレスポンスを返す
  20. 20. インデクシングの流れ(1/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 20 • クライアントからのリクエストを受けたCoordinating nodeはインデクシング先のシャード番号を決める。 • シャード番号 = hash(document_id) % シャード数 この場合はシャード数=3 Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ①シャード番号を決定
  21. 21. インデクシングの流れ(2/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 21 • Coordinating nodeはPrimaryシャードにインデク シングをリクエストする Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ①シャード番号を決定②Primaryシャードにリクエスト
  22. 22. インデクシングの流れ(3/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 22 • Primaryシャードはインデクシングを行う Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ①シャード番号を決定②Primaryシャードにリクエスト ③インデクシング
  23. 23. インデクシングの流れ(4/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 23 • Replicaシャードにインデクシングをリクエストする • 全Replicaシャードに並列でリクエストする (この場合は、Replica数=1なので、1並列) Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ①シャード番号を決定②Primaryシャードにリクエスト ④Replicaシャードにリクエスト ③インデクシング
  24. 24. インデクシングの流れ(5/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 24 • Replicaシャードにインデクシングを行う Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ①シャード番号を決定②Primaryシャードにリクエスト ④Replicaシャードにリクエスト ③インデクシング ⑤インデクシング
  25. 25. インデクシングの流れ(6/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 25 • Primaryシャードにレスポンスを返す Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ①シャード番号を決定②Primaryシャードにリクエスト ④Replicaシャードにリクエスト ⑥レスポンス ③インデクシング ⑤インデクシング
  26. 26. インデクシングの流れ(7/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 26 • 全Replicaシャードからレスポンスが返ってきたら、 Coordinating nodeにレスポンスを返す Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ①シャード番号を決定②Primaryシャードにリクエスト ④Replicaシャードにリクエスト ⑥レスポンス ⑦レスポンス ③インデクシング ⑤インデクシング
  27. 27. インデクシングの流れ(8/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 27 • Coordinating nodeはクライアントにレスポンスを 返す Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ①シャード番号を決定②Primaryシャードにリクエスト ④Replicaシャードにリクエスト ⑥レスポンス ⑦レスポンス ③インデクシング ⑤インデクシング
  28. 28. 検索の流れ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 28 Elasticsearchクラスタの仕組み 1. ノードの種類 2. シャードとレプリカ 3. インデクシングの流れ 4. 検索の流れ 5. Data nodeの障害検出
  29. 29. 検索の流れ~概要 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 29 Elasticseachクラスタ内での検索処理の流れ Query Phase 1. Coordinating nodeは各シャードにリクエスト 2. 各シャード内で検索を行う Fetch Phase 3. 各シャードの検索結果をCoordinating nodeに返す 4. Coordinating nodeが各シャードからの検索結果を マージし、クライアントにレスポンスを返す
  30. 30. 検索の流れ(1/4) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 30 • Coordinating nodeは全レプリケーショングループ から1シャードずつ選び、リクエストする Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ①各シャードにリクエスト ① ① Shard 0の レプリケーショングループ Shard 1の レプリケーショングループ Shard 2の レプリケーショングループ
  31. 31. 検索の流れ(2/4) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 31 • 各シャード内で検索を行う Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ①各シャードにリクエスト ① ① ②シャード内で検索 ②シャード内で検索 ②シャード内で検索
  32. 32. 検索の流れ(3/4) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 32 • 各シャードの検索結果をCoordinating nodeに返す Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ①各シャードにリクエスト ③検索結果 ③ ③① ① ②シャード内で検索 ②シャード内で検索 ②シャード内で検索
  33. 33. 検索の流れ(4/4) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 33 • Coordinating nodeが各シャードからの検索結果を マージし、クライアントにレスポンスを返す Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ④各シャードの検索結果をマージ ①各シャードにリクエスト ②シャード内で検索 ②シャード内で検索 ②シャード内で検索 ③ ③① ① ③検索結果
  34. 34. 検索にかかる時間 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 34 検索にかかる時間 • Query Phaseの時間 + Fetch Phaseの時間 = 検索が一番遅いシャードの処理時間 + マージ時間 Coordinating node Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ④各シャードの検索結果をマージ ①各シャードにリクエスト ②シャード内で検索 ②シャード内で検索 ②シャード内で検索 ③ ③① ① ③検索結果
  35. 35. DATA NODEの障害検出 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 35 Elasticsearchクラスタの仕組み 1. ノードの種類 2. シャードとレプリカ 3. インデクシングの流れ 4. 検索の流れ 5. Data nodeの障害検出
  36. 36. クラスタ状態 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 36 1. インデックス単位の状態には、次の種類がある 2. クラスタ全体の状態は、 インデックス単位の状態の最悪値になる 3. 具体的な状態(status)はREST APIで確認可能 状態 内容 green 正常な状態 yellow 割り当てられていないレプリカシャードあり red 割り当てられていないシャードあり GET _cluster/health/インデックス名 GET _cluster/health インデックス 単位 クラスタ 全体
  37. 37. Data Nodeの障害検出の流れ(1/5) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 37 • Master nodeは各ノードにヘルスチェックを行う • ヘルスチェック間隔は1s Shard 0 Primary Shard 2 Replica Data node 1 Shard 2 Primary Data node 2 Shard 0 Replica Shard 1 Primary Data node 4 Coordinating node Master-eligible node Master Shard 1 Replica Data node 3
  38. 38. Data Nodeの障害検出の流れ(2/5) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 38 • Data nodeに障害が発生する • タイムアウト30s×3回連続でヘルスチェックに失敗すると、 Master nodeは「Data nodeに障害が発生した」と認識する Shard 0 Primary Shard 2 Replica Data node 1 Shard 2 Primary Data node 2 Shard 0 Replica Shard 1 Primary Data node 4 Coordinating node Master-eligible node Master ①障害検知 Shard 1 Replica Data node 3
  39. 39. Data Nodeの障害検出の流れ(3/5) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 39 • 障害検出したノードが保持するデータを復旧させたい • ただ、Data nodeがすぐに復旧するケースに備え、 Master nodeは1分間待機する Shard 0 Primary Shard 2 Replica Data node 1 Shard 2 Primary Data node 2 Shard 0 Replica Shard 1 Primary Data node 4 Coordinating node Master-eligible node Master ①障害検知 ②1分間待機 Shard 1 Replica Data node 3
  40. 40. Shard 1 R→P Data node 3 Data Nodeの障害検出の流れ(4/5) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 40 • 障害により失われたプライマリシャード(ここではShard 1)を復旧させる • レプリカシャードの1つをプライマリシャードに変更する • これは状態更新のみのため、即完了する Shard 0 Primary Shard 2 Replica Data node 1 Shard 2 Primary Data node 2 Shard 0 Replica Shard 1 Primary Data node 4 Coordinating node Master-eligible node Master ①障害検知 ②1分間待機 ③プライマリシャードの復旧
  41. 41. Shard 1 Primary Data node 3 Data Nodeの障害検出の流れ(5/5) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 41 • 障害により失われたレプリカシャード(ここではShard 0, 1)を復旧させる • プライマリシャードを別ノードにコピーし、レプリカシャードとする • コピーに時間がかかる可能性あり Shard 0 Primary Shard 2 Replica Data node 1 Shard 2 Primary Data node 2 Shard 0 Replica Shard 1 Primary Data node 4 Coordinating node Master-eligible node Master ①障害検知 ②1分間待機 Shard 0 Replica ④レプリカシャードの復旧 ③プライマリシャードの復旧Shard 1 Replica
  42. 42. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 42 本番運用前にやっておくべきこと
  43. 43. シャード設計 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 43 本番運用前にやっておくべきこと 1. シャード設計 2. レプリカ設計 3. マッピング設計 4. ディスクサイズ設計 5. スプリットブレイン対策
  44. 44. 問題 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 44 何ヶ月か本番運用していたら、不安定になってきた。 • レスポンスが遅くなることが増えた • FullGCが頻発するようになった • 毎朝9時頃に不安定になる シャード数が多すぎませんか?
  45. 45. よくある原因と解決策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 45 1. Elasticsearchはある程度シャード数に依存してメモリを使用する 2. シャード設計には経験則がある 多すぎる場合はシャード数を減らすこと ヒープサイズが30GBの場合の最大シャード数の目安  1ノードあたりの600-750個 How many shards should I have in my Elasticsearch cluster? https://www.elastic.co/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster 例) シャード数=5、レプリカ数=1で、5種類のインデックスを日毎に分けて 30日間運用した場合  5(シャード数)×2(プライマリとレプリカ)×5(種類)×30(日数)=1500
  46. 46. レプリカ設計 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 46 本番運用前にやっておくべきこと 1. シャード設計 2. レプリカ設計 3. マッピング設計 4. ディスクサイズ設計 5. スプリットブレイン対策
  47. 47. 問題 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 47 1台のサーバで運用しているのですが、 クラスタ状態がいつもyellowになっています レプリカ数がデフォルト設定?
  48. 48. よくある原因と解決策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 48 1. プライマリシャードとレプリカシャードは別ノード に配置される  同一ノードに配置できない 2. Elasticsearchのレプリカ数はデフォルト1  デフォルト設定だと、レプリカを作ろうとする Shard 0 Primary Data node 1 Shard 0 Replica Data node 2 プライマリシャードとレプリカシャードの配置
  49. 49. よくある原因と解決策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 49 2. 1ノードで運用しているとレプリカを作成できない  クラスタ状態がいつもyellowになる 3. 1ノードで運用する場合、レプリカ数=0にする  インデックス毎の設定 index.number_of_replicas Shard 0 Primary Data node 1 Shard 0 Replica プライマリシャードとレプリカシャードの配置 Shard 0 Primary Data node 1
  50. 50. マッピング設計 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 50 本番運用前にやっておくべきこと 1. シャード設計 2. レプリカ設計 3. マッピング設計 4. ディスクサイズ設計 5. スプリットブレイン対策
  51. 51. 問題 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 51 インデクシング時にパースエラーとなる • 文字列型のはずのフィールドでパースエラー マッピング定義していない?
  52. 52. よくある原因と解決策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 52 1. マッピング定義(RDBのスキーマ定義)を行わない場合、 最初にインデクシングするデータから、型を自動判定する (インデックス毎に行われる) 例) マッピング定義がないフィールドに「1230」というデータを インデクシングする  数値型と判定される その後、「123a」というデータ(16進数表記の文字列)をイ ンデクシングしようとしてパースエラーが発生 2. このような事故を防ぐには、 マッピング定義をしておいた方が良い
  53. 53. ディスクサイズ設計 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 53 本番運用前にやっておくべきこと 1. シャード設計 2. レプリカ設計 3. マッピング設計 4. ディスクサイズ設計 5. スプリットブレイン対策
  54. 54. 問題 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 54 ディスクは余っているが、 Elasticsearchに書き込みできなくなった ディスクのサイジングは大丈夫?
  55. 55. よくある原因と解決策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 55 ディスク使用率には、3段階のwatermark設定がある 1. low デフォルト値は85% この値を超えると、そのノードには新規シャードを作成しない。 (既に存在するシャードには書き込みできる) 2. high デフォルト値は90% この値を超えると、別ノードにシャードを再配置する。 (「再配置する速度 < 書き込み速度」の場合、ディスク使用率は上昇する) 3. flood_stage デフォルト値は95% この値を超えると、read-onlyインデックスになる。 Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ディスク使用率を考慮し、ディスクフルを防ぐ仕組みがある 82% 87% 92% 新規シャードを割り当て可能 新規シャードを割り当てない 別ノードにシャードを再配置
  56. 56. よくある原因と解決策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 56 1. レプリカを考慮に入れる 2. 1ノード停止しても、他のノードでデータを持てる 3. Elasticsearchの内部処理を行うための余裕が必要 ① シャード再配置 ② Elasticsearchのデータファイルは追記型のため、マー ジする領域が必要(≒データファイルのデフラグ) Shard 0 Primary Shard 2 Replica Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Shard 2 Primary Data node 3 ディスクのサイジングを行うときの注意点 82% 87% 92% 新規シャードを割り当て可能 新規シャードを割り当てない 別ノードにシャードを再配置
  57. 57. スプリットブレイン対策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 57 本番運用前にやっておくべきこと 1. シャード設計 2. レプリカ設計 3. マッピング設計 4. ディスクサイズ設計 5. スプリットブレイン対策
  58. 58. 問題 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 58 一部のデータが消えた? ログを見たら、シャードが重複しているメッセージが出 ている スプリットブレイン対策していない?
  59. 59. よくある原因と解決策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 59 次のケースでは、Master nodeが2台になってしまい、 矛盾した処理を行う危険性がある Master Master Master Master Master nodeにヘルスチェック Master nodeは正常だが、ネッ トワーク障害により、ヘルスチェック が失敗 Master nodeに障害が発生し たと思い込み、別のノードが Master nodeになる このような現象を「スプリットブレイン」と言う Node 1 Node 2 Node 1 Node 2 Node 1 Node 2 ① ② ③
  60. 60. よくある原因と解決策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 60 過半数以上のMaster-eligible nodeを確認可能なとき だけ、Master nodeになれるようにする Master 過半数(この場合は2ノード)確認できず、 Node 2はMasterになれない Node 1はMasterのまま Master 過半数確認できず、 Masterになれない 過半数確認し、 Masterになる Master 過半数確認できず、 Masterをやめる Node 1 Node 2 Node 1 Node 2 Node 3 Node 3 過半数(この場合は2ノード)確認し、 Node 2(or Node 3)は Masterになる Node 1はMasterをやめる
  61. 61. よくある原因と解決策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 61 1. Master-eligible nodeは3以上の奇数台用意する 2. 最低限必要なMaster-eligible nodeの台数を elasticsearch.ymlの discovery.zen.minimum_master_nodesに設定 する 3. 次の値を設定すること(小数点は切り捨て) (Master-eligible nodeの台数 / 2) + 1
  62. 62. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 62 Q & A
  63. 63. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 63 ご清聴ありがとうございました。 Infrastructures Evolution

×