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

Más contenido relacionado

La actualidad más candente

Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようShinsuke Sugaya
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮Hibino Hisashi
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
Elasticsearch as a Distributed System
Elasticsearch as a Distributed SystemElasticsearch as a Distributed System
Elasticsearch as a Distributed SystemSatoyuki Tsukano
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Yuki Morishita
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所Toru Makabe
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)NTT DATA OSS Professional Services
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)NTT DATA Technology & Innovation
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)NTT DATA Technology & Innovation
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Amazon Web Services Japan
 

La actualidad más candente (20)

Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
Elasticsearch as a Distributed System
Elasticsearch as a Distributed SystemElasticsearch as a Distributed System
Elasticsearch as a Distributed System
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
 

Similar a はじめてのElasticsearchクラスタ

ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報yoyamasaki
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC EnterpriseYusukeKuramata
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
20211209 lt runtime_field
20211209 lt runtime_field20211209 lt runtime_field
20211209 lt runtime_fieldNomura Yuta
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決オラクルエンジニア通信
 
アプリケーション開発における暗号化
アプリケーション開発における暗号化アプリケーション開発における暗号化
アプリケーション開発における暗号化Hironori Sakamoto
 
技術勉強会(Solr入門編)
技術勉強会(Solr入門編)技術勉強会(Solr入門編)
技術勉強会(Solr入門編)Atsushi Takayasu
 
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話Preferred Networks
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証BrainPad Inc.
 
APEX UG Japan meetup 2018#3 - APEX18.1大特集
APEX UG Japan meetup 2018#3 - APEX18.1大特集APEX UG Japan meetup 2018#3 - APEX18.1大特集
APEX UG Japan meetup 2018#3 - APEX18.1大特集Yosuke Arai
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Chihiro Ito
 
Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介Toshiaki Enami
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べMasahiro Nagano
 
Developers.IO 2019 Effective Datalake
Developers.IO 2019 Effective DatalakeDevelopers.IO 2019 Effective Datalake
Developers.IO 2019 Effective DatalakeSatoru Ishikawa
 
Elasticsaerch Runtime Field
Elasticsaerch Runtime FieldElasticsaerch Runtime Field
Elasticsaerch Runtime FieldNomura Yuta
 
デモとディスカッションで体験するOracle DBトラブル対応
デモとディスカッションで体験するOracle DBトラブル対応デモとディスカッションで体験するOracle DBトラブル対応
デモとディスカッションで体験するOracle DBトラブル対応歩 柴田
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギMasaki Yamakawa
 

Similar a はじめてのElasticsearchクラスタ (20)

ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
 
solr勉強会資料
solr勉強会資料solr勉強会資料
solr勉強会資料
 
オタク×Node.js勉強会
オタク×Node.js勉強会オタク×Node.js勉強会
オタク×Node.js勉強会
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
20211209 lt runtime_field
20211209 lt runtime_field20211209 lt runtime_field
20211209 lt runtime_field
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
 
アプリケーション開発における暗号化
アプリケーション開発における暗号化アプリケーション開発における暗号化
アプリケーション開発における暗号化
 
技術勉強会(Solr入門編)
技術勉強会(Solr入門編)技術勉強会(Solr入門編)
技術勉強会(Solr入門編)
 
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証
 
APEX UG Japan meetup 2018#3 - APEX18.1大特集
APEX UG Japan meetup 2018#3 - APEX18.1大特集APEX UG Japan meetup 2018#3 - APEX18.1大特集
APEX UG Japan meetup 2018#3 - APEX18.1大特集
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要
 
Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介
 
Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
 
Developers.IO 2019 Effective Datalake
Developers.IO 2019 Effective DatalakeDevelopers.IO 2019 Effective Datalake
Developers.IO 2019 Effective Datalake
 
Elasticsaerch Runtime Field
Elasticsaerch Runtime FieldElasticsaerch Runtime Field
Elasticsaerch Runtime Field
 
デモとディスカッションで体験するOracle DBトラブル対応
デモとディスカッションで体験するOracle DBトラブル対応デモとディスカッションで体験するOracle DBトラブル対応
デモとディスカッションで体験するOracle DBトラブル対応
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
 

Más de Satoyuki Tsukano

あなたのスキルを量子技術に活かそう!
あなたのスキルを量子技術に活かそう!あなたのスキルを量子技術に活かそう!
あなたのスキルを量子技術に活かそう!Satoyuki Tsukano
 
