2017-07-08 5 views
0

我々は持っている次の設定で9つのノードとElasticsearchクラスタ:アンバランスElasticsearchパフォーマンス

  • Elasticsearchバージョンクラスタ内5.1.2
  • 一つの指標
  • プライマリシャードストレージサイズ:3ギガバイト
  • 数シャード数:5
  • レプリカ数:3
  • ノード1、ノード2、ノード3マスタのみノード
  • ノード4を介してノード-9データ専用ノード
  • マッピング
  • 各ノードラム24 GB、CPUの18個のコアにおける親の子関係ない
  • 無効Swaped増加オープンされたファイル・ディスクリプタ、12ギガバイトJVMヒープメモリ
  • 巣クライアント「静的」アダプタ、すべてのノードのIP一覧

あなたは我々のノード上のリソースの割り当てを持っていますが、ストレステストの下に一つだけのノードは、それが利用可能な検索スレッドですすべてを使用しています見ての通り。私が言及したように、私たちは18コアを持っており、デフォルトの検索スレッドの制限に従って、各ノード内に(3 * 18/2)+1 = 28検索スレッドを持っています。
問題:

  • HTTPリクエストは
  • 他のノードがすべての検索スレッドを使用しないバランスされていません。一つのノードは、それがすべてのスレッドだ使用しており、それは検索キューが大きくなります

我々はテストしているもの: - :

いずれかを使用コーディネータノードは、我々が要求を送信する方法を要求する(変更なし)
のバランスをとること - 検索エンジンにはElasticsearchを使用し、検索サービスにはストレステストを実施するためにJmeterを使用しています。テストサービスは、任意のアイデアが高く評価されElasticsearch Nest Client

Open HTTP Requests and Search Thread Pool

Cpu Usages

Queru Count and Fetch Count

使用していくつかのSearchTemplatesを呼び出すWebサービスです。

答えて

0

はあなたが低式典ElasticClient、すなわちを使用する際に使用されているSingleNodeConnectionPoolを使用しているよう https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/connection-pooling.html

の読み取りが見える持っていますこの場合 var client = new ElasticClient(uri); は、すべての要求は、ここで説明Coordinator nodeとして機能する必要があるノードに送信されます。

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html

検索要求、例えば、2つの段階で実行されます は、クライアント要求を受信するノードによって調整されます( 調整ノード)。

分散フェーズでは、調整ノードは、データを保持するデータノード に要求を転送します。各データノードはローカルで 要求を実行し、その結果を調整ノードに返す。 のギャザーフェーズでは、調整ノードは各データノードの 結果を1つのグローバル結果セットに縮小します。

すべてのノードは暗黙的に調整ノードです。つまり、node.master、node.data、およびnode.ingestの3つがすべてfalseに設定されているノード は、無効にできない調整ノードとしてのみ機能します。 の結果として、このようなノードは、ギャザーフェーズを処理するためには、 を処理するのに十分なメモリとCPUを持つ必要があります。

StaticConnectionPoolまたはSniffingConnectionPoolがクラスタに適しています。

+0

ありがとうReza。しかし私が私の質問で言及したように、 'Nest Client 'の静的なアダプタとすべてのノードIPのリストを使用します。 –

関連する問題