目次

1.基本構成

インスタンスとデータノードの関係

・インスタンス数の最大値は、AWSのElasticSearchはリージョンごとのAZ数となる。(1-AZ、2-AZ、3-AZで選択可能)
・AZ間で冗長化とイメージしがちだが、ElastiSearchはインデックスのレプリカ数で決まるため、AZ数やインスタンス数=冗長化数ではない。
・データノードは各AZに分散して配置されるため、AZ数の倍数が良い。
・データノードはインデックスにデータを格納し、インデックス作成とクエリのリクエストを処理する。
・専用マスターノードを作成しないと、データノードのうち何れかがマスターノードとなる。

https://aws.amazon.com/jp/blogs/news/best-practices-for-configuring-your-amazon-elasticsearch-service-domain/
https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/es-managedomains-multiaz.html

クラスタ

Elasticsearchでは、データノードの集合体をクラスタと呼びます。

専用マスターノード

専用マスターノードは以下の管理タスクをデータノードから分離することで、ドメインの安定性を向上させます。
データノードがクエリのリクエストの処理に集中できるようにするんですね。
・クラスター内のすべてのノードを追跡する
・クラスター内のインデックスの数を追跡する
・各インデックスに属するシャード数を追跡する
・クラスター内のノードのルーティング情報を保持する
・クラスター内のインデックス作成やノードの作成/削除など、状態が変化したときにクラスターの状態を更新する
・クラスターの状態に施された変更を、クラスター内のすべてのノードにわたって複製する
・クラスター内のデータノードの可用性を監視するハートビートシグナル (定期的なシグナル) を送信することで、すべてのクラスターノードの状態を監視する

https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/es-managedomains-dedicatedmasternodes.html

※AZ障害時のダウンタイムの発生有無については、以下を参照すること。
https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/es-managedomains-multiaz.html#es-managedomains-za-summary

シャード

プライマリシャード、レプリカシャードがあり、シャード数はノードをいくつに分割するかで決まる。
・プライマリシャード:レプリカを作成したオリジナルのシャード
・レプリカシャード:プライマリシャードから作成されたシャード

データノードとインデックス及びシャードの関係

・インデックスは、データノードに跨って配置される。
・シャードはインデックス内のデータを分割した単位。(分割数=シャード数)
・データノードに分散して配置される。(配置される数=レプリカ数)

下記は実際に配置してみた状態、どういった規則でシャードが配置されるかは不明(今度AWSに聞いてみる、ノードがどこのAZに配置されているかも知りたい。)
→インスタンス (データノード) と AZ の対応付けは利用者は知ることはできないが、「シャードは各AZに分散される」ことが“期待される”とのこと。
https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/es-managedomains-multiaz.html

参考:インデックス作成方法

作成コマンド

インデックス名はJSONファイルの中身で指定するわけでなくURIで指定するAPIなんですね。

# コマンドプロンプト
curl -X PUT {ElasticSearchドメイン}/{インデックス名} -d @ElasticSearch.json -H "Content-type: application/json"

# Powershell
Invoke-WebRequest -Method PUT {ElasticSearchドメイン}/{インデックス名} -InFile 'ElasticSearch.json' -H @{'Content-type' = 'application/json'}

ElasticSearch.jsonの中身

シャードとレプリカを指定

{
  "settings": {
    "index" : {
      "number_of_shards": 1,
      "number_of_replicas": 2
    }
  }
}