標籤:blog http io os ar 使用 for sp 資料
首先我們來瞭解負載平衡的概念:英文名稱為Load Balance,其意思就是將負載(工作任務)進行平衡、分攤到多個操作單元上進行執行,例如Web伺服器、FTP伺服器、企業關鍵應用伺服器和其它關鍵任務伺服器等,從而共同完成工作任務。
其實負載平衡也是一個很龐大的知識體系。我也不是學習得很完善,這裡就是把我自己學過的自我總結一下。分為一下幾個方面:
(1)基於DNS的負載平衡
學過網路的都知道,DNS的作用主要是將網域名稱映射為IP地址。我們可以採取多個A記錄的方式來讓別人訪問這個網站是解析到一個IP地址來實現RR調度策略。當然對於DNS來說,比較重要的也是DNS緩衝,可以讓請求直接到對應的伺服器上面而不需要解析。
也可以通過搭建BIND9 DNS伺服器來瞭解DNS。
基於DNS的負載平衡的優勢:1.簡便 2.配置簡單 3.易於調試(dig,ping,nslookup) 4.容易擴充
也有對應相關的問題:1.粘性,因為HTTP是一種無狀態協議,無法將會話星系從一個請求保留到下一個請求。為瞭解決這個問題,你可以和每個請求一起,發送一個唯一的標識。收集你跟網站當前互動的資訊,但這種做法並不完全保證你一定能回到有之前串連資訊的那台伺服器上。
2.處理方式,當所有高強度請求可能都跑到一台伺服器上的時候就會出現很大的問題,得加以避免。
3.容錯性,當有一台web伺服器宕機了,基於DNS的負載平衡器是無法判別的。
(2)內容分發CDN
它採取了分布式網路緩衝結構(即國際上流行的web cache技術),通過在現有的Internet中增加一層新的網路架構,將網站的內容發布到最接近使用者的cache伺服器內,通過DNS負載平衡的技術,判斷使用者來源就近訪問cache伺服器取得所需的內容,解決Internet網路擁塞狀況,提高使用者訪問網站的響應速度,如同提供了多個分布在各地的加速器,以達到快速、可冗餘的為多個網站加速的目的。
CDN服務最初用於確保快速可靠地分發靜態內容,這些內容可以緩衝,最適合在網速龐大的網路中儲存和分發,該網路在幾十多個國家的十幾個網路中的覆蓋CDN網路伺服器。
由於動態內容必須通過互連網來傳輸,因此要提供快速的網路體驗,以滿足當今使用者的要求,只能通過對互連網流量的獨特視角來達到。必須使用先進技術來瞭解通過互連網的最佳路由,充分利用這些最佳路由,加速通過互連網協議的資料通訊,以改善使用者的網路體驗。
這個的實現一般是採用Proxy 伺服器來進行,下面就進行描述。
(3)使用Nginx(Proxy 伺服器)進行負載平衡
使用Proxy 伺服器轉寄請求,在這一層面來說,Nginx是比較優秀的,因為它可以自己處理一些靜態頁面緩衝等功能,而且配置還是比較簡單,這裡給出一個例子nginx的簡單配置
http
{
#設定負載平衡列表
upstream www.zyan.cc {
server 192.168.1.2:80;
server 192.168.1.3:80;
server 192.168.1.4:80;
server 192.168.1.5:80;
}
}
server{
#對 / 所有做負載平衡 (本機nginx採用完全轉寄,所有請求都轉寄到後端的tomcat叢集)
location / {
root /var/www ;
index index.jsp index.htm index.html;
proxy_redirect off;
#保留使用者真實資訊
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
}
}
Nginx主要有以下幾種負載平衡演算法:
靜態負載平衡演算法包括:輪詢,比率,優先權
動態負載平衡演算法包括: 最少串連數,最快響應速度,觀察方法,預測法,動態效能分配,動態伺服器補充,服務品質,服務類型,規則模式。
靜態負載平衡演算法
◆輪詢(Round Robin):順序迴圈將請求一次順序迴圈地串連每個伺服器。當其中某個伺服器發生第二到第7 層的故障,BIG-IP 就把其從順序迴圈隊列中拿出,不參加下一次的輪詢,直到其恢複正常。
◆比率(Ratio):給每個伺服器分配一個加權值為比例,根椐這個比例,把使用者的請求分配到每個伺服器。當其中某個伺服器發生第二到第7 層的故障,BIG-IP 就把其從伺服器隊列中拿出,不參加下一次的使用者請求的分配, 直到其恢複正常。
◆優先權(Priority):給所有伺服器分組,給每個組定義優先權,BIG-IP 使用者的請求,分配給優先順序最高的伺服器組(在同一組內,採用輪詢或比率演算法,分配使用者的請求);當最高優先順序中所有伺服器出現故障,BIG-IP 才將請求送給次優先順序的伺服器組。這種方式,實際為使用者提供一種熱備份的方式。
動態負載平衡演算法
◆最少的串連方式(Least Connection):傳遞新的串連給那些進行最少串連處理的伺服器。當其中某個伺服器發生第二到第7 層的故障,BIG-IP 就把其從伺服器隊列中拿出,不參加下一次的使用者請求的分配, 直到其恢複正常。
◆最快模式(Fastest):傳遞串連給那些響應最快的伺服器。當其中某個伺服器發生第二到第7 層的故障,BIG-IP 就把其從伺服器隊列中拿出,不參加下一次的使用者請求的分配,直到其恢複正常。
◆觀察模式(Observed):串連數目和回應時間以這兩項的最佳平衡為依據為新的請求選擇伺服器。當其中某個伺服器發生第二到第7 層的故障,BIG-IP就把其從伺服器隊列中拿出,不參加下一次的使用者請求的分配,直到其恢複正常。
◆預測模式(Predictive):BIG-IP利用收集到的伺服器當前的效能指標,進行預測性分析,選擇一台伺服器在下一個時間片內,其效能將達到最佳的伺服器相應使用者的請求。(被BIG-IP 進行檢測)
◆動態效能分配(Dynamic Ratio-APM):BIG-IP 收集到的應用程式和應用伺服器的各項績效參數,動態調整流量分配。
◆動態伺服器補充(Dynamic Server Act.):當主伺服器群中因故障導致數量減少時,動態地將備份伺服器補充至主伺服器群。
◆服務品質(QoS):按不同的優先順序對資料流進行分配。
◆服務類型(ToS): 按不同的服務類型(在Type of Field中標識)負載平衡對資料流進行分配。
◆規則模式:針對不同的資料流設定導向規則,使用者可自行。
這裡還想提一些加速的手段:比如說Gzip壓縮傳送資料前對資料進行壓縮。第一篇提到的多執行緒模式,非同步選擇等。
(4)對資料庫進行負載平衡
在之前也說過Mysql的分布式叢集的一些概念,比如說Mysql Cluster。
(5)對網路進行負載平衡
在TCP/IP上,比如資料傳送過程中的資料分區和路由器的封包交換
負載平衡器:IPVS
單點故障:這裡我簡單的說一下Memcached單點故障的解決方案,因為在叢集中,一個節點失效,可能會引發大量緩衝的大量重建,這是一個比較難以接收的後果。
解決方案1:本地備份緩衝
在本地放一份緩衝,同時也在分布式Memcached上放一份緩衝,如果當其中一台節點當機了,用戶端程式直接讀取本地的緩衝,本地用戶端維護一個HashMap即可,這樣的方案雖然很簡陋,但是可以滿足一部分情境的需要,當你很急需的時候可以作為臨時方案暫時替代一下。
解決方案2:採用緩衝Proxy 伺服器
採用 Magent 緩衝代理,防止單點現象,緩衝代理也可以做備份,通過用戶端串連到緩衝Proxy 伺服器,緩衝Proxy 伺服器串連快取服務器,緩衝Proxy 伺服器可以串連多台Memcached機器可以將每台Memcached機器進行資料同步。這樣的架構比較完善了,如果其中一台緩衝Proxy 伺服器down機,系統依然可以繼續工作,如果其中一台Memcached機器down掉,資料不會丟失並且可以保證資料的完整性,以上描述的系統架構:
在看《大規模分布式儲存系統:原理解析與架構實戰》中看到了虛擬節點的方案也挺值得學習。
構建高可用web網站(四)