from:http://yuhongchun.blog.51cto.com/1604432/697466
現在網站發展的趨勢對網路負載平衡的使用是隨著網站規模的提升根據不同的階段來使用不同的技術:
一種是通過硬體來進行進行,常見的硬體有比較昂貴的NetScaler、F5、Radware和Array等商用的負載平衡器,它的優點就是有專業的維護團隊來對這些服務進行維護、缺點就是花銷太大,所以對於規模較小的網路服務來說暫時還沒有需要使用;另外一種就是類似於LVS/HAProxy、Nginx的基於Linux的開源免費的負載平衡軟體策略,這些都是通過軟體層級來實現,所以費用非常低廉,所以我個也比較推薦大家採用第二種方案來實施自己網站的負載平衡需求。
近期朋友劉鑫(紫雨荷雪)的項目成功上線了,PV達到了億級/日的訪問量,最前端用的是HAProxy+Keepalived雙機作的負載平衡器/反向 Proxy,整個網站非常穩定;這讓我更堅定了以前跟老男孩前輩聊的關於網站架構比較合理設計的架構方案:即Nginx/HAProxy+Keepalived作Web最前端的負載平衡器,後端的MySQL資料庫結構描述採用一主多從,讀寫分離的方式,採用LVS+Keepalived的方式。
在這裡我也有一點要跟大家申明下:很多朋友擔心軟體層級的負載平衡在高並發流量衝擊下的穩定情況,事實是我們通過成功上線的許多網站發現,它們的穩定性也是非常好的,宕機的可能性微乎其微,所以我現在做的項目,基本上沒考慮服務等級的高可用了。相信大家對這些軟體層級的負載平衡軟體都已經有了很深的的認識,下面我就它們的特點和適用場合分別說明下。
LVS:使用叢集技術和Linux作業系統實現一個高效能、高可用的伺服器,它具有很好的延展性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感謝章文嵩博士為我們提供如此強大實用的開源軟體。
LVS的特點是:
1、抗負載能力強、是工作在網路4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載平衡軟體裡的效能最強的;
2、配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的幾率;
3、工作穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived;
4、無流量,保證了均衡器IO的效能不會收到大流量的影響;
5、應用範圍比較廣,可以對所有應用做負載平衡;
6、軟體本身不支援正則處理,不能做動靜分離,這個就比較遺憾了;其實現在許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所在。
7、如果是網站應用程式比較龐大的話,實施LVS/DR+Keepalived起來就比較複雜了,特別後面有Windows Server應用的機器的話,如果實施及配置還有維護過程就比較複雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。
Nginx的特點是:
1、工作在網路的7層之上,可以針對http應用做一些分流的策略,比如針對網域名稱、目錄結構,它的正則規則比HAProxy更為強大和靈活,這也是許多朋友喜歡它的原因之一;
2、Nginx對網路的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢所在;
3、Nginx安裝和配置比較簡單,測試起來比較方便;
4、也可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的並發量;
5、Nginx可以通過連接埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態代碼、逾時等等,並且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支援url來檢測;
6、Nginx僅能支援http和Email,這樣就在適用範圍上面小很多,這個它的弱勢;
7、Nginx不僅僅是一款優秀的負載平衡器/反向 Proxy軟體,它同時也是功能強大的Web應用伺服器。LNMP現在也是非常流行的web架構,大有和以前最流行的LAMP架構分庭抗爭之勢,在高流量的環境中也有很好的效果。
8、Nginx現在作為Web反向加速緩衝越來越成熟了,很多朋友都已在生產環境下投入生產了,而且反映效果不錯,速度比傳統的Squid伺服器更快,有興趣的朋友可以考慮用其作為反向 Proxy加速器。
HAProxy的特點是:
1、HAProxy是支援虛擬機器主機的,以前有朋友說這個不支援虛擬機器主機,我這裡特此更正一下。
2、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作
3、支援url檢測後端的伺服器出問題的檢測會有很好的協助。
4、它跟LVS一樣,本身僅僅就只是一款負載平衡軟體;單純從效率上來講HAProxy更會比Nginx有更出色的負載平衡速度,在並發處理上也是優於Nginx的。
5、HAProxy可以對Mysql讀進行負載平衡,對後端的MySQL節點進行檢測和負載平衡,不過在後端的MySQL slaves數量超過10台時效能不如LVS,所以我向大家推薦LVS+Keepalived。
6、HAProxy的演算法現在也越來越多了,具體有如下8種:
①roundrobin,表示簡單的輪詢,這個不多說,這個是負載平衡基本都具備的;
②static-rr,表示根據權重,建議關注;
③leastconn,表示最少串連者先處理,建議關注;
④source,表示根據請求源IP,這個跟Nginx的IP_hash機制類似,我們用其作為解決session問題的一種方法,建議關注;
⑤ri,表示根據請求的URI;
⑥rl_param,表示根據請求的URl參數'balance url_param' requires an URL parameter name;
⑦hdr(name),表示根據HTTP要求標頭來鎖定每一次HTTP請求;
⑧rdp-cookie(name),表示根據據cookie(name)來鎖定並雜湊每一次TCP請求。