~~NOCACHE~~
## 1.基本構成
### インスタンスとデータノードの関係
・インスタンス数の最大値は、AWSのElasticSearchはリージョンごとのAZ数となる。(1-AZ、2-AZ、3-AZで選択可能)
・AZ間で冗長化とイメージしがちだが、ElastiSearchはインデックスのレプリカ数で決まるため、AZ数やインスタンス数=冗長化数ではない。
・データノードは各AZに分散して配置されるため、AZ数の倍数が良い。
・データノードはインデックスにデータを格納し、インデックス作成とクエリのリクエストを処理する。
・専用マスターノードを作成しないと、データノードのうち何れかがマスターノードとなる。
{{:Aws:ElasticSearch:pasted:20210623-114348.png?direct 1000x0}}
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では、データノードの集合体をクラスタと呼びます。
{{:Aws:ElasticSearch:pasted:20210623-112708.png?direct 610x0}}
### 専用マスターノード
専用マスターノードは以下の管理タスクをデータノードから分離することで、ドメインの安定性を向上させます。
データノードがクエリのリクエストの処理に集中できるようにするんですね。
・クラスター内のすべてのノードを追跡する
・クラスター内のインデックスの数を追跡する
・各インデックスに属するシャード数を追跡する
・クラスター内のノードのルーティング情報を保持する
・クラスター内のインデックス作成やノードの作成/削除など、状態が変化したときにクラスターの状態を更新する
・クラスターの状態に施された変更を、クラスター内のすべてのノードにわたって複製する
・クラスター内のデータノードの可用性を監視するハートビートシグナル (定期的なシグナル) を送信することで、すべてのクラスターノードの状態を監視する
{{:Aws:ElasticSearch:pasted:20210623-113058.png?direct 870x0}}
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:ElasticSearch:pasted:20210625-172339.png?direct 920x0}}
下記は実際に配置してみた状態、どういった規則でシャードが配置されるかは不明(今度AWSに聞いてみる、ノードがどこのAZに配置されているかも知りたい。)
→インスタンス (データノード) と AZ の対応付けは利用者は知ることはできないが、「シャードは各AZに分散される」ことが"期待される"とのこと。
https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/es-managedomains-multiaz.html
{{:Aws:ElasticSearch:pasted:20210622-170811.png?direct 1000x0}}
## 参考:インデックス作成方法
### 作成コマンド
インデックス名は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
}
}
}
{{tag>AWS ElasticSearch}}