apache負(fù)載均衡優(yōu)化(apache負(fù)載均衡)

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

為什么需要負(fù)載均衡

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

從單機網(wǎng)站到分布式網(wǎng)站,很重要的區(qū)別是業(yè)務(wù)拆分和分布式部署,將應(yīng)用拆分后,部署到不同的機器上,實現(xiàn)大規(guī)模分布式系統(tǒng)。

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

解決訪問統(tǒng)一入口問題,我們可以在集群前面增加負(fù)載均衡設(shè)備,實現(xiàn)流量分發(fā)。

負(fù)載均衡的作用

1.解決并發(fā)壓力

提高應(yīng)用處理性能,增加吞吐量,加強網(wǎng)絡(luò)處理能力。

2.實現(xiàn)高可用

提供故障轉(zhuǎn)移,實現(xiàn)整個應(yīng)用的高可用。

3.實現(xiàn)擴展性

通過添加或減少服務(wù)器數(shù)量,提供網(wǎng)站伸縮性擴展性。

4.實現(xiàn)安全防護

負(fù)載均衡設(shè)備上做一些過濾,黑白名單等處理。

負(fù)載均衡的原理

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

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

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

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

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

負(fù)載均衡算法

1.輪循

輪詢很容易實現(xiàn),將請求按順序輪流分配到后臺服務(wù)器上,均衡的對待每一臺服務(wù)器,而不關(guān)心服務(wù)器實際的連接數(shù)和當(dāng)前的系統(tǒng)負(fù)載。適合場景:適合于應(yīng)用服務(wù)器硬件都相同的情況。

2.加權(quán)輪循

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

3.隨機

通過系統(tǒng)隨機函數(shù),根據(jù)后臺服務(wù)器列表的大小值來隨機選取其中一臺進行訪問。

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

4.最少連接

記錄每個服務(wù)器正在處理的請求數(shù),把新的請求分發(fā)到最少連接的服務(wù)器上,因為要維護內(nèi)部狀態(tài)不推薦。

5.源地址散列

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

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

負(fù)載均衡的分類

1.二層負(fù)載均衡(mac)

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

2.三層負(fù)載均衡(ip)

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

3.四層負(fù)載均衡(tcp)

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

四層負(fù)載均衡在中間傳輸層執(zhí)行,它處理消息的傳遞,但不考慮消息的內(nèi)容,用ip+port接收請求,再轉(zhuǎn)發(fā)到對應(yīng)的機器。

四層負(fù)載均衡不理解應(yīng)用協(xié)議,比如:

HTTPFTPMySQL等等

實現(xiàn)四層負(fù)載均衡的軟件有:

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

4.七層負(fù)載均衡(http)

七層負(fù)載均衡不同于四層負(fù)載均衡,它在高級應(yīng)用層上執(zhí)行,會處理每個消息的實際內(nèi)容。

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

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

實現(xiàn)七層負(fù)載均衡的軟件有:

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

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

轉(zhuǎn)載注明出處:華峰博客網(wǎng)

內(nèi)容版權(quán)聲明:除非注明,否則皆為本站原創(chuàng)文章。