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
。
これで物事が明確になれば幸いです。