<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          超詳細(xì)!一文帶你了解 LVS 負(fù)載均衡集群!

          共 12305字,需瀏覽 25分鐘

           ·

          2020-07-08 23:22

          b7e27ce184f808b4aed26a6f8079bdab.webp

          作者:JackTian
          微信公眾號(hào):杰哥的IT之旅(ID:Jake_Internet)

          前言

          如今,在各種互聯(lián)網(wǎng)應(yīng)用中,隨著站點(diǎn)對(duì)硬件性能、響應(yīng)速度、服務(wù)穩(wěn)定性、數(shù)據(jù)可靠性等要求也越來越高,單臺(tái)服務(wù)器也將難以無法承擔(dān)所有的訪問需求。當(dāng)然了,除了使用性價(jià)比高的設(shè)備和專用負(fù)載分流設(shè)備外,還有一些其他選擇來幫你解決此問題,就是搭建集群服務(wù)器通過整合多臺(tái)普通的服務(wù)器設(shè)備并以同一個(gè)地址對(duì)外提供相同的服務(wù),今天就帶領(lǐng)大家學(xué)習(xí)企業(yè)中常用的一種群集技術(shù) —— LVS。

          a658dcd78bfa583173957b6e80e66da4.webp

          文章目錄

          一、什么是 LVS?
          二、為什么要用 LVS?
          三、LVS 的組成及作用
          四、負(fù)載均衡的由來及所帶來的好處
          五、LVS 負(fù)載均衡集群的類型
          六、DNS / 軟硬件負(fù)載均衡的類型
          七、LVS 集群的通用體系結(jié)構(gòu)
          八、LVS 負(fù)載均衡的基本原理
          九、LVS 負(fù)載均衡的三種工作模式
          十、LVS 的十種負(fù)載調(diào)度算法
          十一、LVS 涉及相關(guān)的術(shù)語與說明
          參考文獻(xiàn)
          總結(jié)

          一、什么是 LVS?

          LVS:Linux Virtual Server的簡(jiǎn)寫,也就是Linux 虛擬服務(wù)器,是一個(gè)虛擬的服務(wù)器集群系統(tǒng),本項(xiàng)目在1998年5月由章文嵩博士成立,是中國國內(nèi)最早出現(xiàn)的自由軟件項(xiàng)目之一。官方網(wǎng)站?:http://www.linuxvirtualserver.org LVS 實(shí)際上相當(dāng)于基于 IP 地址的虛擬化應(yīng)用,為基于 IP 地址和內(nèi)容請(qǐng)求分發(fā)的負(fù)載均衡提出了高效的解決方法,現(xiàn)在 LVS 已經(jīng)是 Linux 內(nèi)核標(biāo)準(zhǔn)的一部分。

          使用 LVS 可以達(dá)到的技術(shù)目標(biāo)是:通過 LVS 達(dá)到的負(fù)載均衡技術(shù)和 Linux 操作系統(tǒng)實(shí)現(xiàn)一個(gè)高性能高可用的 Linux 服務(wù)器集群,具有良好的可靠性、可擴(kuò)展性和可操作性。從而以低廉的成本實(shí)現(xiàn)最優(yōu)的性能。LVS 是一個(gè)實(shí)現(xiàn)負(fù)載均衡集群的開源軟件項(xiàng)目,LVS 架構(gòu)從邏輯上可分為調(diào)度層、Server 集群層和共享存儲(chǔ)層。

          二、為什么要用 LVS?

          在之前的 Nginx 系列中,介紹了 Nginx 負(fù)載均衡服務(wù),詳細(xì)可參考:《Nginx系列教程(三)| 一文帶你讀懂Nginx的負(fù)載均衡》那為什么還需要用 LVS 呢?

          隨著 Internet 的爆炸性增長(zhǎng)以及日常生活中的日益重要的作用,Internet 上的流量速度增長(zhǎng),以每年 100% 以上的速度增長(zhǎng)。服務(wù)器上的工作負(fù)載壓力也迅速增加,因此服務(wù)器在短時(shí)間內(nèi)將會(huì)過載,尤其是對(duì)于受歡迎的網(wǎng)站而言。為了克服服務(wù)器的過載壓力問題,有兩種解決方案。

          • 一種是:?jiǎn)畏?wù)器解決方案,即將服務(wù)器升級(jí)到性能更高的服務(wù)器,但是當(dāng)請(qǐng)求增加時(shí),將很快過載,因此必須再次對(duì)其進(jìn)行升級(jí),升級(jí)過程復(fù)雜且成本高;

          • 另一個(gè)是:多服務(wù)器解決方案,即在服務(wù)器集群上構(gòu)建可擴(kuò)展的網(wǎng)絡(luò)服務(wù)系統(tǒng)。當(dāng)負(fù)載增加時(shí),可以簡(jiǎn)單地在群集中添加新服務(wù)器或更多服務(wù)器以滿足不斷增長(zhǎng)的需求,而商用服務(wù)器具有最高的性能/成本比。因此,構(gòu)建用于網(wǎng)絡(luò)服務(wù)的服務(wù)器群集系統(tǒng)更具可伸縮性,并且更具成本效益。

          構(gòu)建服務(wù)器集群的方法:

          • 基于 DNS 的負(fù)載均衡集群

          DNS 負(fù)載均衡可能是構(gòu)建網(wǎng)絡(luò)服務(wù)群集的最簡(jiǎn)單方法。使用域名系統(tǒng)通過將域名解析為服務(wù)器的不同 IP 地址來將請(qǐng)求分發(fā)到不同的服務(wù)器。當(dāng) DNS 請(qǐng)求到達(dá) DNS 服務(wù)器以解析域名時(shí),DNS 服務(wù)器將基于調(diào)度策略發(fā)出服務(wù)器 IP 地址之一,然后來自客戶端的請(qǐng)求使用相同的本地緩存名稱服務(wù)器將在指定的名稱解析生存時(shí)間(TTL)中發(fā)送到同一服務(wù)器。

          但是,由于客戶端和分層 DNS 系統(tǒng)的緩存特性,很容易導(dǎo)致服務(wù)器之間的動(dòng)態(tài)負(fù)載不平衡,因此服務(wù)器很難處理其峰值負(fù)載。在 DNS 服務(wù)器上不能很好地選擇名稱映射的 TTL 值。

          如果值較小,DNS 流量很高,而 DNS 服務(wù)器將成為瓶頸;如果值較大,則動(dòng)態(tài)負(fù)載不平衡將變得更糟。即使 TTL 值設(shè)置為零,調(diào)度粒度也是針對(duì)每個(gè)主機(jī)的,不同用戶的訪問模式可能會(huì)導(dǎo)致動(dòng)態(tài)負(fù)載不平衡,因?yàn)橛行┤丝赡軓恼军c(diǎn)中拉出很多頁面,而另一些人可能只瀏覽了幾頁然后轉(zhuǎn)到遠(yuǎn)。而且,它不是那么可靠,當(dāng)服務(wù)器節(jié)點(diǎn)發(fā)生故障時(shí),將名稱映射到IP地址的客戶端會(huì)發(fā)現(xiàn)服務(wù)器已關(guān)閉。

          • 基于分派器的負(fù)載平衡集群

          分派器,也稱為負(fù)載平衡器,可用于在群集中的服務(wù)器之間分配負(fù)載,以便服務(wù)器的并行服務(wù)可以在單個(gè)IP地址上顯示為虛擬服務(wù),并且最終用戶可以像單個(gè)服務(wù)器一樣進(jìn)行交互不知道群集中的所有服務(wù)器。與基于DNS的負(fù)載平衡相比,調(diào)度程序可以按精細(xì)的粒度(例如每個(gè)連接)調(diào)度請(qǐng)求,以實(shí)現(xiàn)服務(wù)器之間的更好負(fù)載平衡。一臺(tái)或多臺(tái)服務(wù)器發(fā)生故障時(shí),可以掩蓋故障。服務(wù)器管理變得越來越容易,管理員可以隨時(shí)使一臺(tái)或多臺(tái)服務(wù)器投入使用或退出服務(wù),而這不會(huì)中斷最終用戶的服務(wù)。

          負(fù)載均衡可以分為兩個(gè)級(jí)別,即應(yīng)用程序級(jí)別和IP級(jí)別。例如,反向代理 和pWEB是用于構(gòu)建可伸縮Web服務(wù)器的應(yīng)用程序級(jí)負(fù)載平衡方法。他們將HTTP請(qǐng)求轉(zhuǎn)發(fā)到群集中的其他Web服務(wù)器,獲取結(jié)果,然后將其返回給客戶端。由于在應(yīng)用程序級(jí)別處理HTTP請(qǐng)求和答復(fù)的開銷很高,我相信當(dāng)服務(wù)器節(jié)點(diǎn)數(shù)增加到5個(gè)或更多時(shí),應(yīng)用程序級(jí)別的負(fù)載均衡器將成為新的瓶頸,這取決于每個(gè)服務(wù)器的吞吐量服務(wù)器。

          LVS 與 Nginx 功能對(duì)比
          • LVS 比 Nginx 具有更強(qiáng)的抗負(fù)載能力,性能高,對(duì)內(nèi)存和 CPU 資源消耗較低;

          • LVS 工作在網(wǎng)絡(luò)層,具體流量由操作系統(tǒng)內(nèi)核進(jìn)行處理,Nginx 工作在應(yīng)用層,可針對(duì) HTTP 應(yīng)用實(shí)施一些分流策略;

          • LVS 安裝配置較復(fù)雜,網(wǎng)絡(luò)依賴性大,穩(wěn)定性高。Nginx 安裝配置較簡(jiǎn)單,網(wǎng)絡(luò)依賴性??;

          • LVS 不支持正則匹配處理,無法實(shí)現(xiàn)動(dòng)靜分離效果。Nginx 可實(shí)現(xiàn)這方面的功能,具體可參考:《Nginx系列教程(二)| 一文帶你讀懂Nginx的正向與反向代理》、《Nginx系列教程(四)| 一文帶你讀懂Nginx的動(dòng)靜分離》;

          • LVS 適用的協(xié)議范圍廣。Nginx 僅支持 HTTP、HTTPS、Email 協(xié)議,適用范圍??;

          三、LVS 的組成及作用

          LVS 由兩部分程序組成,包括 ipvs 和 ipvsadm。

          1、 ipvs(ip virtual server):LVS 是基于內(nèi)核態(tài)的 netfilter 框架實(shí)現(xiàn)的 IPVS 功能,工作在內(nèi)核態(tài)。用戶配置 VIP 等相關(guān)信息并傳遞到 IPVS 就需要用到 ipvsadm 工具。

          2、 ipvsadm:ipvsadm 是 LVS 用戶態(tài)的配套工具,可以實(shí)現(xiàn) VIP 和 RS 的增刪改查功能,是基于 netlink 或 raw socket 方式與內(nèi)核 LVS 進(jìn)行通信的,如果 LVS 類比于 netfilter,那 ipvsadm 就是類似 iptables 工具的地位。

          作用:
          • 主要用于多服務(wù)器的負(fù)載均衡;

          • 工作在網(wǎng)絡(luò)層,可實(shí)現(xiàn)高性能,高可用的服務(wù)器集群技術(shù);

          • 廉價(jià),可把許多低性能的服務(wù)器組合在一起形成一個(gè)超級(jí)服務(wù)器;

          • 易用,配置簡(jiǎn)單,有多種負(fù)載均衡的方法;

          • 穩(wěn)定可靠,即使在集群的服務(wù)器中某臺(tái)服務(wù)器無法正常工作,也不影響整體效果;

          • 可擴(kuò)展性好;

          四、負(fù)載均衡的由來及所帶來的好處

          在業(yè)務(wù)剛起步時(shí),一般先使用單臺(tái)服務(wù)器對(duì)外進(jìn)行提供服務(wù)。隨著后期的業(yè)務(wù)增長(zhǎng),流量也越來越大。當(dāng)這單臺(tái)服務(wù)器的訪問量越大時(shí),服務(wù)器所承受的壓力也就越大,性能也將無法滿足業(yè)務(wù)需求,超出自身所指定的訪問壓力就會(huì)崩掉,避免發(fā)生此類事情的發(fā)生。

          我們將采取其他方案,將多臺(tái)服務(wù)器組成集群系統(tǒng)從而來提高整體服務(wù)器的處理性能,使用統(tǒng)一入口(流量調(diào)度器)的方式通過均衡的算法進(jìn)行對(duì)外提供服務(wù),將用戶大量的請(qǐng)求均衡地分發(fā)到后端集群不同的服務(wù)器上。因此也就有了負(fù)載均衡來分擔(dān)服務(wù)器的壓力。

          使用負(fù)載均衡給我們所帶來的好處:提高系統(tǒng)的整體性能、提高系統(tǒng)的擴(kuò)展性、提高系統(tǒng)的高可用性;

          五、LVS 負(fù)載均衡集群的類型

          負(fù)載均衡群集:Load Balance Cluster,以提高應(yīng)用系統(tǒng)的響應(yīng)能力,盡可能處理更多的訪問請(qǐng)求、減少延遲為目標(biāo),從而獲得高并發(fā)、高負(fù)載的整體性能。

          高可用群集:High Availability Cluster,以提高應(yīng)用系統(tǒng)的可靠性,盡可能的減少終端時(shí)間為目標(biāo)、確保服務(wù)的連續(xù)性,達(dá)到高可用的容錯(cuò)效果。

          高性能運(yùn)算群集:High Performance Computer Cluster,以提高應(yīng)用系統(tǒng)的 CPU 運(yùn)算速度、擴(kuò)展硬件資源和分析能力為目標(biāo)、從而獲得相當(dāng)于大型、超級(jí)計(jì)算機(jī)的高性能計(jì)算能力。

          六、DNS / 軟硬件負(fù)載均衡的類型

          1)DNS 實(shí)現(xiàn)負(fù)載均衡

          一個(gè)域名通過 DNS 解析到多個(gè) IP,每個(gè) IP 對(duì)應(yīng)不同的服務(wù)器實(shí)例,就完成了流量的調(diào)度,這也是 DNS 實(shí)現(xiàn)負(fù)載均衡是最簡(jiǎn)單的方式。

          使用該方式最大的優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,成本低,無需自己開發(fā)或維護(hù)負(fù)載均衡設(shè)備,不過存在一些缺點(diǎn):服務(wù)器故障切換延遲大,升級(jí)不方便、流量調(diào)度不均衡,粒度大、流量分配策略較簡(jiǎn)單,支持的算法較少、DNS 所支持的 IP 列表有限制要求。

          2)硬件負(fù)載均衡

          硬件負(fù)載均衡是通過專門的硬件設(shè)備從而來實(shí)現(xiàn)負(fù)載均衡功能,比如:交換機(jī)、路由器就是一個(gè)負(fù)載均衡專用的網(wǎng)絡(luò)設(shè)備。

          目前典型的硬件負(fù)載均衡設(shè)備有兩款:F5A10。不過話說,能用上這種硬件負(fù)載均衡設(shè)備的企業(yè)都不是一般的公司,反而普通業(yè)務(wù)量級(jí)小的其他企業(yè)基本用不到。

          硬件負(fù)載均衡的優(yōu)點(diǎn):

          • 功能強(qiáng)大:支持各層級(jí)負(fù)載均衡及全面負(fù)載均衡算法;

          • 性能強(qiáng)大:性能遠(yuǎn)超常見的軟件負(fù)載均衡器;

          • 穩(wěn)定性高:硬件負(fù)載均衡,大規(guī)模使用肯定是嚴(yán)格測(cè)試過的;

          • 安全防護(hù):除具備負(fù)載均衡功能外,還具備防火墻、防 DDoS 攻擊等安全功能;

          硬件負(fù)載均衡的缺點(diǎn):

          • 價(jià)格昂貴;

          • 可擴(kuò)展性差;

          • 調(diào)試維護(hù)麻煩;

          3)軟件負(fù)載均衡

          • Nginx :支持 4 層 / 7 層負(fù)載均衡,支持 HTTP、E-mail 協(xié)議;

          • LVS :純 4 層負(fù)載均衡,運(yùn)行在內(nèi)核態(tài),性能是軟件負(fù)載均衡中最高的;

          • HAproxy :是 7 層負(fù)載均衡軟件,支持 7 層規(guī)則的設(shè)置,性能也不錯(cuò);

          軟件負(fù)載均衡的優(yōu)點(diǎn):

          • 簡(jiǎn)單、靈活、便宜(直接在 Linux 操作系統(tǒng)上安裝上述所使用的軟件負(fù)載均衡,部署及維護(hù)較簡(jiǎn)單,4 層 和 7 層負(fù)載均衡可根據(jù)業(yè)務(wù)進(jìn)行選擇也可根據(jù)業(yè)務(wù)特點(diǎn),比較方便進(jìn)行擴(kuò)展及定制功能);

          七、LVS 集群的通用體系結(jié)構(gòu)

          134b5187882e16e531383c036e7ef4d8.webp

          第一層:負(fù)載調(diào)度器:Load Balancer,它是訪問整個(gè)群集系統(tǒng)的唯一入口,對(duì)外使用所有服務(wù)器共有的虛擬 IP 地址,也成為群集 IP 地址。

          負(fù)載均衡器:是服務(wù)器群集系統(tǒng)的單個(gè)入口點(diǎn),可運(yùn)行 IPVS,該 IPVS 在 Linux 內(nèi)核或 KTCPVS 內(nèi)部實(shí)現(xiàn) IP 負(fù)載均衡技術(shù),在 Linux 內(nèi)核中實(shí)現(xiàn)應(yīng)用程序級(jí)負(fù)載平衡。使用 IPVS 時(shí),要求所有服務(wù)器提供相同的服務(wù)和內(nèi)容,負(fù)載均衡器根據(jù)指定的調(diào)度算法和每個(gè)服務(wù)器的負(fù)載將新的客戶端請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。無論選擇哪個(gè)服務(wù)器,客戶端都應(yīng)獲得相同的結(jié)果。使用 KTCPVS 時(shí),服務(wù)器可以具有不同的內(nèi)容,負(fù)載均衡器可以根據(jù)請(qǐng)求的內(nèi)容將請(qǐng)求轉(zhuǎn)發(fā)到其他服務(wù)器。由于 KTCPVS 是在 Linux 內(nèi)核內(nèi)部實(shí)現(xiàn)的,因此中繼數(shù)據(jù)的開銷很小,因此仍可以具有較高的吞吐量。

          第二層:服務(wù)器池:Server Pool,群集所提供的應(yīng)用服務(wù),比如:HTTP、FTP服務(wù)器池來承擔(dān),每個(gè)節(jié)點(diǎn)具有獨(dú)立的真實(shí) IP 地址,只處理調(diào)度器分發(fā)過來的客戶機(jī)請(qǐng)求。

          服務(wù)器群集的節(jié)點(diǎn)可根據(jù)系統(tǒng)所承受的負(fù)載進(jìn)行分擔(dān)。當(dāng)所有服務(wù)器過載時(shí),可添加多臺(tái)服務(wù)器來處理不斷增加的工作負(fù)載。對(duì)于大多數(shù) Internet 服務(wù)(例如Web),請(qǐng)求通常沒有高度關(guān)聯(lián),并且可以在不同服務(wù)器上并行運(yùn)行。因此,隨著服務(wù)器群集的節(jié)點(diǎn)數(shù)增加,整體性能幾乎可以線性擴(kuò)展。

          第三層:共享存儲(chǔ):Shared Storage,為服務(wù)器池中的所有節(jié)點(diǎn)提供穩(wěn)定、一致的文件存儲(chǔ)服務(wù),確保整個(gè)群集的統(tǒng)一性,可使用 NAS 設(shè)備或提供 NFS (Network File System)網(wǎng)絡(luò)文件系統(tǒng)共享服務(wù)的專用服務(wù)器。

          共享存儲(chǔ):可以是數(shù)據(jù)庫系統(tǒng),網(wǎng)絡(luò)文件系統(tǒng)或分布式文件系統(tǒng)。服務(wù)器節(jié)點(diǎn)需要?jiǎng)討B(tài)更新的數(shù)據(jù)應(yīng)存儲(chǔ)在基于數(shù)據(jù)的系統(tǒng)中,當(dāng)服務(wù)器節(jié)點(diǎn)并行在數(shù)據(jù)庫系統(tǒng)中讀寫數(shù)據(jù)時(shí),數(shù)據(jù)庫系統(tǒng)可以保證并發(fā)數(shù)據(jù)訪問的一致性。靜態(tài)數(shù)據(jù)通常保存在網(wǎng)絡(luò)文件系統(tǒng)(例如 NFS 和 CIFS)中,以便可以由所有服務(wù)器節(jié)點(diǎn)共享數(shù)據(jù)。但是,單個(gè)網(wǎng)絡(luò)文件系統(tǒng)的可伸縮性受到限制,例如,單個(gè) NFS / CIFS 只能支持 4 到 8 個(gè)服務(wù)器的數(shù)據(jù)訪問。對(duì)于大型集群系統(tǒng),分布式/集群文件系統(tǒng)可以用于共享存儲(chǔ),例如 GPFS,Coda 和 GFS,然后共享存儲(chǔ)也可以根據(jù)系統(tǒng)需求進(jìn)行擴(kuò)展。

          八、LVS 負(fù)載均衡的基本原理

          netfilter 的基本原理

          在介紹 LVS 負(fù)載均衡基本原理之前,先說一下 netfilter 的基本原理。因?yàn)?LVS 是基于 Linux 內(nèi)核中 netfilter 框架實(shí)現(xiàn)的負(fù)載均衡系統(tǒng),netfilter 其實(shí)很復(fù)雜也很重要,平時(shí)說的 Linux 防火墻就是 netfilter,不過我們操作的還是 iptables,iptables 和 netfilter 是 Linux 防火墻組合工具,是一起來完成系統(tǒng)防護(hù)工作的。

          iptables 是位于用戶空間,而 Netfilter 是位于內(nèi)核空間。iptables 只是用戶空間編寫和傳遞規(guī)則的工具而已,真正工作的還是 netfilter。

          兩者間的區(qū)別:

          Netfilter 是內(nèi)核態(tài)的 Linux 防火墻機(jī)制,它作為一個(gè)通用、抽象的框架,提供了一整套的 hook 函數(shù)管理機(jī)制,提供數(shù)據(jù)包過濾、網(wǎng)絡(luò)地址轉(zhuǎn)換、基于協(xié)議類型的連接跟蹤的功能,可在數(shù)據(jù)包流經(jīng)過程中,根據(jù)規(guī)則設(shè)置若干個(gè)關(guān)卡(hook 函數(shù))來執(zhí)行相關(guān)操作,共設(shè)置了 5 個(gè)點(diǎn),包括:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。

          • prerouting: 在對(duì)數(shù)據(jù)包做路由選擇之前,將應(yīng)用此鏈中的規(guī)則;

          • input: 當(dāng)收到訪問防火墻本機(jī)地址的數(shù)據(jù)包時(shí),將應(yīng)用此鏈中的規(guī)則;

          • forward: 當(dāng)收到需要通過防火中轉(zhuǎn)發(fā)給其他地址的數(shù)據(jù)包時(shí),將應(yīng)用此鏈中的規(guī)則;

          • output: 當(dāng)防火墻本機(jī)向外發(fā)送數(shù)據(jù)包時(shí),將應(yīng)用此鏈中的規(guī)則;

          • postrouting: 在對(duì)數(shù)據(jù)包做路由選擇之后,將應(yīng)用此鏈中的規(guī)則;

          iptable 是用戶層的工具,提供命令行接口,能夠向 Netfilter 中添加規(guī)則策略,從而實(shí)現(xiàn)報(bào)文過濾,修改等功能。關(guān)于 iPtables 相關(guān)文章可參考如下:

          通過下圖我們可以來了解下 netfilter 的工作機(jī)制:

          8085bcd4d3a5b0627471581bb802065c.webp
          當(dāng)數(shù)據(jù)包通過網(wǎng)絡(luò)接口進(jìn)入時(shí),經(jīng)過鏈路層之后進(jìn)入網(wǎng)絡(luò)層到達(dá)PREROUTING,然后根據(jù)目標(biāo) IP 地址進(jìn)行查找路由。

          如目標(biāo) IP 是本機(jī),數(shù)據(jù)包會(huì)傳到INPUT上,經(jīng)過協(xié)議棧后根據(jù)端口將數(shù)據(jù)送到相應(yīng)的應(yīng)用程序;應(yīng)用程序?qū)⒄?qǐng)求處理后把響應(yīng)數(shù)據(jù)包發(fā)送至OUTPUT里,最終通過POSTROUTING后發(fā)送出網(wǎng)絡(luò)接口。

          如目標(biāo) IP 不是本機(jī),并且服務(wù)器開啟了FORWARD參數(shù),這時(shí)會(huì)將數(shù)據(jù)包遞送給 FORWARD,最后通過POSTROUTING后發(fā)送出網(wǎng)絡(luò)接口。

          LVS 的基本原理

          cd2d3cbd603be9eab1ec82e169ca6cf4.webp
          LVS 基于 netfilter 框架,工作在 INPUT 鏈上,在 INPUT 鏈上注冊(cè) ip_vs_in HOOK 函數(shù),進(jìn)行 IPVS 相關(guān)主流程,詳細(xì)原理概述如下:

          1、 當(dāng)客戶端用戶訪問 www.baidu.com 網(wǎng)站時(shí),用戶訪問請(qǐng)求通過層層網(wǎng)絡(luò),最終通過交換機(jī)進(jìn)入 LVS 服務(wù)器網(wǎng)卡進(jìn)入內(nèi)核空間層。

          2、 進(jìn)入PREROUTING后通過查找路由,確定訪問目的 VIP 是本機(jī) IP 地址的話,數(shù)據(jù)包將進(jìn)入INPUT鏈中。

          3、 因?yàn)?IPVS 工作在 INPUT 鏈上,會(huì)根據(jù)訪問的VIP端口判斷請(qǐng)求是否為 IPVS 服務(wù),是的情況下,則調(diào)用注冊(cè)的IPVS HOOK 函數(shù),進(jìn)行IPVS相關(guān)流程,并強(qiáng)制修改數(shù)據(jù)包的相關(guān)數(shù)據(jù),并將數(shù)據(jù)包發(fā)往POSTROUTING鏈中。

          4、 POSTROUTING鏈?zhǔn)盏綌?shù)據(jù)包后,將根據(jù)目標(biāo) IP 地址服務(wù)器,通過路由選路,將數(shù)據(jù)包最終發(fā)送至后端真實(shí)服務(wù)器中。

          上面就是我們所介紹的 LVS 的工作原理,那么 LVS 負(fù)載均衡還包括三種工作模式,且每種模式工作原理都有所不同,適用于不同應(yīng)用場(chǎng)景,其最終目的都是能實(shí)現(xiàn)均衡的流量調(diào)度和良好的擴(kuò)展性。

          九、LVS 負(fù)載均衡的三種工作模式

          群集的負(fù)載調(diào)度技術(shù),可基于 IP、端口、內(nèi)容等進(jìn)行分發(fā),其中基于 IP 的負(fù)載均衡是效率最高的?;?IP 的負(fù)載均衡模式,常見的有地址轉(zhuǎn)換(NAT)、IP 隧道(TUN)和直接路由(DR)三種工作模式。

          地址轉(zhuǎn)換:Network Address Translation,簡(jiǎn)稱:NAT 模式,類似于防火墻的私有網(wǎng)絡(luò)結(jié)構(gòu),負(fù)載調(diào)度器作為所有服務(wù)器節(jié)點(diǎn)的網(wǎng)關(guān),作為客戶機(jī)的訪問入口,也是各節(jié)點(diǎn)回應(yīng)客戶機(jī)的訪問出口,服務(wù)器節(jié)點(diǎn)使用私有 IP 地址,與負(fù)載調(diào)度器位于同一個(gè)物理網(wǎng)絡(luò),安全性要優(yōu)于其他兩種方式。

          908b0ff5e9185c7bc4cbaf7f33ec6977.webp
          NAT 實(shí)現(xiàn)原理過程

          1、 客戶端發(fā)出的請(qǐng)求數(shù)據(jù)包經(jīng)過網(wǎng)絡(luò)到達(dá) LVS 網(wǎng)卡,數(shù)據(jù)包源 IP 為 CIP,目的 IP 為 VIP。

          2、然后進(jìn)入 PREROUTING 鏈中,根據(jù)目的 IP 查找路由,確定是否為本機(jī) IP 地址,隨后將數(shù)據(jù)包轉(zhuǎn)發(fā)至 INPUT 鏈中,源 IP 和 目的 IP 不變。

          3、 到達(dá) LVS 后,通過目的 IP 和目的 PORT 查找是否為 IPVS 服務(wù),如是 IPVS 服務(wù),將會(huì)選擇一個(gè) RS 來作為后端服務(wù)器,數(shù)據(jù)包的目的 IP 地址將會(huì)修改為 RIP,這時(shí)并以 RIP 為目的 IP 去查找路由,確定下一跳及 PORT 信息后,數(shù)據(jù)包將會(huì)轉(zhuǎn)發(fā)至 OUTPUT 鏈中。

          4、 被修改過的數(shù)據(jù)包經(jīng)過 POSTROUTING 鏈后,到達(dá) RS 服務(wù)器,數(shù)據(jù)包源 IP 為 CIP,目的 IP 為 RIP。

          5、 RS 服務(wù)器經(jīng)過處理后,將會(huì)把數(shù)據(jù)包發(fā)送至用戶空間的應(yīng)用程序,待處理完成后,發(fā)送響應(yīng)數(shù)據(jù)包,RS 服務(wù)器的默認(rèn)網(wǎng)關(guān)為 LVS 的 IP,應(yīng)用程序?qū)?huì)把數(shù)據(jù)包轉(zhuǎn)發(fā)至下一跳 LVS 服務(wù)器,數(shù)據(jù)包源 IP 為 RIP,目的 IP 為 CIP。

          6、 LVS 服務(wù)器收到 RS 服務(wù)器響應(yīng)的數(shù)據(jù)包后,查找路由,目的 IP 不是本機(jī) IP并且 LVS 服務(wù)器開啟了 FORWARD 模式,會(huì)將數(shù)據(jù)包轉(zhuǎn)發(fā)給它,數(shù)據(jù)包不變。

          7、 LVS 服務(wù)器收到響應(yīng)數(shù)據(jù)包后,根據(jù)目的 IP 和 目的 PORT ?查找相應(yīng)的服務(wù),這時(shí),源 IP 為 VIP,通過查找路由,確定下一跳信息并將數(shù)據(jù)包發(fā)送至網(wǎng)關(guān),最終回應(yīng)給客戶端用戶。

          NAT 模式的優(yōu)缺點(diǎn):

          優(yōu)點(diǎn):

          • 支持 Windows 操作系統(tǒng);

          • 支持端口映射,如 RS 服務(wù)器 PORT 與 VPORT 不一致的話,LVS 會(huì)修改目的 IP 地址和 DPORT 以支持端口映射;

          缺點(diǎn):

          • RS 服務(wù)器需配置網(wǎng)關(guān);

          • 雙向流量對(duì) LVS 會(huì)產(chǎn)生較大的負(fù)載壓力;

          NAT 模式的使用場(chǎng)景:

          • 對(duì) windows 操作系統(tǒng)的用戶比較友好,使用 LVS ,必須選擇 NAT 模式。

          IP 隧道:IP Tunnel,簡(jiǎn)稱:TUN 模式,采用開放式的網(wǎng)絡(luò)結(jié)構(gòu),負(fù)載調(diào)度器作為客戶機(jī)的訪問入口,各節(jié)點(diǎn)通過各自的 Internet 連接直接回應(yīng)給客戶機(jī),而不經(jīng)過負(fù)載調(diào)度器,服務(wù)器節(jié)點(diǎn)分散在互聯(lián)網(wǎng)中的不同位置,有獨(dú)立的公網(wǎng) IP 地址,通過專用 IP 隧道與負(fù)載調(diào)度器相互通信。

          b413da32ef7ccf5c01e59e7813533cd2.webp
          TUN 實(shí)現(xiàn)原理過程

          1、 客戶端發(fā)送數(shù)據(jù)包經(jīng)過網(wǎng)絡(luò)后到 LVS 網(wǎng)卡,數(shù)據(jù)包源 IP 為 CIP,目的 IP 為 VIP。

          2、 進(jìn)入 PREROUTING 鏈后,會(huì)根據(jù)目的 IP 去查找路由,確定是否為本機(jī) IP,數(shù)據(jù)包將轉(zhuǎn)發(fā)至 INPUT 鏈中,到 LVS,源 IP 和 目的 IP 不變。

          3、 到 LVS 后,通過目的 IP 和目的 PORT 查找是否為 IPVS 服務(wù),如是 IPVS 服務(wù),將會(huì)選擇一個(gè) RS 后端服務(wù)器, 源 IP 為 DIP,目標(biāo) IP 為 RIP,數(shù)據(jù)包將會(huì)轉(zhuǎn)發(fā)至 OUTPUT 鏈中。

          4、 數(shù)據(jù)包根據(jù)路由信息到達(dá) LVS 網(wǎng)卡,發(fā)送至路由器網(wǎng)關(guān),最終到達(dá)后端服務(wù)器。

          5、 后端服務(wù)器收到數(shù)據(jù)包后,會(huì)拆掉最外層的 IP 地址后,會(huì)發(fā)現(xiàn)還有一層 IP 首部,源 IP 為 CIP,目的 IP 為 VIP,TUNL0 上配置 VIP,查找路由后判斷為本機(jī) IP 地址,將會(huì)發(fā)給用戶空間層的應(yīng)用程序響應(yīng)后 VIP 為源 IP,CIP 為目的 IP 數(shù)據(jù)包發(fā)送至網(wǎng)卡,最終返回至客戶端用戶。

          TUN 模式的優(yōu)缺點(diǎn):

          優(yōu)點(diǎn):

          • 單臂模式,LVS 負(fù)載壓力??;

          • 數(shù)據(jù)包修改小,信息完整性高;

          • 可跨機(jī)房;

          缺點(diǎn):

          • 不支持端口映射;

          • 需在 RS 后端服務(wù)器安裝模塊及配置 VIP;

          • 隧道頭部 IP 地址固定,RS 后端服務(wù)器網(wǎng)卡可能會(huì)不均勻;

          • 隧道頭部的加入可能會(huì)導(dǎo)致分片,最終會(huì)影響服務(wù)器性能;

          TUN 模式的使用場(chǎng)景:

          • 如對(duì)轉(zhuǎn)發(fā)性要求較高且具有跨機(jī)房需求的,可選擇 TUN 模式。

          直接路由:Direct Routing,簡(jiǎn)稱 DR 模式,采用半開放式的網(wǎng)絡(luò)結(jié)構(gòu),與 TUN 模式的結(jié)構(gòu)類似,但各節(jié)點(diǎn)并不是分散在各個(gè)地方,而是與調(diào)度器位于同一個(gè)物理網(wǎng)絡(luò),負(fù)載調(diào)度器與各節(jié)點(diǎn)服務(wù)器通過本地網(wǎng)絡(luò)連接,不需要建立專用的 IP 隧道。它是最常用的工作模式,因?yàn)樗墓δ苄詮?qiáng)大。

          8579246ef22d5dbf0f46f6ecfa67e3ac.webp
          DR 實(shí)現(xiàn)原理過程

          1、 當(dāng)客戶端用戶發(fā)送請(qǐng)求給 www.baidu.com 網(wǎng)站時(shí),首先經(jīng)過 DNS 解析到 IP 后并向百度服務(wù)器發(fā)送請(qǐng)求,數(shù)據(jù)包經(jīng)過網(wǎng)絡(luò)到百度 LVS 負(fù)載均衡服務(wù)器,這時(shí)到達(dá) LVS 網(wǎng)卡時(shí)的數(shù)據(jù)包包括:源 IP 地址(客戶端地址)、目的 IP 地址(百度對(duì)外服務(wù)器 IP 地址,也就是 VIP)、源 MAC 地址(CMAC / LVS 連接路由器的 MAC 地址)、目標(biāo) MAC 地址(VMAC / VIP 對(duì)應(yīng)的 MAC 地址)。

          2、 數(shù)據(jù)包到達(dá)網(wǎng)卡后,經(jīng)過鏈路層到達(dá) PREROUTING 鏈,進(jìn)行查找路由,發(fā)現(xiàn)目的 IP 是 LVS 的 VIP,這時(shí)就會(huì)發(fā)送至 INPUT 鏈中并且數(shù)據(jù)包的 IP 地址、MAC 地址、Port 都未經(jīng)過修改。

          3、 數(shù)據(jù)包到達(dá) INPUT 鏈中,LVS 會(huì)根據(jù)目的 IP 和 Port(端口)確認(rèn)是否為 LVS 定義的服務(wù),如是定義過的 VIP 服務(wù),會(huì)根據(jù)配置的服務(wù)信息,從 RealServer 中選擇一個(gè)后端服務(wù)器 RS1,然后 RS1 作為目標(biāo)出方向的路由,確定下一跳信息及數(shù)據(jù)包通過具體的哪個(gè)網(wǎng)卡發(fā)出,最好將數(shù)據(jù)包通過 INET_HOOK 到 OUTPUT 鏈中。

          4、 數(shù)據(jù)包通過 POSTROUTING 鏈后,目的 MAC 地址將會(huì)修改為 RealServer 服務(wù)器 MAC 地址(RMAC)源 MAC 地址修改為 LVS 與 RS 同網(wǎng)段的 IP 地址的 MAC 地址(DMAC)此時(shí),數(shù)據(jù)包將會(huì)發(fā)至 RealServer 服務(wù)器。

          5、 數(shù)據(jù)包到達(dá) RealServer 服務(wù)器后,發(fā)現(xiàn)請(qǐng)求報(bào)文的 MAC 地址是自己的網(wǎng)卡 MAC 地址,將會(huì)接受此報(bào)文,待處理完成之后,將響應(yīng)報(bào)文通過 lo 接口傳送給 eth0 網(wǎng)卡然后向外發(fā)出。此時(shí)的源 IP 地址為 VIP,目標(biāo) IP 為 CIP,源 MAC 地址為 RS1 的 RMAC,目的 MAC 地址為下一跳路由器的 MAC 地址(CMAC),最終數(shù)據(jù)包通過 RS 相連的路由器轉(zhuǎn)發(fā)給客戶端。

          DS 模式的優(yōu)缺點(diǎn):

          優(yōu)點(diǎn):

          • 響應(yīng)數(shù)據(jù)不經(jīng)過 LVS,性能高;

          • 對(duì)數(shù)據(jù)包修改小,信息完整性好;

          缺點(diǎn):

          • LVS 與 RS 必須在同一個(gè)物理網(wǎng)絡(luò);

          • RS 上必須配置 lo 和其他內(nèi)核參數(shù);

          • 不支持端口映射;

          DS 模式的使用場(chǎng)景:

          • 對(duì)性能要求高的,可首選 DR 模式,還可透?jìng)骺蛻舳嗽?IP 地址。

          NAT 模式:只需一個(gè)公網(wǎng) IP 地址,是最易用的一種負(fù)載均衡模式,安全性較好。
          TUN 模式 和 DR 模式:負(fù)載能力強(qiáng)大、適用范圍廣、節(jié)點(diǎn)安全性較差。

          十、LVS 的十種負(fù)載調(diào)度算法

          輪詢:Round Robin,將收到的訪問請(qǐng)求按順序輪流分配給群集中的各節(jié)點(diǎn)真實(shí)服務(wù)器中,不管服務(wù)器實(shí)際的連接數(shù)和系統(tǒng)負(fù)載。

          加權(quán)輪詢:Weighted Round Robin,根據(jù)真實(shí)服務(wù)器的處理能力輪流分配收到的訪問請(qǐng)求,調(diào)度器可自動(dòng)查詢各節(jié)點(diǎn)的負(fù)載情況,并動(dòng)態(tài)跳轉(zhuǎn)其權(quán)重,保證處理能力強(qiáng)的服務(wù)器承擔(dān)更多的訪問量。

          最少連接:Least Connections,根據(jù)真實(shí)服務(wù)器已建立的連接數(shù)進(jìn)行分配,將收到的訪問請(qǐng)求優(yōu)先分配給連接數(shù)少的節(jié)點(diǎn),如所有服務(wù)器節(jié)點(diǎn)性能都均衡,可采用這種方式更好的均衡負(fù)載。

          加權(quán)最少連接:Weighted Least Connections,服務(wù)器節(jié)點(diǎn)的性能差異較大的情況下,可以為真實(shí)服務(wù)器自動(dòng)調(diào)整權(quán)重,權(quán)重較高的節(jié)點(diǎn)將承擔(dān)更大的活動(dòng)連接負(fù)載。

          基于局部性的最少連接:LBLC,基于局部性的最少連接調(diào)度算法用于目標(biāo) IP 負(fù)載平衡,通常在高速緩存群集中使用。如服務(wù)器處于活動(dòng)狀態(tài)且處于負(fù)載狀態(tài),此算法通常會(huì)將發(fā)往 IP 地址的數(shù)據(jù)包定向到其服務(wù)器。如果服務(wù)器超載(其活動(dòng)連接數(shù)大于其權(quán)重),并且服務(wù)器處于半負(fù)載狀態(tài),則將加權(quán)最少連接服務(wù)器分配給該 IP 地址。

          復(fù)雜的基于局部性的最少連接:LBLCR,具有復(fù)雜調(diào)度算法的基于位置的最少連接也用于目標(biāo)IP負(fù)載平衡,通常在高速緩存群集中使用。與 LBLC 調(diào)度有以下不同:負(fù)載平衡器維護(hù)從目標(biāo)到可以為目標(biāo)提供服務(wù)的一組服務(wù)器節(jié)點(diǎn)的映射。對(duì)目標(biāo)的請(qǐng)求將分配給目標(biāo)服務(wù)器集中的最少連接節(jié)點(diǎn)。如果服務(wù)器集中的所有節(jié)點(diǎn)都超載,則它將拾取群集中的最少連接節(jié)點(diǎn),并將其添加到目標(biāo)服務(wù)器群中。如果在指定時(shí)間內(nèi)未修改服務(wù)器集群,則從服務(wù)器集群中刪除負(fù)載最大的節(jié)點(diǎn),以避免高度負(fù)載。

          目標(biāo)地址散列調(diào)度算法:DH,該算法是根據(jù)目標(biāo) IP 地址通過散列函數(shù)將目標(biāo) IP 與服務(wù)器建立映射關(guān)系,出現(xiàn)服務(wù)器不可用或負(fù)載過高的情況下,發(fā)往該目標(biāo) IP 的請(qǐng)求會(huì)固定發(fā)給該服務(wù)器。

          源地址散列調(diào)度算法:SH,與目標(biāo)地址散列調(diào)度算法類似,但它是根據(jù)源地址散列算法進(jìn)行靜態(tài)分配固定的服務(wù)器資源。

          最短延遲調(diào)度:SED,最短的預(yù)期延遲調(diào)度算法將網(wǎng)絡(luò)連接分配給具有最短的預(yù)期延遲的服務(wù)器。如果將請(qǐng)求發(fā)送到第 i 個(gè)服務(wù)器,則預(yù)期的延遲時(shí)間為(Ci +1)/ Ui,其中 Ci 是第 i 個(gè)服務(wù)器上的連接數(shù),而 Ui 是第 i 個(gè)服務(wù)器的固定服務(wù)速率(權(quán)重) 。

          永不排隊(duì)調(diào)度:NQ,從不隊(duì)列調(diào)度算法采用兩速模型。當(dāng)有空閑服務(wù)器可用時(shí),請(qǐng)求會(huì)發(fā)送到空閑服務(wù)器,而不是等待快速響應(yīng)的服務(wù)器。如果沒有可用的空閑服務(wù)器,則請(qǐng)求將被發(fā)送到服務(wù)器,以使其預(yù)期延遲最小化(最短預(yù)期延遲調(diào)度算法)。

          十一、LVS 涉及相關(guān)的術(shù)語及說明

          上述內(nèi)容中涉及到很多術(shù)語或縮寫,這里簡(jiǎn)單解釋下具體的含義,便于理解。

          • DS: Director Server,前端負(fù)載均衡節(jié)點(diǎn)服務(wù)器。

          • RS: Real Server,后端真實(shí)服務(wù)器。

          • CIP: Client IP,客戶端 IP 地址。

          • VIP: Virtual IP,負(fù)載均衡對(duì)外提供訪問的 IP 地址,一般負(fù)載均衡 IP 都會(huì)通過 Virtual IP 實(shí)現(xiàn)高可用。

          • RIP: RealServer IP,負(fù)載均衡后端的真實(shí)服務(wù)器 IP 地址。

          • DIP: Director IP,負(fù)載均衡與后端服務(wù)器通信的 IP 地址。

          • CMAC: 客戶端 MAC 地址,LVS 連接的路由器的 MAC 地址。

          • VMAC: 負(fù)載均衡 LVS 的 VIP 對(duì)應(yīng)的 MAC 地址。

          • DMAC: 負(fù)載均衡 LVS 的 DIP 對(duì)應(yīng)的 MAC 地址。

          • RMAC: 后端真實(shí)服務(wù)器的 RIP 地址對(duì)應(yīng)的 MAC 地址。

          Reference

          http://www.linuxvirtualserver.org/
          http://www.linuxvirtualserver.org/how.html
          http://www.linuxvirtualserver.org/Documents.html

          總結(jié)

          回顧下,通過本文你可學(xué)習(xí)到什么是 LVS、為什么要用 LVS、LVS 的組成及作用、負(fù)載均衡的由來及所帶來的好處、LVS 負(fù)載均衡集群的類型(負(fù)載均衡集群、高可用集群、高性能運(yùn)算集群)、DNS 實(shí)現(xiàn)負(fù)載均衡 / 硬件和軟件的負(fù)載均衡 、LVS 負(fù)載均衡的通用體系結(jié)構(gòu)(負(fù)載調(diào)度器、服務(wù)器池、共享存儲(chǔ))、LVS 負(fù)載均衡的基本原理及基于netfilter 的基本原理和工作機(jī)制、LVS 負(fù)載均衡的三種工作模式(NAT、TUN、DR)LVS 十種負(fù)載均衡調(diào)度算法(RR、WRR、LC、WLC、LBLC、LBLCR、DH、SH、SED、NQ)以及相關(guān)涉及到的 LVS 術(shù)語及說明等;

          如果你覺得這篇文章對(duì)你有點(diǎn)用的話,就請(qǐng)為本文留個(gè)言,點(diǎn)個(gè)在看,或者轉(zhuǎn)發(fā)一下吧,因?yàn)檫@將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!感謝大家!


          - End -

          本公眾號(hào)全部博文已整理成一個(gè)目錄,請(qǐng)?jiān)诠娞?hào)后臺(tái)回復(fù)「m」獲?。?/span>
          推薦閱讀:1、我精心整理的 136 頁 Excel 數(shù)據(jù)透視表 PDF 文件!【附獲取方式】
          2、我花了一周的時(shí)間,就為了整理這份 97 頁的 Python 自動(dòng)化系列文檔?!靖将@取方式】
          3、我花了五個(gè)小時(shí)的時(shí)間,將全部文章詳細(xì)整理出來了,千萬不要錯(cuò)過!
          4、如何快速將 Linux 系統(tǒng)制作成 ISO 鏡像文件?
          5、神器工具:新一代多系統(tǒng)啟動(dòng) U 盤裝機(jī)解決方案
          6、Linux 終端下記不住命令的使用方法?這個(gè)開源項(xiàng)目幫你解決。關(guān)注微信公眾號(hào)『杰哥的IT之旅』,后臺(tái)回復(fù)“1024”查看更多內(nèi)容,回復(fù)“微信”添加我微信即可加入讀者交流群。喜歡就點(diǎn)個(gè)在看再走吧
          瀏覽 71
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  狼友精品在线观看 | 操B视频在线 | 日本黄色日批视频网站 | 精品无码一区二区三区无毛 | 不卡无码免费 |