1. 程式人生 > >Linux伺服器叢集負載均衡解說

Linux伺服器叢集負載均衡解說

有些公司是做宣傳網站或資訊類網站的,伺服器均置於國內,他們對叢集這塊瞭解的並不深,而且要求也很簡單,只要求1+2架構。在初期我使用的是Nginx作為負載均衡器,後期發現HAProxy更加穩定,而且它自帶強大的監控頁面功能,所以我全部換成了HAproxy作為最前端的負載均衡器了;由於我越來越喜歡它了,在這裡請允許我單獨介紹其優點。

HAProxy是一款提供高可用性、負載均衡以及基於TCP(第四層)和HTTP(第七層)應用的代理軟體,HAProxy是完全免費的、藉助HAProxy可以快速並且可靠的提供基於TCP和HTTP應用的代理解決方案。

HAProxy最主要的特點是效能優越,HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。 HAProxy完全可以支援數以萬計的併發連線。並且HAProxy的執行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web伺服器不被暴露到網路上(即通過防火牆80埠對映的方法)。

更重要的是,HAProxy也是一款優秀的負載均衡軟體,其優點如:

(1)免費開源,穩定性也是非常好,這個可通過我做的一些小專案可以看出來,單Haproxy也跑得不錯,穩定性可以與硬體級的F5相媲美;

(2)根據官方文件,HAProxy可以跑滿10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom's 10GbE NICs (Myri-10G PCI-Express),這個數值作為軟體級負載均衡器是相當驚人的;

(3)HAProxy 支援連線拒絕 : 因為維護一個連線的開啟的開銷是很低的,有時我們很需要限制攻擊蠕蟲(attack bots),也就是說限制它們的連線開啟從而限制它們的危害。 這個已經為一個陷於小型DDoS攻擊的網站開發了而且已經拯救了很多站點,這個優點也是其它負載均衡器沒有的。

(4)HAProxy 支援全透明代理(已具備硬體防火牆的典型特點): 可以用客戶端IP地址或者任何其他地址來連線後端伺服器. 這個特性僅在Linux 2.4/2.6核心打了cttproxy補丁後才可以使用. 這個特性也使得為某特殊伺服器處理部分流量同時又不修改伺服器的地址成為可能。

(5)HAProxy現多於線上的Mysql叢集環境,我們常用於它作為MySQL(讀)負載均衡;

(6)自帶強大的監控伺服器狀態的頁面,實際環境中我們結合Nagios進行郵件或簡訊報警,這個也是我非常喜歡它的原因之一;

(7)HAProxy支援虛擬主機,許多朋友說它不支援虛擬主機是錯誤的,通過測試我們知道,HAProxy是支援虛擬主機的。

另外,提到Nginx作負載均衡器,這個由於我自己也比較喜歡它的強大的正則處理功能和其強悍的抗併發能力,所以我在自己的部落格及51cto.com上推行它的Nginx+Keepalived,併成功用此架構幫許多客戶實施他們的網站,Nginx對網路的依賴性非常小,理論上只要ping得通它就就能實現它的負載均衡能力,這一點跟LVS不一樣。我去年在一家公司準備實施LVS+Keepalived時,發現它的網路環境太複雜了,每臺機器都是7、8靜態路由,網路中還有二個閘道器,LVS實現不了轉發功能;最後還是換成了Nginx+Keepalived。

現在我覺得Nginx作為最前端的負載均衡並不是一個非常理想的選擇,一個大型的網站或系統的話,可以存在多級代理,比如我們最前端可以用F5或LVS來作為網站或系統的入口,讓它們來頂外部的高併發流量,而Nginx由於其強大的正則處理能力,可以作為中層代理,一來可以作為F5/LVS的補充,節約大量成本,這種做法也是張宴推薦的,拓樸如下圖:

大家可以看一下基於架構的好處有:

一、不需要擔心單Nginx負載均衡器crash的問題,隨便怎麼掛都可以;

二、Nginx作為F5的補充,利用其強大的upstream模組和正則,可以輕鬆實現動靜分離;

三、壓縮可以通過nginx做,這樣,後臺應用伺服器不管是apache、resin、lighttpd甚至iis或其他古怪伺服器,都不用考慮壓縮的功能問題。

四、方便的運維管理,在各種情況下可以靈活制訂方案;

五、即使沒有squid群組,Nginx現在可以做為優秀的反向代理加速軟體了。

我現在做的專案網站,原理跟上面類似,只不過用的是LVS代替了F5,這個更節約資金了,拓樸圖如下:

現在的負載均衡均衡技術是多樣化的,我們應該根據其特點做到因地制宜,取長補短,最大限度的發揮它們的優點,將我們的網站或系統架構調優到一個新的高度。