Elasticsearch のシャードとレプリカ 質問する

Elasticsearch のシャードとレプリカ 質問する

Elasticsearch のシャードとレプリカが何であるかを理解しようとしていますが、理解できませんでした。Elasticsearch をダウンロードしてスクリプトを実行すると、1 つのノードでクラスターが開始されます。現在、このノード (私の PC) には 5 つのシャード (?) といくつかのレプリカ (?) があります。

それらは何ですか、インデックスの重複が 5 つあるのですか? もしそうなら、それはなぜですか? 何らかの説明が必要かもしれません。

ベストアンサー1

あなたが得た回答や返信は役に立たないようなので、実際の例を使って説明してみます。

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 つのタイプはレプリカです。デフォルトは 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 つ、レプリカが 1 つ存在し、クラスターのステータスはYELLOWではなく になりますGREEN。データ損失はありませんが、割り当てられないシャードもあるため、状況は改善される可能性があります。

離脱したノードがバックアップされるとすぐに、そのノードは再びクラスターに参加し、レプリカが再度割り当てられます。2 番目のノードの既存のシャードはロードできますが、書き込み操作はノードがダウンしている間に行われた可能性が高いため、他のシャードと同期する必要があります。この操作が終了すると、クラスターのステータスは になりますGREEN

これで物事が明確になれば幸いです。

おすすめ記事