オープンソースの量子コンピュータ・クラウド基盤開発
オープンソースの量子コンピュータ・クラウド基盤開発オープンソースの量子コンピュータ・クラウド基盤開発
オープンソースの量子コンピュータ・クラウド基盤開発Satoyuki Tsukano
 
Quantum Computer: Now and Future
Quantum Computer: Now and FutureQuantum Computer: Now and Future
Quantum Computer: Now and FutureSatoyuki Tsukano
 
Quantum computer applications in serverless architecture and challenges
Quantum computer applications in serverless architecture and challengesQuantum computer applications in serverless architecture and challenges
Quantum computer applications in serverless architecture and challengesSatoyuki Tsukano
 
How to Contributet o Quantum Computer
How to Contributet o Quantum ComputerHow to Contributet o Quantum Computer
How to Contributet o Quantum ComputerSatoyuki Tsukano
 
a story about an application that uses a real quantum computer
a story about an application that uses a real quantum computera story about an application that uses a real quantum computer
a story about an application that uses a real quantum computerSatoyuki Tsukano
 
Introduction to Quantum Programming Studio
Introduction to Quantum Programming StudioIntroduction to Quantum Programming Studio
Introduction to Quantum Programming StudioSatoyuki Tsukano
 
量子コンピュータのプログラミング・コンテスト体験記
量子コンピュータのプログラミング・コンテスト体験記量子コンピュータのプログラミング・コンテスト体験記
量子コンピュータのプログラミング・コンテスト体験記Satoyuki Tsukano
 
数学好きから見た量子コンピュータ~57を因数分解した話~
数学好きから見た量子コンピュータ~57を因数分解した話~数学好きから見た量子コンピュータ~57を因数分解した話~
数学好きから見た量子コンピュータ~57を因数分解した話~Satoyuki Tsukano
 
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用までPacketbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用までSatoyuki Tsukano
 

Más de Satoyuki Tsukano (10)

あなたのスキルを量子技術に活かそう!
あなたのスキルを量子技術に活かそう!あなたのスキルを量子技術に活かそう!
あなたのスキルを量子技術に活かそう!
 
オープンソースの量子コンピュータ・クラウド基盤開発
オープンソースの量子コンピュータ・クラウド基盤開発オープンソースの量子コンピュータ・クラウド基盤開発
オープンソースの量子コンピュータ・クラウド基盤開発
 
Quantum Computer: Now and Future
Quantum Computer: Now and FutureQuantum Computer: Now and Future
Quantum Computer: Now and Future
 
Quantum computer applications in serverless architecture and challenges
Quantum computer applications in serverless architecture and challengesQuantum computer applications in serverless architecture and challenges
Quantum computer applications in serverless architecture and challenges
 
How to Contributet o Quantum Computer
How to Contributet o Quantum ComputerHow to Contributet o Quantum Computer
How to Contributet o Quantum Computer
 
a story about an application that uses a real quantum computer
a story about an application that uses a real quantum computera story about an application that uses a real quantum computer
a story about an application that uses a real quantum computer
 
Introduction to Quantum Programming Studio
Introduction to Quantum Programming StudioIntroduction to Quantum Programming Studio
Introduction to Quantum Programming Studio
 
量子コンピュータのプログラミング・コンテスト体験記
量子コンピュータのプログラミング・コンテスト体験記量子コンピュータのプログラミング・コンテスト体験記
量子コンピュータのプログラミング・コンテスト体験記
 
数学好きから見た量子コンピュータ~57を因数分解した話~
数学好きから見た量子コンピュータ~57を因数分解した話~数学好きから見た量子コンピュータ~57を因数分解した話~
数学好きから見た量子コンピュータ~57を因数分解した話~
 
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用までPacketbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
 

はじめての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
  • 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. このセッションの内容 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
  • 6. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 6 Elasticsearchクラスタの仕組み
  • 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
  • 42. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 42 本番運用前にやっておくべきこと
  • 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% 新規シャードを割り当て可能 新規シャードを割り当てない 別ノードにシャードを再配置
  • 57. スプリットブレイン対策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 57 本番運用前にやっておくべきこと 1. シャード設計 2. レプリカ設計 3. マッピング設計 4. ディスクサイズ設計 5. スプリットブレイン対策
  • 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
  • 62. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 62 Q & A
  • 63. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 63 ご清聴ありがとうございました。 Infrastructures Evolution