Networking

虛擬機中的 Haproxy 吞吐量性能

  • September 14, 2016

我是 HAProxy 的新手,但我能夠讓事情正常執行,儘管我沒有獲得我期望的吞吐量。

我的設置包括一個 5 節點儲存集群(執行 Riak CS,一個 S3 風格的儲存)和另一個執行 HAProxy 的虛擬機roundrobin。所有虛擬機都使用 VirtualBox,每個虛擬機都在專用機器上。HAProxy 虛擬機在 Windows 7 上,而其他虛擬機在 Windows 10 上。這都在同一個千兆網路上,我為 HAProxy 測試了 1.4 和 1.5。

我有一個腳本(python + boto)下載而不保存到磁碟,一遍又一遍地下載100 MB文件,我相信每個都應該歸結為一個簡單的get請求,我在本地執行該腳本3次以增加負載。

如果我將它們全部指向 HAProxy 的 ip,我可以獲得大約 4-500 Mbps 的下載,而如果我不使用 HAProxy 並將每個都指向一個單獨的 ip,我可以獲得高達 900+ Mbps 的下載。

在進行此測試時,看起來 HAProxy 正在最大化單個核心並成為瓶頸。對於執行的單個腳本,我認為是單個連接,它在 HAProxy 上佔用了 20-40% 的核心 cpu,這似乎很可疑?

聽起來HAProxy 可以處理高吞吐量,所以我試圖在 Ubuntu 或 HAProxy 配置文件中調試我可能設置不正確的地方。我在配置中看到最小的改進nbproc 3,負載在 3 個程序之間絕對不平衡,因為一個仍然被最大化。

這個設置有什麼問題嗎,比如虛擬機,作為潛在的危險信號跳出來?我的 haproxy 配置聽起來是罪魁禍首嗎?還是我的一般 Ubuntu 設置?還值得一問,HAProxy 的案例是好是壞?

編輯

我還有一些進一步的探勘工作要做,但我目前的感覺是這是特定於 VM 的,可能在乙太網驅動程序 (e1000) 中?我能夠將 HAProxy 設置移動到物理機(而不是 VM)上,並且在單核上,它幾乎沒有在我之前的測試案例中註冊任何 cpu 使用情況……

完整配置

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 

我討厭回答我自己的問題,但我認為我的結論是我的測試是 VM 受限的。我不能確切地說出是怎麼回事,但是通過我的 vm 使用 HAProxy 的 cpu 使用率要高得多,而且正如我上面提到的,在具有相同配置的物理硬體上進行測試,即使刪除nbproc部分,我看到 aa 幾乎不引人注意HAProxy 中的 CPU 負載。

通過虛擬機執行任何產品並不是我的目標,但它們更便於測試(在等待實際硬體時)並了解這些東西是如何工作的。

引用自:https://serverfault.com/questions/802835