2017-03-07 2 views
1

Elgin Search Cluster(バージョン1.3.7)の前で、Load Balancerとしてnginxを設定しようとしています。elasticsearch loadbalancerとしてのnginxのパフォーマンスが低い

私は3つのベンチマークサーバーからクラスタ内の3つのelasticsearchノードまでテストしています。 nginxをLoadBalancerとして使用するとパフォーマンスが約50%低下します。

nginxなしで300秒で28Kリクエストを処理できますが、それには300秒で13kしかありません。 サーバーはVMであるため、少なくともネットワークの問題ではありません。 NginxサーバーのCPU負荷が高くないか、リソースの制限がありません。

コンフィグは非常に単純です:

user www-data; 
worker_processes auto; 
pid /run/nginx.pid; 
include /etc/nginx/modules-enabled/*.conf; 

worker_rlimit_nofile 4096; 

events { 
     worker_connections 1024; 
} 

とESのための特定:

server { 
    listen  9100; 
    server_name elasticsearch.site.com; 
    location/{ 
     proxy_pass http://elasticsearch; 
     proxy_http_version 1.1; 
     proxy_set_header Connection ""; 
     proxy_set_header Proxy-Connection "Keep-Alive"; 
    } 
    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log error; 
} 

upstream elasticsearch { 
    server elasticsearch1:9200; 
    server elasticsearch2:9200; 
    server elasticsearch3:9200; 
    keepalive 15; 
} 

私はnginxの毎秒より多くの要求を配信することはできません理由を理解するためにどのような方法があるかどうか知りたい、またはこのケースをデバッグする方法があれば。 タイムアウトを理解するか、接続を維持するか、nginxによって処理される他のリソースがあれば大丈夫です。

+0

おそらくhaproxyを試してみませんか?とにかく何らかの負荷分散が必要な場合 – Sobrique

+0

バッファリングがアプリケーションの遭遇の遅さの理由である場合、私は驚くことはありません。チューニングを考慮する2つの構成オプション:[proxy_buffering](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering)および[proxy_request_buffering](http://nginx.org/en/docs/http/ ngx_http_proxy_module.html#proxy_request_buffering)。 – Anatoly

答えて

1

ロードバランサは不要です。ESはすでにその機能を提供しています。あなたは間違っている可能性があり、不要なネットワークホップを追加する別のコンポーネントを追加するだけです。 dnsラウンドロビンに行ってください。

ESは、データを(デフォルトでは5個のシャードに)分割し、インスタンス間で均等に分散しようとします。環境に応じてシャードとレプリカを調整します。

+1

私はプロキシサーバーをESクライアントノードとして使用しようとしましたが、パフォーマンスはわずかに改善されていますが、理想的な状況からはまだ遠い300秒で15Kです。 LBを追加すると、コードからプラットフォームインフラストラクチャへの分離が提供されます。クラスタを移動したり、コードを変更することなくESノードを変更したりするのが簡単になります。エンドポイントは常に同じです。 – bvcelari

関連する問題