SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
Elasticsearch as a Distributed System
~分散システムとしてのElasticsearch~
(簡易版)
2017-12-12
Acroquest Technology
束野 仁政(つかの さとゆき)
はじめに
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
2
1. Elasticsearchは分散システムである
2. 「Elasticsearch(の分散処理)を理解すること」と
「分散システムを理解すること」は共通点が多く、
Elasticsearchの分散処理を学ぶと応用が利く
3. この資料の内容は、単にインデクシング・検索するだけならオー
バースペックな知識
4. Elasticsearchを分散システムとして捉えたときに、
スケールアウト・耐障害性・運用・問題解析などで必要となる
知識を説明する
5. 次の書籍は分散システムのミドルウェアを学ぶ上でオススメ
 Hadoop: The Definitive Guide
 Elasticsearch: The Definitive Guide
目次
1. ノードの種類
2. シャード
3. インデクシングの流れ
4. 検索の流れ
5. Data nodeの障害検出
6. Master nodeの障害検出
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
3
この資料はElastic Stack5.6をベースに作成してます
ノードの種類
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
4
ノードの種類
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
5
その他にも、Ingest Node、
Machine learning node等がありますが、ここでは説明しません。
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.
6
No. ノードの種類 役割
1 Master-eligible node クラスタの状態管理、ノードに対するシャードの割り当て等、クラスタ全体の処
理を行うノードをMaster nodeと呼ぶ。Master nodeの候補となるノードを
Master-eligible nodeと呼び、この中から1ノードがMaster nodeに選出される。
2 Data node Elasticsearchのデータを保持するノード。データを保持し、クエリに対応した結
果を返す。
3 Coordinating node 検索リクエストやインデクシングリクエストなどを受け付けるノード。
すべてのノードは検索リクエストやインデクシングリクエストを受け付けることが
できる。
4 Coordinating only node
(Client node)
Coordinating nodeの役割のみのノード。
参考
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html
https://github.com/NII-cloud-operation/Literate-computing-Elasticsearch/blob/master/01_01_Outline.ipynb
ノードの種類は次の通り
※1ノードが複数の種類を兼任できます
シャード
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7
シャードとは?
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
8
Elasticsearchはインデックス毎にシャードと呼ばれるファイルにデ
ータを保存する。
「1インデックス=複数シャード」にすることで、次の効果がある。
1. 処理のスケール
インデックスを複数のシャードに分割し、複数のノードに分散し保持す
ることで、並列処理が可能になる。そのため、シャードを増やすことによ
り、インデクシング・検索の性能を向上できる。
これにより、インデクシング・検索処理をスケールすることができる。
ただし、シャードを作成しすぎると負荷が高くなるので注意。
2. 冗長化による耐障害性の確保
データのコピー(=レプリカ)を別ノードに保持することで、特定ノードに障
害が発生した場合でも処理を継続できる。
シャードとは?~処理のスケール
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
9
インデックスのデータをシャードに分散して保持しているため、
並列処理を行うことができる
この例では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.
10
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.
11
1. プライマリシャードとレプリカシャードの組をレプリケーション
グループと呼ぶ
2. シャードを割り当てる際に残ディスク容量を考慮し、
ディスクフルを防ぐことができる
3. 特定ノードへのシャードの偏りを改善するため、リバランス
できる
4. インデックス単位でシャード設定を行うことができ、
デフォルトではシャード数=5, レプリカ数=1
REST APIで変更可能
5. シャード数はインデックス作成後に変更できない
6. Aggregation等はシャード単位で行われる
レプリケーショングループ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
12
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.
13
• cluster.routing.allocation.disk.watermark.low
ノードのディスク使用率がこの値を超えると、新規シャードを割り当てない。デフォルト値は85%
残ディスク容量(MB等)を指定することもできる
• cluster.routing.allocation.disk.watermark.high
ノードのディスク使用率がこの値を超えると、別ノードにシャードを再配置する。デフォルト値は90%
残ディスク容量(MB等)を指定することもできる
• cluster.info.update.interval
クラスタ内の各ノードのディスク使用率をチェックする頻度。デフォルト値は30s
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.
14
リバランスが行われる主なケース
• cluster.routing.allocation.disk.watermark.highを
超え、残ディスク容量が少なくなった場合
• クラスタにノードが追加・削除された場合
(計画的な追加・削除、障害検出・障害回復、etc)
Shard 0
Primary
Data node 1
Shard 0
Replica
Shard 1
Replica
Data node 2
Shard 1
Primary
Data node 3
特定ノードへのシャードの偏りを改善するため、リバラン
スできる(基本的には自動で実行されます)
50% 90% 50%
インデックス単位でシャード数、レプリカ数を設定可能
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
• 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.
17
インデクシングの流れ~概要
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
18
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.
19
• クライアントからのリクエストを受けた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.
20
• 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.
21
• 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.
22
• 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.
23
• 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.
24
• 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.
25
• 全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.
26
• 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.
27
検索の流れ~概要
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
28
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.
29
• 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.
30
• 各シャード内で検索を行う
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.
31
• 各シャードの検索結果を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.
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
④各シャードの検索結果をマージ
①各シャードにリクエスト
②シャード内で検索 ②シャード内で検索 ②シャード内で検索
③ ③①
①
③検索結果
検索にかかる時間
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
33
検索にかかる時間
• 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.
34
Data Node障害検出~目次
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
35
本章では次の内容を説明する
1. クラスタ状態
2. Data Nodeの障害検出の流れ
3. インデックス復旧の優先度
4. Data Nodeの障害検出に関連する設定
5. シャード再割り当て途中でのノード復旧
障害検出方法にはいくつか種類があるが、
Elasticsearchのデフォルト方式である
Zen Discoveryを前提として説明する
クラスタ状態
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の障害検出の流れ~概要
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
37
Data Nodeの障害検出の流れ
1. Master nodeは各ノードにヘルスチェックを行う
2. Data nodeに障害が発生し、
Master nodeが障害検出する
3. Data nodeがすぐに復旧するケースに備え、
Master nodeは1分間待機する
4. 障害により失われたプライマリシャードを復旧させる
5. 障害により失われたレプリカシャードを復旧させる
Data Nodeの障害検出の流れ(1/5)
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
38
• 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.
39
• 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.
40
• 障害検出したノードが保持するデータを復旧させたい
• ただ、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.
41
• 障害により失われたプライマリシャード(ここでは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.
42
• 障害により失われたレプリカシャード(ここでは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.
43
複数のインデックス復旧が必要な場合、
次の優先度で順番に復旧する
1. 設定値index.priorityが大きいもの
 インデックス毎にREST APIで変更可能
 デフォルトの優先度は0
2. 作成日が新しいもの
3. インデックス名の辞書式順序で先に来るもの
Data Nodeの障害検出に関連する設定
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
44
1. リバランスも行われるため、実際の動作はもっと複雑
2. 関連する設定値(Zen Discoveryの場合)
No. 設定名 設定内容 デフォルト値
1 discovery.zen.fd.ping_interval ヘルスチェック間隔 1s
2 discovery.zen.fd.ping_timeout ヘルスチェックタイムアウト 30s
3 discovery.zen.fd.ping_retries ヘルスチェック回数 3
4 index.unassigned.node_left.delayed_timeout ノードの障害検出後、データ復旧開始まで
Master nodeが待機する時間
1m
MASTER NODEの障害検出
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
45
Master Node障害検出~目次
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
46
本章では次の内容を説明する
1. Master Nodeの障害検出の流れ
2. Split Brain対策
障害検出方法にはいくつか種類があるが、
Elasticsearchのデフォルト方式である
Zen Discoveryを前提として説明する
Master Nodeの障害検出の流れ(1/3)
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
47
• Master-eligible nodeは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
Master Nodeの障害検出の流れ(2/3)
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
48
• Master nodeに障害が発生する
• タイムアウト30s×3回連続でヘルスチェックに失敗すると、
Master-eligible nodeは「Master 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
①障害検知
Master Nodeの障害検出の流れ(3/3)
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
49
• Master-eligible node間で新しいMaster nodeを選出
• 後で説明する「Split Brain対策」に注意
• 以降は通常の処理に戻る
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
①障害検知
②新Masterを選出
Master
Split Brain対策(1/3)
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
50
次のケースでは、Master nodeが2台になってしまい、
矛盾した処理を行う危険性がある
Master
Master
Master Master
Master nodeにヘルスチェック
Master nodeは正常だが、ネッ
トワーク障害により、ヘルスチェック
が失敗
Master nodeに障害が発生し
たと思い込み、別のノードが
Master nodeになる
このような現象を「Split Brain」と言う
Node 1 Node 2
Node 1 Node 2
Node 1 Node 2
①
②
③
Split Brain対策(2/3)
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
51
過半数以上の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をやめる
Split Brain対策(3/3)
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
52
1. そのため、Master-eligible nodeは3以上の奇数
台用意する
2. 最低限必要なMaster-eligible nodeの台数を
elasticsearch.ymlの
discovery.zen.minimum_master_nodesに
設定する
3. 次の値を設定すること(小数点は切り捨て)
(Master-eligible nodeの台数 / 2) + 1
53
分散システムとしての側面も押さえ、
Elasticsearchを効果的に使いましょう!

Contenu connexe

Tendances

SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
Best Practices for Running PostgreSQL on AWS
Best Practices for Running PostgreSQL on AWSBest Practices for Running PostgreSQL on AWS
Best Practices for Running PostgreSQL on AWSAmazon Web Services Japan
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
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
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化Kumazaki Hiroki
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Yuki Morishita
 
最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返り最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返りSotaro Kimura
 

Tendances (20)

Consistent hash
Consistent hashConsistent hash
Consistent hash
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
Best Practices for Running PostgreSQL on AWS
Best Practices for Running PostgreSQL on AWSBest Practices for Running PostgreSQL on AWS
Best Practices for Running PostgreSQL on AWS
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
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 発表資料)
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
 
最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返り最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返り
 
Paxos
PaxosPaxos
Paxos
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 

Similaire à Elasticsearch as a Distributed System

はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタSatoyuki Tsukano
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Yoshinori Matsunobu
 
Azure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスAzure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスMicrosoft
 
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!Etsuji Nakai
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門Daiyu Hatakeyama
 
HDFS Supportaiblity Improvements
HDFS Supportaiblity ImprovementsHDFS Supportaiblity Improvements
HDFS Supportaiblity ImprovementsCloudera Japan
 
Hadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionHadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionCloudera, Inc.
 
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...Insight Technology, Inc.
 
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)株式会社クライム
 
