首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VM中的Haproxy吞吐量性能

VM中的Haproxy吞吐量性能
EN

Server Fault用户
提问于 2016-09-13 18:06:42
回答 2查看 1.5K关注 0票数 2

我是HAProxy的新手,但我能够实现功能,尽管我没有达到我所期望的吞吐量。

我的设置包括一个5节点存储集群(运行Riak,一个S3风格的存储)和另一个使用roundrobin运行HAProxy的VM。所有VM都在使用VirtualBox,每个VM都在一台专用机器上。HAProxy VM是在Windows 7上,而其他的是Windows 10,这都是在相同的千兆网络上,我测试了HAProxy的1.4和1.5。

我有一个脚本(python + boto),它可以在不保存到磁盘的情况下下载,100 MB文件一遍又一遍地下载,我认为每个文件都应该归结为一个简单的get请求,我在本地运行该脚本3次以增加负载。

如果我将它们都指向HAProxy的ip,我可以获得大约4-500 Mbps的下载,而如果我不使用HAProxy并指向单独的ip,则能够达到HAProxy Mbps。

在做这个测试的时候,HAProxy看起来像是在弄出一个单一的核心,变成了瓶颈。对于一个运行的脚本(我认为它是一个连接),它占用了HAProxy上20%-40%的核心cpu,这看起来很可疑吗?

它听起来像HAProxy可以处理高吞吐量,所以我试图调试可能设置错误的地方,无论是在Ubuntu还是HAProxy配置文件中。我认为使用nbproc 3在配置中的改进是最小的,在这3个进程之间,负载肯定是不平衡的,因为其中一个进程仍然是最大的。

这个设置(如VM)是否有可能出现危险信号呢?我的haproxy配置听起来是罪魁祸首吗?还是我一般的Ubuntu设置?同样值得问的是,对于HAProxy来说,这是一个好用例还是坏用例?

编辑

我还有一些进一步的工作要做,但我目前的感觉是,这是特定于VM的,可能在以太网驱动程序(e1000)中?我能够将HAProxy设置移动到物理机器上(而不是VM),并且在单个核上,它几乎没有在我以前的测试用例中注册任何cpu使用情况.

全配置

代码语言:javascript
复制
global
    #log 127.0.0.1   local0
    #log 127.0.0.1   local1 notice
    maxconn 256000
    spread-checks 5
    daemon 
    nbproc 4 
    cpu-map 1 2
    cpu-map 2 3
    cpu-map 3 4
    cpu-map 4 5

defaults
    option dontlog-normal
    option  redispatch
    option  allbackups
    no option   httpclose
    retries 3
    maxconn 256000
    contimeout  5000
    clitimeout  5000
    srvtimeout  5000

    option forwardfor except 127.0.0.1

frontend riak_cs
    bind          *:8098
    bind          *:8080
    mode          http
    capture       request header Host len 64

    acl d1 dst_port 8098
    acl d2 dst_port 8080

    use_backend   riak_cs_backend_stats if d1
    use_backend   riak_cs_backend if d2



backend riak_cs_backend
    mode http 
    balance roundrobin
    option httpchk GET /riak-cs/ping
    timeout connect 60s
    timeout http-request 60s

    stats enable
    stats uri /haproxy?stats

    server riak1 192.168.80.105:8080 weight 1 maxconn 1024 check inter 5s 
    server riak2 192.168.80.106:8080 weight 1 maxconn 1024 check inter 5s
    server riak3 192.168.80.107:8080 weight 1 maxconn 1024 check inter 5s
    server riak4 192.168.80.108:8080 weight 1 maxconn 1024 check inter 5s
    server riak5 192.168.80.109:8080 weight 1 maxconn 1024 check inter 5s

backend riak_cs_backend_stats 
    mode http
    balance roundrobin
    timeout connect 60s
    timeout http-request 60s

    stats enable 
    stats uri /haproxy?stats

    server riak1 192.168.80.105:8098 weight 1 maxconn 1024 
    server riak2 192.168.80.106:8098 weight 1 maxconn 1024
    server riak3 192.168.80.107:8098 weight 1 maxconn 1024
    server riak4 192.168.80.108:8098 weight 1 maxconn 1024 
    server riak5 192.168.80.109:8098 weight 1 maxconn 1024 
EN

回答 2

Server Fault用户

回答已采纳

发布于 2016-09-14 18:29:48

我不想回答我自己的问题,但我认为我的结论是,我的测试是VM有限的。我不能确切地说明是怎么回事,但是通过我的vm使用HAProxy的cpu使用要高得多,正如我上面提到的,在配置相同的物理硬件上进行测试,甚至删除nbproc部分,我在HAProxy中看到了几乎不明显的CPU负载。

通过VM运行任何产品并不是我的目标,但它们更便于测试(同时等待实际的硬件)和学习这些东西是如何工作的。

票数 1
EN

Server Fault用户

发布于 2016-09-13 22:34:08

由于您没有显示您的配置或正在使用的版本(见我的评论),这有点像“射击到黑暗”。无论如何,您可以尝试将每个HAProxy进程固定在一个特定的核心上,尝试将它们全部最大化,甚至使它们之间的负载达到最大值。

引用文档的话:

在Linux2.6及更高版本的cpu-map <"all"|"odd"|"even"|process_num> <cpu-set>...上,可以将进程绑定到特定的CPU集。这意味着进程将永远不会在其他CPU上运行。cpu-map指令指定进程集的CPU集。第一个参数是要绑定的进程号。此进程必须有一个介于1到32或64之间的数字,这取决于机器的字大小,并且忽略nbproc之上的任何进程ID。可以一次使用all指定所有进程,只有使用odd的奇数或使用even的偶数,就像使用bind-process指令一样。第二个和即将出现的参数是CPU集。每个CPU集要么是0到31之间的唯一数字,要么是由破折号('-')分隔的两个这样的数字的范围。可以指定多个CPU编号或范围,并且进程将被允许绑定到所有进程。显然,可以指定多个cpu-map指令。每个cpu-map指令将在重叠时替换以前的指令。

因此,如果您使用的是三个进程,请测试以下内容:

代码语言:javascript
复制
cpu-map 1 0
cpu-map 2 1
cpu-map 3 2
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/802835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档