三大主流軟件負載均衡器對比(LVS VS Nginx VS Haproxy)
LVS:
1、抗負載能力強。抗負載能力強、性能高,能達到F5硬件的60%;對內存和cpu資源消耗比較低
2、工作在網絡4層,通過vrrp協議轉發(僅作分發之用),具體的流量由linux內核處理,因此沒有流量的產生
3、穩定性、可靠性好,自身有完美的熱備方案;(如:LVS+Keepalived)
4、應用范圍比較廣,可以對所有應用做負載均衡;
5、不支持正則處理,不能做動靜分離。
6、支持負載均衡算法:rr(輪循)、wrr(帶權輪循)、lc(最小連接)、wlc(權重最小連接)
7、配置 復雜,對網絡依賴比較大,穩定性很高。
Ngnix:
1、工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構;
2、Nginx對網絡的依賴比較小,理論上能ping通就就能進行負載功能;
3、Nginx安裝和配置比較簡單,測試起來比較方便;
4、也可以承擔高的負載壓力且穩定,一般能支撐超過1萬次的并發;
5、對后端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測。
6、Nginx對請求的異步處理可以幫助節點服務器減輕負載;
7、Nginx僅能支持http、https和Email協議,這樣就在適用范圍較小。
8、不支持Session的直接保持,但能通過ip_hash來解決。、對Big request header的支持不是很好,
9、支持負載均衡算法:Round-robin(輪循)、Weight-round-robin(帶權輪循)、Ip-hash(Ip哈希)
10、Nginx還能做Web服務器即Cache功能。
HAProxy的特點是:
1、支持兩種代理模式:TCP(四層)和HTTP(七層),支持虛擬主機;
2、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作
3、支持url檢測后端的服務器出問題的檢測會有很好的幫助。
4、更多的負載均衡策略比如:動態加權輪循(Dynamic Round Robin),加權源地址哈希(Weighted Source Hash),
加權URL哈希和加權參數哈希(Weighted Parameter Hash)已經實現
5、單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度。
6、HAProxy可以對Mysql進行負載均衡,對后端的DB節點進行檢測和負載均衡。
9、支持負載均衡算法:Round-robin(輪循)、Weight-round-robin(帶權輪循)、source(原地址保持)、
RI(請求URL)、rdp-cookie(根據cookie)
10、不能做Web服務器即Cache。
三大主流軟件負載均衡器適用業務場景:
1、網站建設初期,可以選用Nigix/HAproxy作為反向代理負載均衡(或者流量不大都可以不選用負載均衡),因為其配置簡單,性能也能滿足一般的業務場景。如果考慮到負載均衡器是有單點問題,可以采用Nginx+Keepalived/HAproxy+Keepalived避免負載均衡器自身的單點問題。
2、網站并發達到一定程度之后,為了提高穩定性和轉發效率,可以使用LVS、畢竟LVS比Nginx/HAproxy要更穩定,轉發效率也更高。不過維護LVS對維護人員的要求也會更高,投入成本也更大。
注:Niginx與Haproxy比較:Niginx支持七層、用戶量最大,穩定性比較可靠。Haproxy支持四層和七層,支持更多的負載均衡算法,支持session保存等。具體選型看使用場景,目前來說Haproxy由于彌補了一些Niginx的缺點用戶量也不斷在提升。
下述將選擇Haproxy作為負載均衡器進行安裝配置,本次使用環境:
環境centos7.3
Haproxy 1.7.5
1.下載
wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.5.tar.gz
2.解壓
tar -zxvf haproxy-1.7.5.tar.gz
cd haproxy-1.7.5
3.安裝
make TARGET=linux2628 ARCH=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
參數說明
TARGET=linux26 #內核版本,使用uname -r查看內核,如:2.6.18-371.el5,此時該參數就為linux26;kernel 大于2.6.28的
用:TARGET=linux2628
ARCH=x86_64 #系統位數
PREFIX=/usr/local/haprpxy #/usr/local/haprpxy為haprpxy安裝路徑
4.配置
安裝完成后需要自己手動創建配置文件
cd /usr/local/haproxy #進入haproxy安裝目錄
touche haproxy.cfg #創建配置文件
vi haproxy.cfg #編輯配置文件
以下是配置文件具體內容:
global
log 127.0.0.1 local1
maxconn 65000 #最大連接數
# chroot /usr/local/haproxy #安裝目錄
# uid haproxy #用戶haproxy
# gid haproxy #組haproxy
daemon #守護進程運行
nbproc 1 #進程數量
# pidfile /usr/local/haproxy/logs/haproxy.pid #haproxy pid
defaults
log global
mode http #7層#默認的模式mode {tcp|http|health},tcp是4層,http是7層,health只會返回OK
option httplog #http 日志格式
option httpclose #主動關閉http通道,HA-Proxy不支持keep-alive模式
option redispatch #serverId對應的服務器掛掉后,強制定向到其他健康的服務器
option forwardfor except 127.0.0.1/8 #后端服務器需要獲得客戶端的真實IP,將從Http Header中獲得客戶端IP
option dontlognull #來防止記錄 Alteo(4層負載均衡)發出的健康檢測,如果一個 session 交互沒有
#數據,這個 session就不會被記錄
retries 3
maxconn 50000 #最大連接數
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
#errorfile 502 /usr/local/haproxy/html/maintain.html
#errorfile 503 /usr/local/haproxy/html/maintain.html
#errorfile 504 /usr/local/haproxy/html/maintain.html
frontend main
bind *:80 #監聽地址
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend my_webserver #定義一個名為my_app前端部分。此處將對于的請求轉發給后端
backend static #使用了靜態動態分離(如果url_path匹配 .jpg .gif .png .css .js靜態文件則訪問此后端)
balance roundrobin #負載均衡算法(#banlance roundrobin 輪詢)
server static 127.0.0.1:80 check #靜態文件部署在本機(也可以部署在其他機器或者squid緩存服務器
backend my_webserver
mode http
option forwardfor
balance roundrobin
cookie SERVERID
option httpchk HEAD /index.html
server web01 192.168.131.42:80 cookie web01 check inter 2000 rise 3 fall 3 weight 3
server web02 192.168.131.46:80 cookie web02 check inter 2000 rise 3 fall 3 weight 3
5.啟動
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg