~~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}}