Elasticsearchにシャードとレプリカがあるかを理解しようとしていますが、どうにか理解できませんでした。Elasticsearchをダウンロードしてスクリプトを実行すると、知っていることから、単一ノードでクラスターを開始しました。このノード(私のPC)には5つのシャード(?)といくつかのレプリカ(?)があります。
それらは何ですか、インデックスの5つの重複がありますか?もしそうなら、なぜですか?説明が必要かもしれません。
Elasticsearchにシャードとレプリカがあるかを理解しようとしていますが、どうにか理解できませんでした。Elasticsearchをダウンロードしてスクリプトを実行すると、知っていることから、単一ノードでクラスターを開始しました。このノード(私のPC)には5つのシャード(?)といくつかのレプリカ(?)があります。
それらは何ですか、インデックスの5つの重複がありますか?もしそうなら、なぜですか?説明が必要かもしれません。
回答:
あなたが得た答えはあなたを助けていないようですので、私は実際の例で説明しようとします。
elasticsearchをダウンロードして起動すると、利用可能な場合は既存のクラスターに参加しようとする、または新しいクラスターを作成するelasticsearchノードを作成します。起動したばかりの単一のノードで独自の新しいクラスターを作成したとします。データがないため、インデックスを作成する必要があります。
インデックスを作成するとき(最初のドキュメントにインデックスを作成するときにもインデックスが自動的に作成されます)、インデックスを構成するシャードの数を定義できます。数を指定しない場合、デフォルトのシャード数(5つのプライマリ)になります。どういう意味ですか?
つまり、elasticsearchは、データを含む5つのプライマリシャードを作成します。
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
ドキュメントをインデックスに登録するたびに、elasticsearchはそのドキュメントを保持することになっているプライマリシャードを決定し、そこにインデックスを作成します。プライマリー断片はデータのコピーではなく、データです!複数のシャードがあると、1台のマシンで並列処理を利用するのに役立ちますが、全体の要点は、同じクラスターで別の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つのシャード、レプリカがあり、クラスターのステータスはではYELLOW
なくになりGREEN
ます。データの損失はありませんが、一部のシャードを割り当てることができないため、より良い場合があります。
残っていたノードがバックアップされるとすぐに、ノードは再びクラスターに参加し、レプリカが再度割り当てられます。2番目のノードの既存のシャードはロードできますが、書き込み操作はノードがダウンしているときに発生した可能性が高いため、他のシャードと同期する必要があります。この操作の最後に、クラスターのステータスはになりGREEN
ます。
これがあなたのために物事を明確にすることを願っています。
インデックスをシャードに分割して分散し、スケーリングします。
レプリカはシャードのコピーであり、ノードが失われた場合の信頼性を提供します。レプリカ数== 1は、クラスターにメインと複製されたシャードのコピーが緑の状態にある必要があることを意味するため、この数はしばしば混乱します。
レプリカを作成するには、クラスターに少なくとも2つのノードが必要です。
ここで定義を理解する方が簡単かもしれません:http : //www.elasticsearch.org/guide/reference/glossary/
よろしく、ポール
シャード:
ElasticSearch
呼び出さShard
れた概念を使用し
て、すべてのノードにインデックスドキュメントを分散します。index
潜在Aのハードウェアの限界を超えることができ、大量のデータを格納することができますsingle node
Elasticsearch
はと呼ばれる複数の部分にインデックスを分割する機能を提供しますshards
。shards
ます。Documents
に格納されshards
、シャードはに割り当てられnodes
ますcluster
cluster
に成長または収縮、Elasticsearch
意志の間で自動的に移行さ破片nodes
ように、cluster
遺骨はバランス。primary shard
かreplica shard
。single primary shard
ため、ユーザーが持つプライマリシャードの数によって、インデックスが保持できるデータの最大量が決まりますreplica shard
はプライマリー断片の単なるコピーです。レプリカ:
Replica shard
のコピーでありprimary Shard
、ハードウェア障害が発生した場合のデータ損失を防止します。Elasticsearch
インデックスのシャードの1つ以上のコピーを、レプリカシャードと呼ばれるものに、またはreplicas
略して作成できます。index
ゼロ(レプリカがないことを意味する)以上に複製することもできます。number of shards
レプリカは、インデックスが作成された時点で、インデックスごとに定義することができます。cannot change the number of shards
事後的に変更できます。Elasticsearch
は5つのプライマリシャードが割り当てられ1 replica
ます。つまり、クラスターに少なくとも2つのノードがある場合、インデックスには5つのプライマリシャードと別の5つのレプリカシャード(1つの完全なレプリカ)があり、合計で10シャードになります。インデックス。インデックスをシャードに分割して分散し、スケーリングします。
レプリカはシャードのコピーです。
ノードは、クラスターに属するエラスティック検索の実行中のインスタンスです。
クラスターは、同じクラスター名を共有する1つ以上のノードで構成されます。各クラスターには、クラスターによって自動的に選択され、現在のマスターノードに障害が発生した場合に置き換えることができる単一のマスターノードがあります。
AWS ec2
インスタンスがあり、それぞれにelasticsearchがインストールされています。ここに3つのノードがあることを意味しますか?これらすべてのノードに同じcluster.name: test
プロパティセットがある場合、test
3つのノードを持つクラスター名になりますか?
これを実際のシナリオで説明します。eコマースのウェブサイトを運営しているとしましょう。あなたがより人気になるにつれて、より多くの売り手や製品があなたのウェブサイトに追加されます。インデックスを作成する必要のある製品の数が増え、1つのノードの1つのハードディスクに収めるには大きすぎる製品であることがわかります。ハードディスクに収まる場合でも、1台のマシンですべてのドキュメントを線形検索するのは非常に遅くなります。1つのノード上の1つのインデックスは、elasticsearchが機能する分散クラスター構成を利用しません。
そのため、elasticsearchはインデックス内のドキュメントをクラスター内の複数のノードに分割します。ドキュメントのすべての分割はシャードと呼ばれます。ドキュメントの断片を保持する各ノードには、ドキュメントのサブセットのみが含まれます。100個の製品と5つのシャードがあるとすると、各シャードには20個の製品があります。このデータのシャーディングにより、elasticsearchで低遅延検索が可能になります。検索は複数のノードで並行して行われます。結果は集計されて返されます。ただし、シャードはフォールトトレランスを提供しません。つまり、シャードを含むノードが停止している場合、クラスターのヘルスは黄色になります。一部のデータが利用できないことを意味します。
フォールトトレランスを向上させるために、レプリカが登場します。デフォルトでは、Elastic Searchは各シャードの単一のレプリカを作成します。これらのレプリカは常に、プライマリー断片が存在しない他のノードに作成されます。したがって、システムのフォールトトレランスを実現するには、クラスター内のノードの数を増やす必要がある場合があり、これはインデックスのシャードの数にも依存します。レプリカとシャードに基づいて必要なノード数を計算する一般的な式は、「ノード数=シャード数*(レプリカ数+ 1)」です。標準的な方法では、フォールトトレランスのために少なくとも1つのレプリカを用意します。
シャードの数の設定は静的な操作です。つまり、インデックスを作成するときにそれを指定する必要があります。それ以降の変更には、データの完全な再インデックスが必要であり、時間がかかります。ただし、レプリカの数の設定は動的な操作であり、インデックスの作成後もいつでも実行できます。
以下のコマンドを使用して、インデックスのシャードとレプリカの数を設定できます。
curl -XPUT 'localhost:9200/sampleindex?pretty' -H 'Content-Type: application/json' -d '
{
"settings":{
"number_of_shards":2,
"number_of_replicas":1
}
}'
答えではなく、ElasticSearchのコアコンセプトの別のリファレンスです。@ javannaの答えに対する賛辞として、それらはかなり明確だと思います。
インデックスには、単一ノードのハードウェア制限を超える可能性のある大量のデータが格納される可能性があります。たとえば、1 TBのディスク領域を占める10億のドキュメントの単一のインデックスは、単一のノードのディスクに収まらないか、単一のノードだけからの検索要求を処理するには遅すぎる場合があります。
この問題を解決するために、Elasticsearchは、インデックスをシャードと呼ばれる複数の断片に分割する機能を提供します。インデックスを作成するときに、必要なシャードの数を簡単に定義できます。各シャードは、それ自体が完全に機能する独立した「インデックス」であり、クラスター内の任意のノードでホストできます。
シャーディングは、主に次の2つの理由で重要です。
- コンテンツボリュームを水平方向に分割/スケーリングできます。
- シャード全体(場合によっては複数のノード)に操作を分散して並列化できるため、パフォーマンス/スループットが向上します。
いつでも障害が発生する可能性があるネットワーク/クラウド環境では、何らかの理由でシャード/ノードが何らかの理由でオフラインになったり消えたりした場合に備えて、フェイルオーバーメカニズムを使用することは非常に有用であり、強く推奨されます。この目的のために、Elasticsearchでは、インデックスのシャードの1つ以上のコピーを、レプリカシャード(略してレプリカ)と呼ばれるものに作成できます。
レプリケーションは、主に次の2つの理由で重要です。
- シャード/ノードに障害が発生した場合に高可用性を提供します。このため、レプリカシャードは、コピー元の元の/プライマリシャードと同じノードに割り当てられることはありません。
- 検索はすべてのレプリカで並行して実行できるため、検索ボリューム/スループットをスケールアウトできます。
ElasticSearchでは、最上位でドキュメントをインデックスにインデックス付けします。各インデックスには、データを内部的に分散するシャードの数があり、内部のシャードには、データのコアストレージであるLuceneセグメントが存在します。したがって、インデックスに5つのシャードがある場合は、データがシャード全体に分散されており、シャードに同じデータが存在しないことを意味します。
ES https://www.youtube.com/watch?v=PpX7J-G2PEoのコアを説明するビデオに注意して ください
複数のインデックスまたは複数のシャードの弾性検索、複数のインデックスと1つのインデックス、および異なるデータセットのタイプに関する記事 ?
Elasticsearchは非常にスケーラブルであり、すべてのクレジットはその分散アーキテクチャに提供されます。シャーディングにより可能になりました。それでは、さらに詳しく説明する前に、シンプルで非常に一般的な使用例について考えてみましょう。非常に多くのドキュメントを含むインデックスがあるとしましょう。簡単にするために、そのインデックスのサイズが1 TBであると考えてください(つまり、そのインデックス内のすべてのドキュメントのサイズの合計は1 TBです) )。また、2つのノードがあり、それぞれにデータの保存に512 GBのスペースが利用可能であるとします。明らかなように、インデックス全体を使用可能な2つのノードのいずれにも格納できないため、これらのノード間でインデックスを分散する必要があります。
このような場合、インデックスのサイズが単一ノードのハードウェア制限を超えると、シャーディングが役に立ちます。シャーディングは、インデックスを小さな断片に分割することでこの問題を解決し、これらの断片はシャードと呼ばれます。