在做系統架構規劃的時候,負載均衡,HA(高可用性叢集,是保證業務連續性的有效解決方案,一般有兩個或兩個以上的節點,且分為活動節點及備用節點,當活動節點出現故障的時候,由備用節點接管)都是經常需要考慮的方案。對應并發及單點故障,考慮負載均衡方案是必不可少的。如果并發不高隻是應對單點故障,則通常使用HA方案。
負載均衡(Load Balance)是叢集技術(Cluster)的一種應用。負載均衡可以将工作任務分攤到多個處理單元,進而提高并發處理能力。目前最常見的負載均衡應用是Web負載均衡。根據實作的原理不同,常見的web負載均衡技術包括:DNS輪詢、IP負載均衡和CDN。其中IP負載均衡可以使用硬體裝置或軟體方式來實作。
(一)、硬體方式
采用F5伺服器來做負載均衡,F5的全稱是F5-BIG-IP-GTM,是最流行的硬體負載均衡裝置,其并發能力達到百萬級。F5的主要特性包括:
-
多鍊路的負載均衡和備援
可以接入多條ISP鍊路,在鍊路之間實作負載均衡和高可用。
-
防火牆負載均衡
F5具有異構防火牆的負載均衡與故障自動排除能力。
-
伺服器負載均衡
這是F5最主要的功能,F5可以配置針對所有的對外提供服務的伺服器配置Virtual Server實作負載均衡、健康檢查、回話保持等。
-
高可用
F5裝置自身的備援設計能夠保證99.999%的正常運作時間,雙機F5的故障切換時間為毫秒級。
使用F5可以配置整個叢集的鍊路備援和伺服器備援,提高可靠的健康檢查機制,以保證高可用。
-
安全性
與防火牆類似,F5采用預設拒絕政策,可以為任何站點增加額外的安全保護,防禦普通網絡攻擊,包括DDoS、IP欺騙、SYN攻擊、teartop和land攻擊、ICMP攻擊等。
-
易于管理
F5提供HTTPS、SSH、Telnet、SNMP等多種管理方式,包含詳盡的實時報告和曆史紀錄報告。同時還提供二次開發包(i-Control)。
-
其他
F5還提供了SSL加速、軟體更新、IP位址過濾、帶寬控制等輔助功能。
(二)、軟體方式
(1)nginx
nginx我們常用于做反向代理,但它的負載均衡能力也很強。

nginx負載均衡流程圖
Nginx目前提供的負載均衡子產品:
ngx_http_upstream_round_robin,權重輪詢,可均分請求,是預設的HTTP負載均衡算法,內建在架構中。
ngx_http_upstream_ip_hash_module,IP哈希,可保持會話。
ngx_http_upstream_least_conn_module,最少連接配接數,可均分連接配接。
ngx_http_upstream_hash_module,一緻性哈希,可減少緩存資料的失效。
(2)apache http server
apache http server作為LoadBalance前置機分别有三種不同的部署方式,分别是:
1、輪詢均衡政策的配置
2、按權重配置設定均衡政策的配置
(3)LVS
LVS是Linux Virtual Server的簡稱,也就是Linux虛拟伺服器, 是一個由章文嵩博士發起的自由軟體項目,它的官方站點是www.linuxvirtualserver.org。現在LVS已經是 Linux标準核心的一部分,在Linux2.4核心以前,使用LVS時必須要重新編譯核心以支援LVS功能子產品,但是從Linux2.4核心以後,已經完全内置了LVS的各個功能子產品,無需給核心打任何更新檔,可以直接使用LVS提供的各種功能。LVS支援多種負載均衡機制。包括:VS/NAT(基于網絡位址轉換技術)、VS/TUN(基于IP隧道技術)和VS/DR(基于直接路由技術)。此外,為了适應不同的需要,淘寶開發了VS/FULLNAT,從本質上來說也是基于網絡位址轉換技術。最近還有一個基于VS/FULLNAT的DNAT子產品。不管使用哪種機制,LVS都不直接處理請求,而是将請求轉發到後面真正的伺服器(Real Server)。不同的機制,決定了響應包如何傳回到用戶端。
LVS排程算法:
-
輪叫排程
排程器通過外部請求的順序輪流的配置設定到叢集中的真實伺服器上,對每台伺服器都是均等的。但是這樣排程器不會考慮伺服器上實際的連接配接數和系統負載,導緻伺服器處理請求慢,系統負載增大。
-
權重輪叫
排程器通過一個算法根據真實伺服器的不同處理能力來配置設定通路請求,這樣可以保證伺服器的處理能力。
-
最少連接配接
排程器将通路請求自動的配置設定到已建立連接配接最少的伺服器上,如果在叢集中每台伺服器的性能差不多的話,則這種算法可以較好的均衡負載。
-
權重最少連接配接
主要用于叢集中伺服器性能差異大的情況下,排程器可以優化負載性能,具有較高權值的伺服器可以将承受較大的活動連接配接。
-
基于局部性的最少連接配接
主要是針對目标IP位址的負載均衡,将請求的目标IP位址找到離其最近的伺服器進行使用,如果伺服器不存在或者滿載的話,就會繼續尋找下一個伺服器。
-
帶複制的基于局部性的最少連接配接
主要是針對目标IP位址的負載均衡,根據請求的目标IP位址找出該位址所對應的伺服器,如果伺服器不存在或者滿載的話,就會繼續尋找下一個伺服器。當伺服器有一段時間沒有被修改,則會從最忙的伺服器組中删除。
-
目标位址散列
根據請求的目标IP位址從靜态配置設定的散清單中超出對應的伺服器,如果找到可用的伺服器且沒有滿載,則傳回空。
-
源位址散列
根據請求的源IP位址從靜态配置設定的散清單中超出對應的伺服器,如果找到可用的伺服器且沒有滿載,則傳回空。
DNS輪詢
DNS輪詢是最簡單的負載均衡方式。以域名作為通路入口,通過配置多條DNS A記錄使得請求可以配置設定到不同的伺服器。DNS輪詢沒有快速的健康檢查機制,而且隻支援WRR的排程政策導緻負載很難“均衡”,通常用于要求不高的場景。并且DNS輪詢方式直接将伺服器的真實位址暴露給使用者,不利于伺服器安全。
CDN
CDN(Content Delivery Network,内容分發網絡)。通過釋出機制将内容同步到大量的緩存節點,并在DNS伺服器上進行擴充,找到裡使用者最近的緩存節點作為服務提供節點。因為很難自建大量的緩存節點,是以通常使用CDN營運商的服務。目前國内的服務商很少,而且按流量計費,價格也比較昂貴。