Weitere ähnliche Inhalte
Ähnlich wie はじめてのElasticsearchクラスタ (20)
Mehr von Satoyuki Tsukano (10)
はじめてのElasticsearchクラスタ
- 1. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1
JJUG ナイトセミナー「Elasticsearch特集」
はじめてのElasticsearchクラスタ
2018-07-25
Acroquest Technology
束野 仁政(つかの さとゆき)
- 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
- 4. このセッションの内容
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4
背景
1. Elasticsearchは分散型のデータストアで、
クラスタ化することにより大量のデータを高速に処理できる
2. Elasticsearchはカジュアルに動かせるが、
設計すべきことをやらずに本番運用に入るのはトラブルの元
前半
分散システムの視点から見たElasticsearchクラスタの仕組み
後半
安全なクラスタにするために本番運用前にやっておくべきこと
この資料はElasticsearch6.3をベースに作成してます
- 5. 目次
前半: Elasticsearchクラスタの仕組み
1. ノードの種類
2. シャードとレプリカ
3. インデクシングの流れ
4. 検索の流れ
5. Data nodeの障害検出
後半: 本番運用前にやっておくべきこと
1. シャード設計
2. レプリカ設計
3. マッピング設計
4. ディスクサイズ設計
5. スプリットブレイン対策
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 5
- 7. ノードの種類
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 7
Elasticsearchクラスタの仕組み
1. ノードの種類
2. シャードとレプリカ
3. インデクシングの流れ
4. 検索の流れ
5. Data nodeの障害検出
- 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. ノードの種類
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. シャードとレプリカ
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 10
Elasticsearchクラスタの仕組み
1. ノードの種類
2. シャードとレプリカ
3. インデクシングの流れ
4. 検索の流れ
5. Data nodeの障害検出
- 11. シャード、レプリカとは?
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 11
Elasticsearchのデータ階層
インデックス(RDBのテーブルに近い概念)
シャード(RDBのパーティションに近い概念)
1インデックスを複数シャードで構成することにより、
次の効果がある。
1. 処理のスケール
2. 冗長化による耐障害性の確保
- 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. シャード、レプリカとは?
~冗長化による耐障害性の確保
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. シャード、レプリカに関連する主な機能
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 14
1. インデックス単位でシャード数、レプリカ数を
設定可能
シャード数はインデックス作成後に変更できない
2. レプリケーショングループ
同じシャード番号同士でレプリケーション
3. シャード単位で処理することの注意点
Aggregation等の処理はシャード単位で実行した結果をマ
ージする
- 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. レプリケーショングループ
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. シャード単位で処理することの注意点
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. インデクシングの流れ
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 18
Elasticsearchクラスタの仕組み
1. ノードの種類
2. シャードとレプリカ
3. インデクシングの流れ
4. 検索の流れ
5. Data nodeの障害検出
- 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. インデクシングの流れ(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. インデクシングの流れ(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. インデクシングの流れ(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. インデクシングの流れ(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. インデクシングの流れ(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. インデクシングの流れ(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. インデクシングの流れ(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. インデクシングの流れ(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. 検索の流れ
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 28
Elasticsearchクラスタの仕組み
1. ノードの種類
2. シャードとレプリカ
3. インデクシングの流れ
4. 検索の流れ
5. Data nodeの障害検出
- 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. 検索の流れ(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. 検索の流れ(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. 検索の流れ(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. 検索の流れ(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. 検索にかかる時間
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. DATA NODEの障害検出
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 35
Elasticsearchクラスタの仕組み
1. ノードの種類
2. シャードとレプリカ
3. インデクシングの流れ
4. 検索の流れ
5. Data nodeの障害検出
- 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. 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. 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. 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. 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. 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
- 43. シャード設計
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 43
本番運用前にやっておくべきこと
1. シャード設計
2. レプリカ設計
3. マッピング設計
4. ディスクサイズ設計
5. スプリットブレイン対策
- 44. 問題
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 44
何ヶ月か本番運用していたら、不安定になってきた。
• レスポンスが遅くなることが増えた
• FullGCが頻発するようになった
• 毎朝9時頃に不安定になる
シャード数が多すぎませんか?
- 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. レプリカ設計
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 46
本番運用前にやっておくべきこと
1. シャード設計
2. レプリカ設計
3. マッピング設計
4. ディスクサイズ設計
5. スプリットブレイン対策
- 47. 問題
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 47
1台のサーバで運用しているのですが、
クラスタ状態がいつもyellowになっています
レプリカ数がデフォルト設定?
- 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. よくある原因と解決策
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. マッピング設計
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 50
本番運用前にやっておくべきこと
1. シャード設計
2. レプリカ設計
3. マッピング設計
4. ディスクサイズ設計
5. スプリットブレイン対策
- 51. 問題
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 51
インデクシング時にパースエラーとなる
• 文字列型のはずのフィールドでパースエラー
マッピング定義していない?
- 52. よくある原因と解決策
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 52
1. マッピング定義(RDBのスキーマ定義)を行わない場合、
最初にインデクシングするデータから、型を自動判定する
(インデックス毎に行われる)
例)
マッピング定義がないフィールドに「1230」というデータを
インデクシングする
数値型と判定される
その後、「123a」というデータ(16進数表記の文字列)をイ
ンデクシングしようとしてパースエラーが発生
2. このような事故を防ぐには、
マッピング定義をしておいた方が良い
- 53. ディスクサイズ設計
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 53
本番運用前にやっておくべきこと
1. シャード設計
2. レプリカ設計
3. マッピング設計
4. ディスクサイズ設計
5. スプリットブレイン対策
- 54. 問題
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 54
ディスクは余っているが、
Elasticsearchに書き込みできなくなった
ディスクのサイジングは大丈夫?
- 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. よくある原因と解決策
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%
新規シャードを割り当て可能 新規シャードを割り当てない 別ノードにシャードを再配置
- 58. 問題
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 58
一部のデータが消えた?
ログを見たら、シャードが重複しているメッセージが出
ている
スプリットブレイン対策していない?
- 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. よくある原因と解決策
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. よくある原因と解決策
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
- 63. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 63
ご清聴ありがとうございました。
Infrastructures Evolution