35

SolrセットアップをElasticsearchに置き換えようとしている最中です。これはまだ生産されていない新しいセットアップなので、物事をいじってうまく機能させる余地がたくさんあります。

私は非常に大量のデータを持っています。ライブデータのインデックスを作成し、7日間保持しています(_ttlフィールドを使用)。インデックスにデータを保存しません(そして_sourceフィールドを無効にします)。私のインデックスは約200億行で安定すると予想しています。このデータを2〜3個の名前付きインデックスに入れます。これまでのところ、最大数十億行の検索パフォーマンスは完全に許容できますが、インデックス作成のパフォーマンスが問題になります。

ESが内部でシャードをどのように使用するかについて少し混乱しています。2つのESノードを作成しました。それぞれに個別のデータディレクトリがあり、それぞれに8つのインデックスと1つのレプリカがあります。クラスターのステータスを見ると、ノードごとに1つのシャードと1つのレプリカしか表示されません。各ノードは、複数のインデックスを内部で実行し続けませんか?(ディスク上の保存場所を確認すると、Luceneインデックスが1つしかないことがわかります)。--インデックス設定が構成から正しく取得されなかったため、解決しました。APIを使用してインデックスを作成し、シャードとレプリカの数を指定することで、期待どおりの結果が得られました。

また、同じESノードの複数のコピーを(同じ構成から)実行しようとしましたが、すでにコピーが実行されていることを認識し、独自の作業領域を作成します。これらのノードの新しいインスタンスも、ディスク上に1つのインデックスしかないようです。-各ノードが実際に複数のインデックスを使用しているため、システム全体を調整するには、多くのインデックスを持つ単一のノードで十分であるため、これは問題ではありません。

インデックス作成のパフォーマンスを最大化するために、追加のElasticsearchノードをいつ起動しますか?それぞれが1つのインデックス1レプリカで実行されている多くのノードを使用する必要がありますか、それとも大量のインデックスを使用するノードを少なくする必要がありますか?単一ノードでより多くの作業を行うために、構成に欠けているものはありますか?

また、HTTPのみのノードが過負荷になったことを知るためのメトリックはありますか?現在、HTTP専用のノードが1つありますが、CPU使用率を除けば、正常に機能しているかどうかはわかりません。追加のHTTPノードを開始し、インデックス作成ソフトウェアを分割してさまざまなノードを指すようにするのはいつですか。

4

1 に答える 1

85

最初に用語を少し明確にしましょう。

  • Node : 実行中の Elasticsearch インスタンス (Java プロセス)。通常、すべてのノードは独自のマシンで実行されます。
  • Cluster : 同じクラスター名を持つ 1 つ以上のノード。
  • インデックス: 多かれ少なかれデータベースに似ています。
  • タイプ: 多かれ少なかれデータベース テーブルに似ています。
  • Shard : 効果的には lucene インデックス。すべてのインデックスは、1 つ以上のシャードで構成されています。シャードは、プライマリ シャード (または単にシャード) またはレプリカにすることができます。

インデックスを作成するときに、シャードの数とシャードごとのレプリカの数を指定できます。デフォルトは、5 つのプライマリ シャードと、シャードごとに 1 つのレプリカです。シャードは、クラスター全体に自動的に均等に分散されます。レプリカ シャードが、関連するプライマリ シャードと同じマシンに割り当てられることはありません。

クラスター ステータスに表示される内容は奇妙です。 get settings APIを使用してインデックス設定を確認することをお勧めします。シャードを 1 つだけ構成したように見えますが、インデックスが複数ある場合は、複数のシャードが表示されるはずです。さらにヘルプが必要な場合は、elasticsearch から取得した出力を投稿できます。

実際に使用するシャードとレプリカの数は、データ、それらへのアクセス方法、および利用可能なノード/サーバーの数によって異なります。クラスターにノードを追加する場合に備えてシャードを再配分するために、シャードを少し過剰に割り当てることをお勧めします。これは、インデックスを作成した後でシャードの数を (今のところ) 変更できないためです。それ以外の場合は、データの完全な再インデックスを実行する意思がある場合は、シャードの数をいつでも変更できます。

各シャードは事実上 Lucene インスタンスであるため、追加のシャードごとにコストがかかります。マシンごとに保持できるシャードの最大数は、使用可能なハードウェアとデータによって異なります。1 つのシャードごとに 100 個のインデックスを持つことも、100 個のシャードを持つ 1 つのインデックスを持つことも、どちらの場合も 100 個の lucene インスタンスがあるため、実際には同じであることを知っておくとよいでしょう。

もちろん、クエリ時に、100 個のシャードで構成される単一の elasticsearch インデックスをクエリする場合、elasticsearch は適切な結果を得るためにそれらすべてをクエリする必要があります (ドキュメントに特定のルーティングを使用して特定のシャードのみをクエリする場合を除きます)。これにはパフォーマンスコストがかかります。

Cluster Nodes Info APIを使用して、クラスターとノードの状態を簡単に確認できます。これにより、ノードがスムーズに実行されているかどうかを知るために必要な、多くの有用な情報を確認できます。さらに簡単なことに、素敵なユーザー インターフェイス (いずれにせよ内部的に Elasticsearch API を使用します) を介してこれらの情報をチェックするためのプラグインがいくつかあります: paramedicbigdesk

于 2012-09-13T20:16:31.603 に答える