Elasticsearch 先輩との戯れ日記(登場人物の整理)
この記事何?
お仕事で Elasticsearch 先輩を使うことになったので、そのお戯れの記録
登場人物の整理
事例を中心に調査していたが、色々混乱してきたので、 Elasticsearch の世界の登場人物を整理することにした。
雑な説明
オブジェクト | 概要 |
---|---|
Cluster | Node を束ねる存在 |
Node | Elasticsearch のインスタンスのこと |
Shard | Index を分割したもの |
Index | インデックス |
Type | テーブル |
Document | レコード |
雑すぎるので1個ずつ見ていく。
Cluster
Node を束ねるもの。 Cluster Health を使って、 Cluster の状態を確認することができる。
- green: すべての Shard が Cluster 上に配置されてる
- yellow: PrimaryShard は Cluster 上に配置されているが、配置されていない ReplicaShard が存在している
- red: Cluster 上に配置されていない Shard が存在している
Shard については、後述。
Node
Node | Elasticsearch Reference [5.4] | Elastic
Node には Master (eligible) Node と Data Node と Ingest node が主要な感じ(Tribe Node はよくわからなかった)
- クラスタ内で行う処理の分配を行う
- もし、 Master Node が死んだら、別の Master Eligible Node が Master になってくれる(デフォルトでは全 Node)
- Master Node は、基本的に分配だけをメインにやらせると安定運用につながる
- document の管理を行う
- 主に CRUD 操作を担当
- Master Node とは役割分離させようね
- I/O 系の処理はメモリいっぱい使うからちゃんと監視しようね
Data Node が死んじゃったらデータは欠損する?
discovery.zen.minimum_master_nodes
を設定すれば、設定した値の数で最小構成として、データの書き込みとかを行うみたい(おそらく)
なので、一応データの欠損は防げるらしい。
参考:Avoiding split brain with minimum_master_nodes
- Elasticsearch 5.0 から登場
- index を貼る前にドキュメントを変換するために使う Node
- パイプラインを作って複数の処理を組み合わせて実行もできる
Shard
10億個の document を複数に分割して読み込めるように、 index を分割する仕組み。 これによって、オペレーションの分散と並列化ができるため、パフォーマンスの向上につながる。
Primary shard を増やせば増やすほど並列数が上がって1ノードのパフォーマンスが上がるかも? →ただ、その分スペックは要求される デフォルトは5つの Primary Shard と 各 Primary Shard 毎に 1つの Replica Shard
Replica Shard は Primary Shard コピーを複製してあるもの。 このコピーは同一 Node には作成出来ない。
出典 : How Primary and Replica Shards Interact | Elasticsearch: The Definitive Guide [2.x] | Elastic
Index
Document を纏めるもの。 インデックス 付け、検索、更新、削除全てを行う。
Reindex | Curator Reference [5.1] | Elastic
インデックスを貼り直すとかって事もできる。 ここらへんが検索周りのチューニングポイントらしい。
Type
Document を種類別に分別することができる。 データベースで言うところの table
Document
1レコード分の情報が入ってるもの。 JSON で表現される。
Index Type Document の相関図はこんな感じ
出典: データ構造について – AWSで始めるElasticSearch(4) | Developers.IO
まとめ
登場人物整理したら、なんとなく事例でチューニングした話とかも分かりそうな気がした。 あくまで、気がしているだけ。 図とかは出典元を見ていただけるとうれしいです。
番外編
こいつで、docker-compose up ってするだけで、 kibana と elasticsearch がどっちも立ち上がるんだって :sugoi:
version: '2' services: kibana: image: kibana links: - elasticsearch:elasticsearch ports: - 5601:5601 elasticsearch: image: elasticsearch ports: - 9200:9200 - 9300:9300
公式もサポートしているっぽい。 library/elasticsearch - Docker Hub