Elasticsearch システム概要

Elasticsearch System Overview — インデックス設計に関連する主要概念

Kunihiko Kido
Hello! Elasticsearch.

--

Elasticsearch は、Index や Type など論理的なインデックスを管理するものや、Shard や Replica、Node など物理的なインデックスを管理するものなど、主要要素がいくつもあるのでなるべくわかりやすく整理します。

論理的なインデックス

Elasticsearch の論理的なインデックスは、IndexTypeDocument の3つの要素から構成されています。

論理的なインデックスの構成要素

Index

Index は論理的なインデックスを構成する一番上位のオブジェクトです。Elasticsearch は、複数のIndexをサポートしています。各インデックスを横断して検索することもでき、任意のインデックスのみ検索対象にすることもできる。

Type

Type は、各 Index 毎に複数作成可能なRDBのテーブルのようなものです。Type はフィールドやインデックスプロセスの処理内容管理するため、インデックス対象のデータ構造の違いや、処理内容の違いによってわけます。

Document

Document は、インデックス内に登録されているコンテンツで、検索対象のでデータ群。Type で設定された仕様に準拠して保持されます。

物理的なインデックス

Elasticsearch の物理的なインデックスは、Cluster、Node、Shard の3つの要素から構成されている。

物理的なインデックス構成要素

Cluster

Cluster は、1つ以上のNodeの集まり。Elasticsearch 分散処理システムの一番上位の単位です。(≒ Elasticsearch サーバーの集合)

Node

Node は、Elasticsearch のプロセス(≒ サーバー)です。基本できには1つのサーバーに、1つのElasticsearch を稼働するので、Node 数 == サーバー数となります。

Shard

各インデックスを物理的に分割管理します。デフォルトでは、1つのインデックスは5つの Primary Shard と各 Primary Shard に1つの Replica Shard が作成されます。この分割された単位で、各 Node へ分散することが可能です。

Primary Shard と Replica Shard

分散されるPrimary Shard と Replica

Primary Shard

Primary Shard は、インデックスの書き込みと参照処理で使用されます。デフォルトでは、各インデックス毎に5つのShardが作成され、その5つのShardで完全なインデックスを構成します。また、分割されたShard の単位で、各 Node へ分散されます。

NOTE :
一度作成した インデックスの Primary Shard の数は変更できません。

Replica Shard

Replica Shard は Primary Shard のコピーです。Primary Shard で作成後、コピーされ作成されます。インデックスの参照処理で使用されます。また、Primary Shard が消えてしまった場合、該当の Replica Shard が昇格されフェールオーバーに使用されます。

NOTE :
Replica Shard の数は動的に変更可能です。また、Primary Shard と同じ Node 内に Replica Shard は作成されないため、2つ以上の Node 構成で機能します。

Shard 分散処理ダイアグラム

インデックスを設計するときは、システム規模も考慮してうまく設計する必要がありそうです。

検索数の増加によるシステムの拡張は Replica Shard を増やして Node を拡張すことで比較的簡単に対応できそうですが、インデックスのサイズの増加や、更新頻度の増加によるシステムの拡張は、ある程度将来を予想してインデックスの設計とPrimary Shard の数を考慮する必要があります。

--

--