cassandra調査レポート
cassandra調査レポートcassandra調査レポート
cassandra調査レポートAkihiro Kuwano
 
[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力
[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力
[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力オラクルエンジニア通信
 
Guide to Cassandra for Production Deployments
Guide to Cassandra for Production DeploymentsGuide to Cassandra for Production Deployments
Guide to Cassandra for Production Deploymentssmdkk
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache maruyama097
 
第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」
第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」
第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」Kazuyuki Sato
 
[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...
[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...
[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...Insight Technology, Inc.
 

Similaire à Elasticsearch as a Distributed System (20)

はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタ
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
Azure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスAzure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL Poolベストプラクティス
 
20111028ssmjp
20111028ssmjp20111028ssmjp
20111028ssmjp
 
これがCassandra
これがCassandraこれがCassandra
これがCassandra
 
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 
HDFS Supportaiblity Improvements
HDFS Supportaiblity ImprovementsHDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
 
Hadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionHadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese Version
 
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...
 
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)
Zerto ホワイトペーパー:Oracleデータベース保護のベストプラクティス(ショート編)
 
Osc2011 Do
Osc2011 DoOsc2011 Do
Osc2011 Do
 
cassandra調査レポート
cassandra調査レポートcassandra調査レポート
cassandra調査レポート
 
[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力
[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力
[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力
 
Guide to Cassandra for Production Deployments
Guide to Cassandra for Production DeploymentsGuide to Cassandra for Production Deployments
Guide to Cassandra for Production Deployments
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache 
 
第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」
第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」
第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」
 
[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...
[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...
[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...
 
20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public
 
CPUの同時実行機能
CPUの同時実行機能CPUの同時実行機能
CPUの同時実行機能
 

Plus 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
 

Plus 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 as a Distributed System

  • 1. Elasticsearch as a Distributed System ~分散システムとしてのElasticsearch~ (簡易版) 2017-12-12 Acroquest Technology 束野 仁政(つかの さとゆき)
  • 2. はじめに Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2 1. Elasticsearchは分散システムである 2. 「Elasticsearch(の分散処理)を理解すること」と 「分散システムを理解すること」は共通点が多く、 Elasticsearchの分散処理を学ぶと応用が利く 3. この資料の内容は、単にインデクシング・検索するだけならオー バースペックな知識 4. Elasticsearchを分散システムとして捉えたときに、 スケールアウト・耐障害性・運用・問題解析などで必要となる 知識を説明する 5. 次の書籍は分散システムのミドルウェアを学ぶ上でオススメ  Hadoop: The Definitive Guide  Elasticsearch: The Definitive Guide
  • 3. 目次 1. ノードの種類 2. シャード 3. インデクシングの流れ 4. 検索の流れ 5. Data nodeの障害検出 6. Master nodeの障害検出 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3 この資料はElastic Stack5.6をベースに作成してます
  • 4. ノードの種類 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4
  • 5. ノードの種類 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 5 その他にも、Ingest Node、 Machine learning node等がありますが、ここでは説明しません。 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
  • 6. ノードの種類 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 6 No. ノードの種類 役割 1 Master-eligible node クラスタの状態管理、ノードに対するシャードの割り当て等、クラスタ全体の処 理を行うノードをMaster nodeと呼ぶ。Master nodeの候補となるノードを Master-eligible nodeと呼び、この中から1ノードがMaster nodeに選出される。 2 Data node Elasticsearchのデータを保持するノード。データを保持し、クエリに対応した結 果を返す。 3 Coordinating node 検索リクエストやインデクシングリクエストなどを受け付けるノード。 すべてのノードは検索リクエストやインデクシングリクエストを受け付けることが できる。 4 Coordinating only node (Client node) Coordinating nodeの役割のみのノード。 参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html https://github.com/NII-cloud-operation/Literate-computing-Elasticsearch/blob/master/01_01_Outline.ipynb ノードの種類は次の通り ※1ノードが複数の種類を兼任できます
  • 7. シャード Copyright © Acroquest Technology Co., Ltd. All rights reserved. 7
  • 8. シャードとは? Copyright © Acroquest Technology Co., Ltd. All rights reserved. 8 Elasticsearchはインデックス毎にシャードと呼ばれるファイルにデ ータを保存する。 「1インデックス=複数シャード」にすることで、次の効果がある。 1. 処理のスケール インデックスを複数のシャードに分割し、複数のノードに分散し保持す ることで、並列処理が可能になる。そのため、シャードを増やすことによ り、インデクシング・検索の性能を向上できる。 これにより、インデクシング・検索処理をスケールすることができる。 ただし、シャードを作成しすぎると負荷が高くなるので注意。 2. 冗長化による耐障害性の確保 データのコピー(=レプリカ)を別ノードに保持することで、特定ノードに障 害が発生した場合でも処理を継続できる。
  • 9. シャードとは?~処理のスケール Copyright © Acroquest Technology Co., Ltd. All rights reserved. 9 インデックスのデータをシャードに分散して保持しているため、 並列処理を行うことができる この例では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
  • 10. シャードとは?~冗長化による耐障害性の確保 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 10 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
  • 11. シャードに関連する用語・機能 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 11 1. プライマリシャードとレプリカシャードの組をレプリケーション グループと呼ぶ 2. シャードを割り当てる際に残ディスク容量を考慮し、 ディスクフルを防ぐことができる 3. 特定ノードへのシャードの偏りを改善するため、リバランス できる 4. インデックス単位でシャード設定を行うことができ、 デフォルトではシャード数=5, レプリカ数=1 REST APIで変更可能 5. シャード数はインデックス作成後に変更できない 6. Aggregation等はシャード単位で行われる
  • 12. レプリケーショングループ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 12 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 • 同一レプリケーショングループのデータは別ノードに配置される • 「レプリカ数 ≧ ノード数」に設定しても、ディスクアクセスを並列化できなければ 性能を向上できない
  • 13. ディスクベースのシャード割り当て Copyright © Acroquest Technology Co., Ltd. All rights reserved. 13 • cluster.routing.allocation.disk.watermark.low ノードのディスク使用率がこの値を超えると、新規シャードを割り当てない。デフォルト値は85% 残ディスク容量(MB等)を指定することもできる • cluster.routing.allocation.disk.watermark.high ノードのディスク使用率がこの値を超えると、別ノードにシャードを再配置する。デフォルト値は90% 残ディスク容量(MB等)を指定することもできる • cluster.info.update.interval クラスタ内の各ノードのディスク使用率をチェックする頻度。デフォルト値は30s 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% 新規シャードを割り当て可能 新規シャードを割り当てない 別ノードにシャードを再配置
  • 14. リバランス Copyright © Acroquest Technology Co., Ltd. All rights reserved. 14 リバランスが行われる主なケース • cluster.routing.allocation.disk.watermark.highを 超え、残ディスク容量が少なくなった場合 • クラスタにノードが追加・削除された場合 (計画的な追加・削除、障害検出・障害回復、etc) Shard 0 Primary Data node 1 Shard 0 Replica Shard 1 Replica Data node 2 Shard 1 Primary Data node 3 特定ノードへのシャードの偏りを改善するため、リバラン スできる(基本的には自動で実行されます) 50% 90% 50%
  • 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 • 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 各シャードの実行結果をマージ シャード単位の実行結果
  • 17. インデクシングの流れ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 17
  • 18. インデクシングの流れ~概要 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 18 Elasticseachクラスタ内でのインデクシング処理の流れ 1. クライアントからのリクエストを受けたCoordinating nodeは インデクシング先のシャード番号を決める 2. Coordinating nodeはPrimaryシャードにインデクシングを リクエストする 3. Primaryシャードは、インデクシングを行う 4. Replicaシャードは、並列でインデクシングを行う 5. Replicaシャードは、Primaryシャードにレスポンスを返す 6. Primaryシャードに全Replicaシャードからレスポンスが返って きたら、Coordinating nodeにレスポンスを返す 7. Coordinating nodeはクライアントにレスポンスを返す
  • 19. インデクシングの流れ(1/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 19 • クライアントからのリクエストを受けた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 ①シャード番号を決定
  • 20. インデクシングの流れ(2/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 20 • 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シャードにリクエスト
  • 21. インデクシングの流れ(3/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 21 • 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. インデクシングの流れ(4/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 22 • 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シャードにリクエスト ③インデクシング
  • 23. インデクシングの流れ(5/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 23 • 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シャードにリクエスト ③インデクシング ⑤インデクシング
  • 24. インデクシングの流れ(6/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 24 • 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シャードにリクエスト ⑥レスポンス ③インデクシング ⑤インデクシング
  • 25. インデクシングの流れ(7/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 25 • 全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シャードにリクエスト ⑥レスポンス ⑦レスポンス ③インデクシング ⑤インデクシング
  • 26. インデクシングの流れ(8/8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 26 • 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. 検索の流れ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 27
  • 28. 検索の流れ~概要 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 28 Elasticseachクラスタ内での検索処理の流れ Query Phase 1. Coordinating nodeは各シャードにリクエスト 2. 各シャード内で検索を行う Fetch Phase 3. 各シャードの検索結果をCoordinating nodeに 返す 4. Coordinating nodeが各シャードからの検索結果 をマージし、クライアントにレスポンスを返す
  • 29. 検索の流れ(1/4) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 29 • 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の レプリケーショングループ
  • 30. 検索の流れ(2/4) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 30 • 各シャード内で検索を行う 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 ①各シャードにリクエスト ① ① ②シャード内で検索 ②シャード内で検索 ②シャード内で検索
  • 31. 検索の流れ(3/4) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 31 • 各シャードの検索結果を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 ①各シャードにリクエスト ③検索結果 ③ ③① ① ②シャード内で検索 ②シャード内で検索 ②シャード内で検索
  • 32. 検索の流れ(4/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. 検索にかかる時間 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 33 検索にかかる時間 • 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 ④各シャードの検索結果をマージ ①各シャードにリクエスト ②シャード内で検索 ②シャード内で検索 ②シャード内で検索 ③ ③① ① ③検索結果
  • 34. DATA NODEの障害検出 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 34
  • 35. Data Node障害検出~目次 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 35 本章では次の内容を説明する 1. クラスタ状態 2. Data Nodeの障害検出の流れ 3. インデックス復旧の優先度 4. Data Nodeの障害検出に関連する設定 5. シャード再割り当て途中でのノード復旧 障害検出方法にはいくつか種類があるが、 Elasticsearchのデフォルト方式である Zen Discoveryを前提として説明する
  • 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の障害検出の流れ~概要 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 37 Data Nodeの障害検出の流れ 1. Master nodeは各ノードにヘルスチェックを行う 2. Data nodeに障害が発生し、 Master nodeが障害検出する 3. Data nodeがすぐに復旧するケースに備え、 Master nodeは1分間待機する 4. 障害により失われたプライマリシャードを復旧させる 5. 障害により失われたレプリカシャードを復旧させる
  • 38. Data Nodeの障害検出の流れ(1/5) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 38 • 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
  • 39. Data Nodeの障害検出の流れ(2/5) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 39 • 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
  • 40. Data Nodeの障害検出の流れ(3/5) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 40 • 障害検出したノードが保持するデータを復旧させたい • ただ、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
  • 41. Shard 1 R→P Data node 3 Data Nodeの障害検出の流れ(4/5) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 41 • 障害により失われたプライマリシャード(ここでは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分間待機 ③プライマリシャードの復旧
  • 42. Shard 1 Primary Data node 3 Data Nodeの障害検出の流れ(5/5) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 42 • 障害により失われたレプリカシャード(ここでは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. 設定値index.priorityが大きいもの  インデックス毎にREST APIで変更可能  デフォルトの優先度は0 2. 作成日が新しいもの 3. インデックス名の辞書式順序で先に来るもの
  • 44. Data Nodeの障害検出に関連する設定 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 44 1. リバランスも行われるため、実際の動作はもっと複雑 2. 関連する設定値(Zen Discoveryの場合) No. 設定名 設定内容 デフォルト値 1 discovery.zen.fd.ping_interval ヘルスチェック間隔 1s 2 discovery.zen.fd.ping_timeout ヘルスチェックタイムアウト 30s 3 discovery.zen.fd.ping_retries ヘルスチェック回数 3 4 index.unassigned.node_left.delayed_timeout ノードの障害検出後、データ復旧開始まで Master nodeが待機する時間 1m
  • 45. MASTER NODEの障害検出 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 45
  • 46. Master Node障害検出~目次 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 46 本章では次の内容を説明する 1. Master Nodeの障害検出の流れ 2. Split Brain対策 障害検出方法にはいくつか種類があるが、 Elasticsearchのデフォルト方式である Zen Discoveryを前提として説明する
  • 47. Master Nodeの障害検出の流れ(1/3) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 47 • Master-eligible nodeは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
  • 48. Master Nodeの障害検出の流れ(2/3) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 48 • Master nodeに障害が発生する • タイムアウト30s×3回連続でヘルスチェックに失敗すると、 Master-eligible nodeは「Master 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 ①障害検知
  • 49. Master Nodeの障害検出の流れ(3/3) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 49 • Master-eligible node間で新しいMaster nodeを選出 • 後で説明する「Split Brain対策」に注意 • 以降は通常の処理に戻る 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 ①障害検知 ②新Masterを選出 Master
  • 50. Split Brain対策(1/3) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 50 次のケースでは、Master nodeが2台になってしまい、 矛盾した処理を行う危険性がある Master Master Master Master Master nodeにヘルスチェック Master nodeは正常だが、ネッ トワーク障害により、ヘルスチェック が失敗 Master nodeに障害が発生し たと思い込み、別のノードが Master nodeになる このような現象を「Split Brain」と言う Node 1 Node 2 Node 1 Node 2 Node 1 Node 2 ① ② ③
  • 51. Split Brain対策(2/3) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 51 過半数以上の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をやめる
  • 52. Split Brain対策(3/3) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 52 1. そのため、Master-eligible nodeは3以上の奇数 台用意する 2. 最低限必要なMaster-eligible nodeの台数を elasticsearch.ymlの discovery.zen.minimum_master_nodesに 設定する 3. 次の値を設定すること(小数点は切り捨て) (Master-eligible nodeの台数 / 2) + 1