esクラスターの紹介

6.1、クラスターノード

ELasticsearchのクラスターは、複数のノードで構成されています。クラスター名はcluster.nameを介して設定され、他のクラスターを区別するために使用されます。各ノードは、node.nameを介してノードの名前を指定します。
Elasticsearchには、主に4つのタイプの
ノードがあります。マスターノード

  • 構成ファイルのnode.masterプロパティがtrue(デフォルトはtrue)の場合、マスターノードとして選択する資格があります。
  • マスターノードは、クラスター全体の操作を制御するために使用されます。たとえば、インデックスの作成または削除、他の非マスターノードの管理などです。

データノード

  • 構成ファイルのnode.dataプロパティがtrue(デフォルトはtrue)の場合、データノードとして設定する資格があります。
  • データノードは、主にデータ関連の操作を実行するために使用されます。たとえば、ドキュメントのCRUDです。

クライアントノード

  • 構成ファイルのnode.master属性とnode.data属性の両方がfalseです。
  • このノードをマスターノードとして使用したり、データノードとして使用したりすることはできません。
  • ユーザー要求に応答し、要求を他のノードに転送するためのクライアントノードとして使用できます

部族ノード

  • ノードがtribe。*で構成されている場合、ノードは複数のクラスターに接続し、接続されているすべてのクラスターで検索やその他の操作を実行できる特別なクライアントです。

6.2クラスターを構築します。

#3つの仮想マシンを起動し、Elasticsearchを3つの仮想マシンにそれぞれデプロイしてインストールします

#node01的配置:
cluster.name:ES-itcastクラスタ
node.name:node01
node.master:真
node.data:真
network.host:0.0.0.0
たhttp.port:9200
discovery.zen.ping.unicast.hosts :["192.168.40.133"、 "192.168.40.134"、 "192.168.40.135"] Discovery.zen.minimum_master_nodes:
2
http.cors.enabled:true
http.cors.allow-origin: "*"


#とnode02的配置:
cluster.name:ES-itcastクラスタ
node.name:node02で
node.master:真
node.data:真
network.host:0.0.0.0
たhttp.port:9200
discovery.zen.ping.unicast.hosts :["192.168.40.133"、 "192.168.40.134"、 "192.168.40.135"] Discovery.zen.minimum_master_nodes:
2
http.cors.enabled:true
http.cors.allow-origin: "*"


#node03の的配置:
cluster.name:ES-itcastクラスタ
node.name:node02で
node.master:真
node.data:真
network.host:0.0.0.0
たhttp.port:9200
discovery.zen.ping.unicast.hosts :["192.168.40.133"、 "192.168.40.134"、 "192.168.40.135"] Discovery.zen.minimum_master_nodes:
2
http.cors.enabled:true
http.cors.allow-origin: "*"
#分N启PIN3节点
/ elasticsearch

クラスター情報を表示する 

アスタリスクはマスターを表します。たとえば、テストドキュメントが作成されると、5つのシャードと2つのコピーがあります。コピーは異なるノードにあります。暗いボックスはマスターシャードを表し、書き込みを担当します。コピーは読書。

クラスターの色は
緑を意味しますすべてのプライマリシャードと複製されたシャードが使用可能です
黄色すべてのプライマリシャードが使用可能ですが、すべての複製されたシャードが使用可能であると
は限りません赤すべてのプライマリシャードが使用可能であるとは限りません

6.3、断片化とコピー

Elasticsearchにデータを追加するには、インデックス(関連データを保存する場所)が必要です。実際、インデックスは
、1つ以上のシャード指すために使用される単なる「論理名前空間」です。

  • シャードは最小レベルの「ワーカーユニット」であり、すべてのデータの一部をインデックスに保存するだけです。
  • シャードがLuceneインスタンスであり、それ自体が完全な検索エンジンであることを知る必要があります。アプリケーションはそれと直接通信しません。
  • シャードは、プライマリシャードまたはレプリカシャードにすることができます。
  • インデックス内の各ドキュメントは個別のプライマリシャードに属しているため、プライマリシャードの数によって、インデックスが最大で格納できるデータの量が決まります。
  • レプリケーションシャードはメインシャードの単なるコピーであり、ハードウェア障害によるデータ損失を防ぎ、他のシャードからのドキュメントの検索や取得などの読み取り要求を提供できます。
  • インデックスが作成されると、プライマリシャードの数は固定されますが、複製されるシャードの数はいつでも調整できます。

6.4、フェイルオーバー

6.4.1、データノードを停止します

ここでnode02を停止することを選択します。

注:
現在のクラスターステータスは黄色で、マスターノードが使用可能であり、レプリカノードが完全に使用可能ではないことを示します。
一定期間観察した後、node02がノードリストに表示されないことがわかり、レプリカノードが割り当てられます。 node01とnode03に移動すると、クラスターのステータスは緑色に戻ります。

node02を復元します:
./ node02 / 1 bin / elasticsearch

node02が復元された後、クラスターに再参加し、ノード情報を再配布していることがわかります。

6.4.2、マスターノードを停止します

次に、テストはnode01を停止します。つまり、マスターノードを停止します。

