2017-03-07 58 views
1

我想配置一个nginx作为负载均衡器在弹性搜索群集(版本1.3.7)之前。nginx因为elasticsearch负载均衡性能低

我正在从3个基准服务器到集群中的3个elasticsearch节点进行测试。 使用nginx作为LoadBalancer我的性能下降了大约50%。

我能够在没有nginx的情况下在300秒内处理28K个请求,但是在300秒内只有13k个请求。 服务器是虚拟机,所以不应该是一个网络问题,至少,物理问题。 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

如果缓冲是应用程序遇到缓慢的原因,我不会感到惊讶。需要考虑调整的两个配置选项:[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