[解決済み] Elasticsearchのシャードとレプリカ
質問
Elasticsearchのシャード、レプリカとは何かを理解しようとしているのですが、うまく理解できませんでした。Elasticsearchをダウンロードしてスクリプトを実行すると、私の知る限りでは、シングルノードでクラスタを開始したことになります。このノード(私のPC)には、5つのシャード(?)といくつかのレプリカ(?)
インデックスが5つ重複しているのでしょうか?もしそうなら、なぜですか?私はいくつかの説明が必要です。
解決方法は?
回答や返信が役に立たなかったようなので、実例を挙げて説明します。
elasticsearchをダウンロードして起動すると、elasticsearchノードが作成され、既存のクラスタがあればそこに参加するか、新しいクラスタを作成しようとします。例えば、先ほど起動したノード1つで独自の新しいクラスタを作成したとします。データがないため、インデックスを作成する必要があります。
インデックスを作成する際(最初のドキュメントのインデックスを作成する際にも、インデックスは自動的に作成されます)、いくつのシャードで構成されるかを定義することができます。数を指定しない場合は、デフォルトのシャード数になります。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で、すべてのプライマリシャードが、同じデータを含む別のシャードにコピーされることを意味します。レプリカは、検索性能の向上とフェイルオーバーのために使用されます。レプリカシャードは、関連するプライマリがあるのと同じノードに割り当てられることはありません(バックアップを元のデータと同じディスクに置くようなものです)。
最初のノードに2つのレプリカシャードが割り当てられ、2番目のノードにあるプライマリシャードとまったく同じデータを含むことになるからです。
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4R | | 5R |
|____| |____| |____| |____| |____|
2番目のノードも同様で、1番目のノードにあるプライマリシャードのコピーが格納されます。
____ ____ ____ ____ ____
| 1R | | 2R | | 3R | | 4 | | 5 |
|____| |____| |____| |____| |____|
このように設定すれば、ノードが停止しても、インデックス全体を保持することができます。レプリカシャードは自動的にプライマリとなり、以下のようにノードが故障してもクラスターは正常に動作します。
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
を持っているので
"number_of_replicas":1
というのも、レプリカはプライマリと同じノードに割り当てられることがないため、これ以上割り当てられないからです。そのため、未割り当てのシャードが5つ、レプリカが1つ、そしてクラスタのステータスが
YELLOW
ではなく
GREEN
. データの損失はありませんが、一部のシャードが割り当てられないので、もっと良い方法かもしれません。
離脱していたノードのバックアップが取れ次第、再びクラスタに参加し、レプリカの割り当てが再開されます。2番目のノードにある既存のシャードはロードできますが、ノードの停止中に書き込み操作が行われた可能性が高いため、他のシャードとの同期が必要です。この操作の終了後、クラスタのステータスは次のようになります。
GREEN
.
これで、物事が明確になるといいですね。
関連
-
SpringBootとElasticsearchの連携
-
Elasticsaerch起動エラー。スレッド "main" で例外発生 java.nio.file.AccessDeniedException:
-
Elasticsearch がエラーで実行される:java.lang.ClassCastException: org.joda.time.DateTime は org.elastic にキャストできない。
-
[解決済み] elasticsearchが特定のフィールドのみを返すようにするか?
-
[解決済み] ElasticSearchからデータを削除する
-
[解決済み] Elasticsearchのシャードとレプリカ
-
[解決済み] タイプを削除せずにインデックス/タイプからすべてのドキュメントを削除する
-
[解決済み] Elasticsearch では Content-Type ヘッダ [application/x-www-form-urlencoded] はサポートされていません。
-
[解決済み] ElasticSearchです。未割り当てのシャード、修正方法は?
-
[解決済み] Elasticsearchと標準的なSQLクエリを比較した場合のユースケースは?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SpringBootとElasticsearchの連携
-
Elasticsaerch起動エラー。スレッド "main" で例外発生 java.nio.file.AccessDeniedException:
-
Elasticsearch がエラーで実行される:java.lang.ClassCastException: org.joda.time.DateTime は org.elastic にキャストできない。
-
[解決済み] elasticsearchが特定のフィールドのみを返すようにするか?
-
[解決済み] ElasticSearchからデータを削除する
-
[解決済み] タイプを削除せずにインデックス/タイプからすべてのドキュメントを削除する
-
[解決済み] Elastic search、複数のインデックス vs 1つのインデックス、異なるデータセットに対応するタイプ?
-
[解決済み] Elasticsearch では Content-Type ヘッダ [application/x-www-form-urlencoded] はサポートされていません。
-
[解決済み] Elasticsearch 用語」「マッチフレーズ」「クエリストリング」の違いについて
-
[解決済み] ElasticSearchで単語の一部を検索する方法