[前回] Elasticsearchクラスタ検証(5): Elasticsearchシステム構成の基本
はじめに
Elasticsearchクラスタの基本構成と用語をおさらいします。
Elasticsearchクラスタとは
- 各ノードが固有の役割を持ち、お互い通信しながら協調動作
※ 引用元: https://raw.githubusercontent.com/exo-addons/exo-es-search/master/doc/images/image_05.png
ノードの種類と役割
- Master(Master-eligible)ノード
- Masterノードはクラスタのリーダー
- クラスタ管理を担当し、クラスタに必ず1台存在
- Master-eligibleはリーダー候補
- Masterノードがダウンしたら、Master-eligibleから選出
- 役割
- 全ノードの管理(参加、離脱、生死)
- クラスタメタデータの管理
- シャードの管理(割り当て、再配置)
- Masterノードはクラスタのリーダー
- Dataノード
- データ格納を担当
- Luceneインデックスファイルのマージ
- クライアントからのインデックスリクエストをハンドリング
- 格納対象シャード番号を決定し、処理をルーティング
- クライアントからの検索リクエストのハンドリング
- 関係する複数ノードのシャードへ処理をルーティング(scatter)
- 各ノードの結果を集約し返却(gather)
- Ingestノード
- クライアントからのデータに対し前処理を行う
- パイプラインを定義可能
- Coordinatingノード
- クライアントからのリクエストのハンドリングのみ行うための専用ノード
- scatter
- gather
- 役割
- 負荷分散
- Aggregateなど高負荷処理を切り出す
- クライアントからのリクエストのハンドリングのみ行うための専用ノード
Masterノード選出とノードのクラスタ参加
クラスタブートストラップを設定
- クラスタの最初の形成時のみ必要
- Masterノードは投票によって選出される
- 投票設定として、Master-eligibleノードの初期セットの設定が必要
- 設定方法(elasticsearch.yml)
cluster.initial_master_nodes
- 各ノードで投票設定の共有
- クラスタ参加済みノードは、データフォルダ内に投票設定を格納し再利用
- 新規参加ノードは、選出されたMasterノードから情報を受け取る
ディスカバリサブシステムを設定
- ノードがお互いを見つけられるようにするための設定
- 設定方法(elasticsearch.yml)
discovery.seed_hosts
discovery.seed_providers
スプリットブレインの問題
- スプリットブレインとは
ネットワーク障害などによりクラスタが二つに分断され、
それぞれMasterノードを持つ複数クラスタになってしまう事象
-
Masterノードの表記
- ◆
-
スプリットブレイン前は1つのクラスタ
- { [node1◆] [node2] [node3] [node4] }
- Masterノードは、node1
- { [node1◆] [node2] [node3] [node4] }
-
スプリットブレイン後は二つのクラスタ
- { [node1◆] [node2] }
- Masterノードは、node1
- { [node3◆] [node4] }
- Masterノードは、node3
- { [node1◆] [node2] }
おわりに
Elasticsearchクラスタの基本構成と用語をおさらいしました。
次回も続きます。お楽しみに。