SolrセットアップをElasticsearchに置き換えようとしている最中です。これはまだプロダクションを見たことがない新しいセットアップなので、物事をいじってうまく機能させる余地はたくさんあります。
非常に大量のデータがあります。いくつかのライブデータのインデックスを作成し、7日間保持します(_ttlフィールドを使用)。インデックスにデータを保存していません(および_sourceフィールドを無効にしています)。私のインデックスは約200 billion行で安定すると期待しています。このデータを2〜3個の名前付きインデックスに入れます。これまで数十億行までの検索パフォーマンスは完全に許容範囲ですが、インデックス作成のパフォーマンスが問題です。
ESが内部でシャードを使用する方法について少し混乱しています。 2つのESノードを作成しました。それぞれに個別のデータディレクトリがあり、それぞれに8つのインデックスと1つのレプリカがあります。クラスターのステータスを見ると、ノードごとに1つのシャードと1つのレプリカしかありません。各ノードは内部で複数のインデックスを実行し続けていませんか? (ディスク上のストレージの場所を確認すると、Luceneインデックスが1つしか存在しないことがわかります)。-インデックス設定が構成から適切に取得されなかったため、解決しました。 APIを使用してインデックスを作成し、シャードとレプリカの数を指定すると、期待どおりの結果が得られます。
また、同じESノードの複数のコピーを(同じ構成から)実行してみましたが、すでに実行中のコピーがあることが認識され、独自の作業領域が作成されます。これらのノードの新しいインスタンスも、ディスク上にインデックスが1つしかないようです-各ノードが実際に複数のインデックスを使用しているため、多くのインデックスを持つ単一のノードで、システム全体なので、これは問題ではありません。
インデックス作成のパフォーマンスを最大にするために、いつ追加のElasticsearchノードを起動しますか?それぞれが1つのインデックス1レプリカで実行される多くのノード、または大量のインデックスを持つより少ないノードを持つ必要がありますか?単一のノードがより多くの作業を行うために、構成に欠けているものはありますか?
また、HTTPのみのノードが過負荷になったことを知る指標はありますか?現在、HTTP専用のノードが1つありますが、CPU使用率を除いて、ノードが正常に動作しているかどうかはわかりません。追加のHTTPノードを開始し、さまざまなノードを指すようにインデックス作成ソフトウェアを分割するのはいつですか?
まず、用語を少し明確にしましょう。
インデックスを作成するときに、シャードの数とシャードごとのレプリカの数を指定できます。デフォルトは5つのプライマリー断片と、断片ごとに1つのレプリカです。シャードはクラスター全体に自動的に均等に分散されます。レプリカシャードは、関連するプライマリシャードと同じマシンに割り当てられることはありません。
クラスターのステータスに奇妙な結果が出るので、 get settings API を使用してインデックス設定を確認することをお勧めします。シャードを1つだけ構成したように見えますが、インデックスが複数ある場合はとにかくシャードがさらに表示されます。さらにヘルプが必要な場合は、elasticsearchから取得した出力を投稿できます。
実際に使用するシャードとレプリカの数は、データ、それらへのアクセス方法、および使用可能なノード/サーバーの数によって異なります。クラスタにノードを追加する場合に備えて、シャードを少し配分して再配分することをお勧めします。これは、インデックスを作成するとシャードの数を(現時点では)変更できないためです。それ以外の場合は、データの完全なインデックスの再作成を希望する場合は、常にシャードの数を変更できます。
各シャードは実質的にLuceneインスタンスであるため、シャードを追加するたびにコストが発生します。マシンごとに使用できるシャードの最大数は、実際には使用可能なハードウェアとデータにも依存します。 1つのシャードに100のインデックスがあるか、100のシャードを持つ1つのインデックスがあるかは、両方のケースで100のLuceneインスタンスがあるため、実際には同じです。
もちろん、クエリ時に、100個のシャードで構成される単一のelasticsearchインデックスをクエリする場合、elasticsearchは、適切な結果を得るためにすべてをクエリする必要があります(ドキュメントの特定のルーティングを使用して特定のシャードのみをクエリしない限り)。これにはパフォーマンスコストがかかります。
Cluster Nodes Info API を使用して、クラスターとノードの状態を簡単に確認できます。これにより、ノードがスムーズに実行されているかどうかを知るために必要な多くの有用な情報を確認できます。 。さらに簡単なのは、ニースユーザーインターフェイス(とにかくelasticsearch APIを内部で使用する)を介してこれらの情報をチェックするためのプラグインがいくつかある paramedic および bigdesk 。