虛擬機中的 Haproxy 吞吐量性能
我是 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 負載。通過虛擬機執行任何產品並不是我的目標,但它們更便於測試(在等待實際硬體時)並了解這些東西是如何工作的。