結果から、クラスターがマスターとしてnode03を選択して、マスターを再選出したことがわかります。そして、クラスターのステータスが黄色になります。
しばらく待った後、クラスターのステータスが黄色から緑色に変わりました。

node01ノードの回復:
再起動後、node01をクラスターに正常に追加でき、クラスターの状況はまだ緑色のままであることがわかります。

特記事項:
構成ファイルでdiscovery.zen.minimum_master_nodesがN / 2 + 1に設定されていない場合、スプリットブレインの問題が発生し、以前にダウンしていた
マスターノードはリカバリ後にクラスターに参加しません。

6.5、配布されたドキュメント

6.5.1、ルーティング

まず、質問を見てみましょう:

図に示すように、ドキュメントをクラスターに保存する場合、ドキュメントはどのノードに保存する必要がありますか?ランダムですか?ポーリングですか?
実際、ELasticsearchでは、格納するノードを決定するために計算方法が使用され、計算式は次のとおりです。

shard = hash(routing)%number_1 of_primary_shards

  • ルーティング値は任意の文字列で、デフォルトは_idですが、カスタマイズすることもできます。
  • このルーティング文字列は、ハッシュ関数を介して数値を生成し、それをメインスライスの数で除算して、剰余(剰余)、剰余を取得します。
  • 範囲は常に0からnumber_of_primary_shards-1で、この番号は特定のものです。

6.5.2、ドキュメントの書き込み操作

新規、インデックス作成、および削除の要求はすべて書き込み操作であり、関連するレプリケートされたシャードにコピーする前に、プライマリシャードで正常に完了する必要があります。

以下に、プライマリシャードとレプリケーションシャードでドキュメントを正常に作成、インデックス作成、または削除するために必要なシーケンス手順を示します。

  • 1.クライアントは、新しいインデックスまたは削除要求をノード1に送信します。
  • 2.ノードは、ドキュメントの_idを使用して、ドキュメントがシャード0に属していることを判別します。リクエストをノード3に転送し、フラグメント0はこのノードにあります。
  • 3.ノード3は、プライマリシャードでリクエストを実行し、成功した場合は、ノード1とノード2の対応するレプリケーションノードにリクエストを転送します。すべてのレプリケーションノードが成功を報告すると、ノード3は成功を要求ノードに報告し、要求ノードはクライアントに報告します。

クライアントが正常な応答を受信すると、ドキュメントの変更がメインシャードとすべてのレプリケートされたシャードに適用されます。変更が有効になりました。

6.5.3、ドキュメントの検索(単一のドキュメント)

ドキュメントは、メインシャードまたは任意のコピーシャードから取得できます

以下に、メインシャードまたはレプリケーションシャードでドキュメントを取得するために必要なシーケンス手順を示します。

  • 1.クライアントはgetリクエストをノード1に送信します。
  • 2.ノードは、ドキュメントの_idを使用して、ドキュメントがシャード0に属していることを判別します。シャード0に対応するレプリケーションシャードは、3つのノードすべてで使用できます。この時点で、リクエストをノード2に転送します。
  • 3.ノード2は、ドキュメントをノード1に返し、次にクライアントに返します。

読み取り要求の場合、負荷を分散するために、要求ノードは要求ごとに異なるシャードを選択します。つまり、すべてのシャードコピーをループします。インデックス付きドキュメントがプライマリシャードにすでに存在しているが、レプリケートシャードに同期する時間がない可能性があります。このとき、コピーセグメントはドキュメントが見つからないことを報告し、メインセグメントはドキュメントを正常に返します。インデックスリクエストがユーザーに正常に返されると、ドキュメントはプライマリシャードとコピーシャードの両方で使用できるようになります。

6.5.4、全文検索

全文検索の場合、ドキュメントはさまざまなノードに散在している可能性があるので、分散した状況でドキュメントを検索するにはどうすればよいですか?
検索は、検索(クエリ)+フェッチ(フェッチ)の2つの段階に分かれています。
検索クエリ)

クエリフェーズは、次の3つのステップで構成されます。

  • 1.クライアントがノード3に検索要求を送信し、ノード3が長さfrom + sizeの空の優先キューを作成します。
  • 2.ノード3は、検索要求をインデックス内の各シャードの元のコピーまたはコピーに転送します。各シャードはこのクエリをローカルで実行し、結果はサイズfrom + sizeの順序付けられたローカル優先度キューに送信されます。
  • 3.各シャードは、ドキュメントのIDと、優先キュー内のすべてのドキュメントのランキング値を調整ノードノード3に返します。ノード3は、これらの値を独自の優先度キューにマージして、グローバルな並べ替え結果を生成します。

フェッチ

配布フェーズは、次の手順で構成されます。

  • 1.調整ノードは、取得する必要のあるドキュメントを識別し、関連するフラグメントにGET要求を送信します。
  • 2.各シャードはドキュメントをロードし、必要に応じてそれらを強化してから、ドキュメントを調整ノードに返します。
  • 3.すべてのドキュメントが取得されると、調整ノードは結果をクライアントに返します。
     

おすすめ

転載: blog.csdn.net/nmjhehe/article/details/113092443