Elasticsearch でシャードとレプリカが何であるかを理解しようとしていますが、理解できませんでした。Elasticsearch をダウンロードしてスクリプトを実行すると、単一ノードでクラスターを開始したことがわかります。現在、このノード (私の PC) には 5 つのシャード (?) といくつかのレプリカ (?) があります。
それらは何ですか、インデックスの複製が 5 つありますか? もしそうなら、なぜですか?説明が必要かもしれません。
Elasticsearch でシャードとレプリカが何であるかを理解しようとしていますが、理解できませんでした。Elasticsearch をダウンロードしてスクリプトを実行すると、単一ノードでクラスターを開始したことがわかります。現在、このノード (私の PC) には 5 つのシャード (?) といくつかのレプリカ (?) があります。
それらは何ですか、インデックスの複製が 5 つありますか? もしそうなら、なぜですか?説明が必要かもしれません。
あなたが得た答えと返信は役に立たないようなので、実際の例で説明しようと思います。
Elasticsearch をダウンロードして起動すると、elasticsearch ノードが作成されます。このノードは、利用可能な場合は既存のクラスターに参加しようとするか、新しいクラスターを作成します。起動したばかりの単一ノードで独自の新しいクラスターを作成したとします。データがないため、インデックスを作成する必要があります。
インデックスを作成するとき (最初のドキュメントにもインデックスを作成すると、インデックスが自動的に作成されます)、構成するシャードの数を定義できます。数値を指定しない場合、デフォルトのシャード数である 5 つのプライマリが使用されます。どういう意味ですか?
これは、elasticsearch がデータを含む 5 つのプライマリ シャードを作成することを意味します。
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
ドキュメントのインデックスを作成するたびに、elasticsearch はそのドキュメントを保持するプライマリ シャードを決定し、そこにインデックスを作成します。プライマリ シャードはデータのコピーではなく、データです。複数のシャードがあると、単一のマシンで並列処理を利用するのに役立ちますが、要点は、同じクラスターで別の Elasticsearch インスタンスを開始すると、シャードがクラスター全体に均等に分散されることです。
ノード 1 は、たとえば 3 つのシャードのみを保持します。
____ ____ ____
| 1 | | 2 | | 3 |
|____| |____| |____|
残りの 2 つのシャードが新しく開始されたノードに移動されたため、次のようになります。
____ ____
| 4 | | 5 |
|____| |____|
なぜこれが起こるのですか?Elasticsearch は分散検索エンジンであるため、複数のノード/マシンを利用して大量のデータを管理できます。
すべての Elasticsearch インデックスは、データが格納される場所であるため、少なくとも 1 つのプライマリ シャードで構成されます。ただし、すべてのシャードにはコストがかかるため、単一のノードがあり、予測可能な成長がない場合は、単一のプライマリ シャードを使用してください。
別のタイプのシャードはレプリカです。デフォルトは 1 で、すべてのプライマリ シャードが同じデータを含む別のシャードにコピーされることを意味します。レプリカは、検索パフォーマンスの向上とフェイルオーバーのために使用されます。レプリカ シャードが、関連するプライマリと同じノードに割り当てられることはありません (元のデータと同じディスクにバックアップを配置するようなものです)。
例に戻ると、レプリカが 1 つの場合、各ノードにインデックス全体があります。これは、最初のノードに 2 つのレプリカ シャードが割り当てられ、2 番目のノードのプライマリ シャードとまったく同じデータが含まれるためです。
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4R | | 5R |
|____| |____| |____| |____| |____|
2 番目のノードについても同じで、最初のノードのプライマリ シャードのコピーが含まれます。
____ ____ ____ ____ ____
| 1R | | 2R | | 3R | | 4 | | 5 |
|____| |____| |____| |____| |____|
このようなセットアップでは、ノードがダウンしても、インデックス全体を保持できます。次のように、レプリカ シャードは自動的にプライマリになり、ノードに障害が発生してもクラスターは正常に動作します。
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
があるため"number_of_replicas":1
、レプリカはプライマリと同じノードに割り当てられることはないため、これ以上割り当てることはできません。そのため、割り当てられていない 5 つのシャード、レプリカがあり、クラスターのステータスはYELLOW
ではなく になりGREEN
ます。データの損失はありませんが、一部のシャードを割り当てることができないため、改善される可能性があります。
残っていたノードがバックアップされるとすぐに、クラスターに再び参加し、レプリカが再び割り当てられます。2 番目のノードの既存のシャードはロードできますが、ノードがダウンしている間に書き込み操作が行われる可能性が高いため、他のシャードと同期する必要があります。この操作の最後に、クラスターのステータスは になりGREEN
ます。
これがあなたのために物事を明確にすることを願っています.
インデックスは、シャードを分散してスケーリングするためにシャードに分割されます。
レプリカはシャードのコピーであり、ノードが失われた場合の信頼性を提供します。replica count == 1
グリーン状態になるには、クラスターが使用可能なシャードのメイン コピーとレプリケート コピーを持っている必要があるため、この数値には混乱が生じることがよくあります。
レプリカを作成するには、クラスターに少なくとも 2 つのノードが必要です。
こちらの定義の方が理解しやすいかもしれません: http://www.elasticsearch.org/guide/reference/glossary/
インデックスは、シャードを分散してスケーリングするためにシャードに分割されます。
レプリカはシャードのコピーです。
ノードは、クラスターに属するエラスティック検索の実行中のインスタンスです。
クラスターは、同じクラスター名を共有する 1 つ以上のノードで構成されます。各クラスターには、クラスターによって自動的に選択され、現在のマスター ノードに障害が発生した場合に交換できる単一のマスター ノードがあります。
ElasticSearch では、最上位でドキュメントをインデックスにインデックス付けします。各インデックスには、データを内部に分散する多数のシャードがあり、シャード内には、データのコア ストレージである Lucene セグメントが存在します。したがって、インデックスに 5 つのシャードがある場合は、データがシャード全体に分散されており、同じデータがシャードに存在しないことを意味します。
ES のコアを説明するビデオに注意して ください https://www.youtube.com/watch?v=PpX7J-G2PEo
複数のインデックスまたは複数のシャードに関する記事 エラスティック検索、複数のインデックス vs 1 つのインデックスと異なるデータ セットのタイプ?