常見的Web集群調度器:
- 目前常見的Web集群調度器分為軟件和硬件
- 軟件通常使用開源的LVS、Haproxy、Nginx
LVS性能最好,但是搭建相對復雜;Nginx的upstream模塊支持集群功能,但是對集群節點健康檢查功能不強,高並發性能沒有Haproxy好
- 硬件一般使用比較多的是F5,也有很多人使用國內的一些產品,比如:梭子魚、綠盟等
Haproxy應用分析:
LVS在企業應用中抗負載能力很強,但是存在不足
- LVS不支持正則處理,不能實現動靜分離
- 對於大型網站,LVS的實施配置復雜,維護成本相對較高
Haproxy是一款可提供高可用、負載均衡、及基於TCP和HTTP應用的代理的軟件
- 適用於負載大的Web站點
- 運行在硬件上可支持數以萬計的並發連接的連接請求
LVS、Nginx和Haproxy的對比
Nginx的優點:
- 工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構。Nginx正則規則比HAProxy更為強大和靈活。
- Nginx對網絡穩定性的依賴非常小,理論上能ping通就就能進行負載功能,LVS對網絡穩定性依賴比較大,穩定要求相對更高。
- Nginx安裝和配置、測試比較簡單、方便,有清晰的日志用於排查和管理,LVS的配置、測試就要花比較長的時間了。
- 可以承擔高負載壓力且穩定,一般能支撐幾萬次的並發量,負載度比LVS相對小些。
- Nginx可以通過端口檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等。
- Nginx不僅僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。
- Nginx作為Web反向加速緩存越來越成熟了,速度比傳統的Squid服務器更快,很多場景下都將其作為反向代理加速器。
- Nginx作為靜態網頁和圖片服務器,這方面的性能非常優秀,同時第三方模塊也很多。
Nginx的缺點:
- Nginx僅能支持http、https和Email協議,這樣就在適用范圍上面小些。
- 對后端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測。
- 不支持Session的直接保持,需要通過ip_hash和cookie的引導來解決。
LVS的優點:
- 抗負載能力強、是工作在網絡4層之上僅作分發之用,沒有流量的產生。因此負載均衡軟件里的性能最強的,對內存和cpu資源消耗比較低。
- LVS工作穩定,因為其本身抗負載能力很強,自身有完整的雙機熱備方案。
- 無流量,LVS只分發請求,而流量並不從它本身出去,這點保證了均衡器IO的性能不會收到大流量的影響。
- 應用范圍較廣,因為LVS工作在4層,所以它幾乎可對所有應用做負載均衡,包括http、數據庫等。
LVS的缺點:
- 軟件本身不支持正則表達式處理,不能做動靜分離。相對來說,Nginx/HAProxy+Keepalived則具有明顯的優勢。
- 如果是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較復雜了。相對來說,Nginx/HAProxy+Keepalived就簡單多了。
HAProxy的優點:
- HAProxy也是支持虛擬主機的。
- HAProxy支持8種負載均衡策略。
- HAProxy的優點能夠補充Nginx的一些缺點,比如支持Session的保持,Cookie的引導,同時支持通過獲取指定的url來檢測后端服務器的狀態。
- HAProxy跟LVS類似,本身就只是一款負載均衡軟件,單純從效率上來講HAProxy會比Nginx有更出色的負載均衡速度,在並發處理上也是優於Nginx的。
- HAProxy支持TCP協議的負載均衡轉發。
Haproxy負載均衡策略非常多,常見的有8種
- roundrobin:表示簡單的輪詢
- static-rr:表示根據權重
- leastconn:表示最少連接先處理
- source:表示根軍請求源IP
- uri:表示根據請求的URL,做cdn需使用
- url_param:表示根據請求的URL參數
- hdr(name):表示根據HTTP請求頭來鎖定每一次HTTP請求
- rdp-cookie(name):表示根據cookie(name)來鎖定並哈希每一次TCP請求
總結:
- LVS基於Linux操作系統實現軟負載均衡,而Haproxy和Nginx是基於第三方應用實現的軟負載均衡
- LVS是可實現4層的IP負載均衡技術,無法實現基於目錄、URL的轉發。而Haproxy和Nginx都可以實現4層和7層技術,Haproxy可提供TCP和HTTP應用的負載均衡綜合解決方案
- LVS因為工作在ISO模型的第四層,其狀態監測功能單一,而Haproxy在狀態監測方面功能更豐富、強大,可支持端口、URL、腳本等多種狀態檢測方式
- Haproxy功能強大,但整體性能低於4層模式的LVS負載均衡
- Nginx主要用於Web服務器或緩存服務器。Nginx的upstream模塊雖然也支持集群功能,但是對集群節點健康檢查功能不強,性能沒有Haproxy好
Haproxy搭建Web集群
1、關閉防火牆,傳軟件包
2、編譯安裝Haproxy
3、Haproxy服務器設置
4、添加haproxy系統服務
節點服務器部署
日志定義
默認哈proxy的日志是輸出到系統的syslog中,查看起來不是非常方便,為了更好的管理haproxy的日志,我么在生產環境中一般單獨定義出來。需要haproxy的info及notice日志分別記錄到不同的日志文件中
需要修改rsyslog配置,為了便於管理。將haproxy相關的配置獨立定義到haproxy.conf,並放到/etc/rsyslog.d/下,rsyslog啟動時會自動加載此目錄下的所有配置文件