apache負載均衡優化(apache負載均衡)

原文鏈接:https://mikechen.cc/14875.html

為什么需要負載均衡

當系統面臨大量用戶訪問,負載過高的時候,通常會使用增加服務器數量來進行橫向擴展,使用集群和負載均衡提高整個系統的處理能力。

從單機網站到分布式網站,很重要的區別是業務拆分和分布式部署,將應用拆分后,部署到不同的機器上,實現大規模分布式系統。

分布式和業務拆分解決了,從集中到分布的問題,但是每個部署的獨立業務還存在單點的問題和訪問統一入口問題,為解決單點故障,我們可以采取冗余的方式,將相同的應用部署到多臺機器上。

解決訪問統一入口問題,我們可以在集群前面增加負載均衡設備,實現流量分發。

負載均衡的作用

1.解決并發壓力

提高應用處理性能,增加吞吐量,加強網絡處理能力。

2.實現高可用

提供故障轉移,實現整個應用的高可用。

3.實現擴展性

通過添加或減少服務器數量,提供網站伸縮性擴展性。

4.實現安全防護

負載均衡設備上做一些過濾,黑白名單等處理。

負載均衡的原理

系統的擴展可分為縱向(垂直)擴展和橫向(水平)擴展。

縱向擴展,是從單機的角度通過增加硬件處理能力,比如CPU處理能力,內存容量,磁盤等方面,實現服務器處理能力的提升,不能滿足大型分布式系統(網站),大流量,高并發,海量數據的問題。

因此需要采用橫向擴展的方式,通過添加機器來滿足大型網站服務的處理能力。

比如:一臺機器不能滿足,則增加兩臺或者多臺機器,共同承擔訪問壓力。這就是典型的集群和負載均衡架構:如下圖:

應用集群:將同一應用部署到多臺機器上,組成處理集群,接收負載均衡設備分發的請求,進行處理,并返回相應數據。負載均衡設備:將用戶訪問的請求,根據負載均衡算法,分發到集群中的一臺處理服務器。

負載均衡算法

1.輪循

輪詢很容易實現,將請求按順序輪流分配到后臺服務器上,均衡的對待每一臺服務器,而不關心服務器實際的連接數和當前的系統負載。適合場景:適合于應用服務器硬件都相同的情況。

2.加權輪循

在輪詢的基礎上根據硬件配置不同,按權重分發到不同的服務器。適合場景:跟配置高、負載低的機器分配更高的權重,使其能處理更多的請求,而性能低、負載高的機器,配置較低的權重,讓其處理較少的請求。

3.隨機

通過系統隨機函數,根據后臺服務器列表的大小值來隨機選取其中一臺進行訪問。

隨著調用量的增大,客戶端的請求可以被均勻地分派到所有的后端服務器上,其實際效果越來越接近于平均分配流量到后臺的每一臺服務器,也就是輪詢法的效果。

4.最少連接

記錄每個服務器正在處理的請求數,把新的請求分發到最少連接的服務器上,因為要維護內部狀態不推薦。

5.源地址散列

根據服務消費者請求客戶端的IP地址,通過哈希函數計算得到一個哈希值,將此哈希值和服務器列表的大小進行取模運算,得到的結果便是要訪問的服務器地址的序號。

適合場景:根據請求的來源IP進行hash計算,同一IP地址的客戶端,當后端服務器列表不變時,它每次都會映射到同一臺后端服務器進行訪問。

負載均衡的分類

1.二層負載均衡(mac)

根據OSI模型分的二層負載,一般是用虛擬mac地址方式,外部對虛擬MAC地址請求,負載均衡接收后分配后端實際的MAC地址響應。備注:MAC(Media Access Control Address)

2.三層負載均衡(ip)

一般采用虛擬IP地址方式,外部對虛擬的ip地址請求,負載均衡接收后分配后端實際的IP地址響應。

3.四層負載均衡(tcp)

四層的負載均衡在三層負載均衡的基礎上,通過發布三層的IP地址(VIP),然后加四層的端口號,來決定哪些流量需要做負載均衡。

四層負載均衡在中間傳輸層執行,它處理消息的傳遞,但不考慮消息的內容,用ip+port接收請求,再轉發到對應的機器。

四層負載均衡不理解應用協議,比如:

HTTPFTPMySQL等等

實現四層負載均衡的軟件有:

F5:硬件負載均衡器,功能很好,但是成本很高。lvs:重量級的四層負載軟件nginx:輕量級的四層負載軟件,帶緩存功能,正則表達式較靈活haproxy:模擬四層轉發,較靈活

4.七層負載均衡(http)

七層負載均衡不同于四層負載均衡,它在高級應用層上執行,會處理每個消息的實際內容。

所謂七層負載均衡,也稱為內容交換,也就是主要通過報文中的真正有意義的應用層內容,決定最終選擇的內部服務器。

七層負載均衡它可以根據消息內容(如URL)做出負載均衡決策,比如:對URL圖片類的請求轉發到特定的圖片服務器。

實現七層負載均衡的軟件有:

HAproxy:天生負載均衡技能,全面支持七層代理,會話保持,標記,路徑轉移;Nginx:只在http協議和mail協議上功能比較好,性能與haproxy差不多;apache:功能較差

總的來說,一般是LVS做4層負載,Nginx或者Haproxy做7層負載,性能上LVS>HA>Nginx,功能性和便利性上Nginx>HA>LVS。

轉載注明出處:華峰博客網

內容版權聲明:除非注明,否則皆為本站原創文章。