Haproxy 1.5性能问题

时间:2015-07-22 21:24:34

标签: performance haproxy

我需要提高在Ubuntu 14.04实例中作为负载均衡器运行的haproxy 1.5的性能。我在许多网站上都有类似分析的代码,每次浏览时,客户端会询问我们的2-5种不同的文字。有一天,我们在负载均衡器上每秒收到超过1k个请求,它开始运行起来非常慢。它以每秒1000次的速度达到活动会话限制2000。在配置中,我们使用选项http-keep-alive 100来保持连接打开100毫秒,直到它关闭。我们该怎样改进这个?这个用例的最佳配置是什么?我可能会在这里丢失很多细节,请问他们是否缺少信息。

修改

以下是一些细节:

我在c3.xlarge虚拟机中运行AWS ubuntu 14.04服务器。我们使用haproxy 1.5来负载平衡多个应用实例之间的Web流量。 (每个应用程序都有自己的haproxy来在自己的应用程序实例之间进行负载平衡 - 每个核心部署一个)。 服务器只有haproxy,没有安装其他软件。

根据haproxy stat页面的瓶颈是前端负载均衡器,当时它的会话速率为258,当前会话为2000(最大为2000),所有应用程序的会话速率为96,0 / 1作为当前会话。我会张贴图片,但由于我的声望点,我不能那样做。

这是当时的配置:

global
        maxconn 18000
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
        ssl-default-bind-options no-sslv3

defaults
        mode    http
        retries 2
        option  redispatch
        timeout connect 5s
        timeout client  15s
        timeout server  15s
        timeout http-keep-alive 1

frontend public
        log 127.0.0.1   local0  notice
        option dontlognull
        option httplog
        bind *:80
        bind *:443 ssl crt /etc/ssl/private/server.pem
        default_backend rely_apps
frontend private
        bind 127.0.0.1:80
        stats enable
        stats auth  xxx:xxx
        stats admin if LOCALHOST
        stats uri /haproxy?stats
        stats show-legends
        stats realm Haproxy\ Statistics

backend rely_apps
        option forwardfor
        balance roundrobin
        option  httpchk
        server  app1    10.0.0.1:80 check
        server  app2    10.0.0.2:80 check
        server  app3    10.0.0.3:80 check

连接非常高,似乎正在关闭它们(或以非常低的速率关闭)。 CPU和内存使用率非常低。

现在我们更改了以下配置的配置,并且它没有问题:

global
        maxconn 64000
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        tune.bufsize    16384
        tune.maxrewrite 1024
        nbproc  4

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
        ssl-default-bind-options no-sslv3

defaults
        mode    http
        retries 2
        option  redispatch
        option forceclose
        option http-pretend-keepalive
        timeout connect 5s
        timeout client  15s
        timeout server  15s
        timeout http-keep-alive 1s

frontend public
        log 127.0.0.1   local0  notice
        option dontlognull
        option httplog
        maxconn 18000
        bind *:80
        bind *:443 ssl crt /etc/ssl/private/server.pem
        default_backend rely_apps
#frontend private
#       bind 127.0.0.1:80
        stats enable
        stats auth  xxx:xxx
        stats admin if LOCALHOST
        stats uri /haproxy?stats
        stats show-legends
        stats realm Haproxy\ Statistics

backend rely_apps
        option forwardfor
        balance leastconn
        option  httpchk
        server  app1    10.0.0.1:80 check maxconn 100
        server  app2    10.0.0.2:80 check maxconn 100
        server  app3    10.0.0.3:80 check maxconn 100

但是返回时所有连接都被关闭(我们的会话和请求速率相同)。 这也不好,因为我们必须为每个客户端请求打开一个新连接(我们每个客户端有3/4个请求)。 如何在不达到最大连接限制的情况下实现良好的保持活力(如100毫秒,我认为可以工作)?

感谢。

1 个答案:

答案 0 :(得分:1)

你提供的数字非常低。

请提供有关您的架构,服务器类型,运行的第三方软件(如iptables)的更多详细信息,并分享您的配置。

巴普蒂斯特