0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

負載均衡系統(tǒng)原理和實際操作解讀

電子工程師 ? 2017-11-23 14:31 ? 次閱讀

開頭先理解一下所謂的“均衡”

不能狹義地理解為分配給所有實際服務(wù)器一樣多的工作量,因為多臺服務(wù)器的承載能力各不相同,這可能體現(xiàn)在硬件配置、網(wǎng)絡(luò)帶寬的差異,也可能因為某臺服務(wù)器身兼多職,我們所說的“均衡”,也就是希望所有服務(wù)器都不要過載,并且能夠最大程序地發(fā)揮作用。

一、http重定向

當http代理(比如瀏覽器)向web服務(wù)器請求某個URL后,web服務(wù)器可以通過http響應(yīng)頭信息中的Location標記來返回一個新的URL。這意味著HTTP代理需要繼續(xù)請求這個新的URL,完成自動跳轉(zhuǎn)。

性能缺陷:

1、吞吐率限制

主站點服務(wù)器的吞吐率平均分配到了被轉(zhuǎn)移的服務(wù)器。現(xiàn)假設(shè)使用RR(Round Robin)調(diào)度策略,子服務(wù)器的最大吞吐率為1000reqs/s,那么主服務(wù)器的吞吐率要達到3000reqs/s才能完全發(fā)揮三臺子服務(wù)器的作用,那么如果有100臺子服務(wù)器,那么主服務(wù)器的吞吐率可想而知得有大?相反,如果主服務(wù)的最大吞吐率為6000reqs/s,那么平均分配到子服務(wù)器的吞吐率為2000reqs/s,而現(xiàn)子服務(wù)器的最大吞吐率為1000reqs/s,因此就得增加子服務(wù)器的數(shù)量,增加到6個才能滿足。

2、重定向訪問深度不同

有的重定向一個靜態(tài)頁面,有的重定向相比復(fù)雜的動態(tài)頁面,那么實際服務(wù)器的負載差異是不可預(yù)料的,而主站服務(wù)器卻一無所知。因此整站使用重定向方法做負載均衡不太好。

我們需要權(quán)衡轉(zhuǎn)移請求的開銷和處理實際請求的開銷,前者相對于后者越小,那么重定向的意義就越大,例如下載。你可以去很多鏡像下載網(wǎng)站試下,會發(fā)現(xiàn)基本下載都使用了Location做了重定向。

二、DNS負載均衡

DNS負責提供域名解析服務(wù),當訪問某個站點時,實際上首先需要通過該站點域名的DNS服務(wù)器來獲取域名指向的IP地址,在這一過程中,DNS服務(wù)器完成了域名到IP地址的映射,同樣,這樣映射也可以是一對多的,這時候,DNS服務(wù)器便充當了負載均衡調(diào)度器,它就像http重定向轉(zhuǎn)換策略一樣,將用戶的請求分散到多臺服務(wù)器上,但是它的實現(xiàn)機制完全不同。

使用dig命令來看下”baidu”的DNS設(shè)置

可見baidu擁有三個A記錄

相比http重定向,基于DNS的負載均衡完全節(jié)省了所謂的主站點,或者說DNS服務(wù)器已經(jīng)充當了主站點的職能。但不同的是,作為調(diào)度器,DNS服務(wù)器本身的性能幾乎不用擔心。因為DNS記錄可以被用戶瀏覽器或者互聯(lián)網(wǎng)接入服務(wù)商的各級DNS服務(wù)器緩存,只有當緩存過期后才會重新向域名的DNS服務(wù)器請求解析。也說是DNS不存在http的吞吐率限制,理論上可以無限增加實際服務(wù)器的數(shù)量。

特性:

1、可以根據(jù)用戶IP來進行智能解析。DNS服務(wù)器可以在所有可用的A記錄中尋找離用記最近的一臺服務(wù)器。

2、動態(tài)DNS:在每次IP地址變更時,及時更新DNS服務(wù)器。當然,因為緩存,一定的延遲不可避免。

不足:

1、沒有用戶能直接看到DNS解析到了哪一臺實際服務(wù)器,加服務(wù)器運維人員的調(diào)試帶來了不便。

2、策略的局限性。例如你無法將HTTP請求的上下文引入到調(diào)度策略中,而在前面介紹的基于HTTP重定向的負載均衡系統(tǒng)中,調(diào)度器工作在HTTP層面,它可以充分理解HTTP請求后根據(jù)站點的應(yīng)用邏輯來設(shè)計調(diào)度策略,比如根據(jù)請求不同的URL來進行合理的過濾和轉(zhuǎn)移。

3、如果要根據(jù)實際服務(wù)器的實時負載差異來調(diào)整調(diào)度策略,這需要DNS服務(wù)器在每次解析操作時分析各服務(wù)器的健康狀態(tài),對于DNS服務(wù)器來說,這種自定義開發(fā)存在較高的門檻,更何況大多數(shù)站點只是使用第三方DNS服務(wù)。

4、DNS記錄緩存,各級節(jié)點的DNS服務(wù)器不同程序的緩存會讓你暈頭轉(zhuǎn)向。

5、基于以上幾點,DNS服務(wù)器并不能很好地完成工作量均衡分配,最后,是否選擇基于DNS的負載均衡方式完全取決于你的需要。

三、反向代理負載均衡

這個肯定大家都有所接觸,因為幾乎所有主流的Web服務(wù)器都熱衷于支持基于反向代理的負載均衡。它的核心工作就是轉(zhuǎn)發(fā)HTTP請求。

相比前面的HTTP重定向和DNS解析,反向代理的調(diào)度器扮演的是用戶和實際服務(wù)器中間人的角色:

1、任何對于實際服務(wù)器的HTTP請求都必須經(jīng)過調(diào)度器

2、調(diào)度器必須等待實際服務(wù)器的HTTP響應(yīng),并將它反饋給用戶(前兩種方式不需要經(jīng)過調(diào)度反饋,是實際服務(wù)器直接發(fā)送給用戶)

特性:

1、調(diào)度策略豐富。例如可以為不同的實際服務(wù)器設(shè)置不同的權(quán)重,以達到能者多勞的效果。

2、對反向代理服務(wù)器的并發(fā)處理能力要求高,因為它工作在HTTP層面。

3、反向代理服務(wù)器進行轉(zhuǎn)發(fā)操作本身是需要一定開銷的,比如創(chuàng)建線程、與后端服務(wù)器建立TCP連接、接收后端服務(wù)器返回的處理結(jié)果、分析HTTP頭部信息、用戶空間和內(nèi)核空間的頻繁切換等,雖然這部分時間并不長,但是當后端服務(wù)器處理請求的時間非常短時,轉(zhuǎn)發(fā)的開銷就顯得尤為突出。例如請求靜態(tài)文件,更適合使用前面介紹的基于DNS的負載均衡方式。

4、反向代理服務(wù)器可以監(jiān)控后端服務(wù)器,比如系統(tǒng)負載、響應(yīng)時間、是否可用、TCP連接數(shù)、流量等,從而根據(jù)這些數(shù)據(jù)調(diào)整負載均衡的策略。

5、反射代理服務(wù)器可以讓用戶在一次會話周期內(nèi)的所有請求始終轉(zhuǎn)發(fā)到一臺特定的后端服務(wù)器上(粘滯會話),這樣的好處一是保持session的本地訪問,二是防止后端服務(wù)器的動態(tài)內(nèi)存緩存的資源浪費。

四、IP負載均衡(LVS-NAT)

因為反向代理服務(wù)器工作在HTTP層,其本身的開銷就已經(jīng)嚴重制約了可擴展性,從而也限制了它的性能極限。那能否在HTTP層面以下實現(xiàn)負載均衡呢?

NAT服務(wù)器:它工作在傳輸層,它可以修改發(fā)送來的IP數(shù)據(jù)包,將數(shù)據(jù)包的目標地址修改為實際服務(wù)器地址。

Linux2.4內(nèi)核開始,其內(nèi)置的Neftilter模塊在內(nèi)核中維護著一些數(shù)據(jù)包過濾表,這些表包含了用于控制數(shù)據(jù)包過濾的規(guī)則??上驳氖?,Linux提供了iptables來對過濾表進行插入、修改和刪除等操作。更加令人振奮的是,Linux2.6.x內(nèi)核中內(nèi)置了IPVS模塊,它的工作性質(zhì)類型于Netfilter模塊,不過它更專注于實現(xiàn)IP負載均衡。

想知道你的服務(wù)器內(nèi)核是否已經(jīng)安裝了IPVS模塊,可以

有輸出意味著IPVS已經(jīng)安裝了。IPVS的管理工具是ipvsadm,它為提供了基于命令行的配置界面,可以通過它快速實現(xiàn)負載均衡系統(tǒng)。這就是大名鼎鼎的LVS(Linux Virtual Server,Linux虛擬服務(wù)器)。

1、打開調(diào)度器的數(shù)據(jù)包轉(zhuǎn)發(fā)選項

echo 1 > /proc/sys/net/ipv4/ip_forward

2、檢查實際服務(wù)器是否已經(jīng)將NAT服務(wù)器作為自己的默認網(wǎng)關(guān),如果不是,如添加

route add default gw xx.xx.xx.xx

3、使用ipvsadm配置

ipvsadm -A -t 111.11.11.11:80 -s rr

添加一臺虛擬服務(wù)器,-t 后面是服務(wù)器的外網(wǎng)ip和端口,-s rr是指采用簡單輪詢的RR調(diào)度策略(這屬于靜態(tài)調(diào)度策略,除此之外,LVS還提供了系列的動態(tài)調(diào)度策略,比如最小連接(LC)、帶權(quán)重的最小連接(WLC),最短期望時間延遲(SED)等)

ipvsadm -a -t111.11.11.11:80 -r10.10.120.210:8000 -m

ipvsadm -a -t111.11.11.11:80 -r10.10.120.211:8000 -m

添加兩臺實際服務(wù)器(不需要有外網(wǎng)ip),-r后面是實際服務(wù)器的內(nèi)網(wǎng)ip和端口,-m表示采用NAT方式來轉(zhuǎn)發(fā)數(shù)據(jù)包

運行ipvsadm -L -n可以查看實際服務(wù)器的狀態(tài)。這樣就大功告成了。

實驗證明使用基于NAT的負載均衡系統(tǒng)。作為調(diào)度器的NAT服務(wù)器可以將吞吐率提升到一個新的高度,幾乎是反向代理服務(wù)器的兩倍以上,這大多歸功于在內(nèi)核中進行請求轉(zhuǎn)發(fā)的較低開銷。但是一旦請求的內(nèi)容過大時,不論是基于反向代理還是NAT,負載均衡的整體吞吐量都差距不大,這說明對于一睦開銷較大的內(nèi)容,使用簡單的反向代理來搭建負載均衡系統(tǒng)是值考慮的。

這么強大的系統(tǒng)還是有它的瓶頸,那就是NAT服務(wù)器的網(wǎng)絡(luò)帶寬,包括內(nèi)部網(wǎng)絡(luò)和外部網(wǎng)絡(luò)。當然如果你不差錢,可以去花錢去購買千兆交換機或萬兆交換機,甚至負載均衡硬件設(shè)備,但如果你是個屌絲,咋辦?

一個簡單有效的辦法就是將基于NAT的集群和前面的DNS混合使用,比如5個100Mbps出口寬帶的集群,然后通過DNS來將用戶請求均衡地指向這些集群,同時,你還可以利用DNS智能解析實現(xiàn)地域就近訪問。這樣的配置對于大多數(shù)業(yè)務(wù)是足夠了,但是對于提供下載或視頻等服務(wù)的大規(guī)模站點,NAT服務(wù)器還是不夠出色。

五、直接路由(LVS-DR)

NAT是工作在網(wǎng)絡(luò)分層模型的傳輸層(第四層),而直接路由是工作在數(shù)據(jù)鏈路層(第二層),貌似更屌些。它通過修改數(shù)據(jù)包的目標MAC地址(沒有修改目標IP),將數(shù)據(jù)包轉(zhuǎn)發(fā)到實際服務(wù)器上,不同的是,實際服務(wù)器的響應(yīng)數(shù)據(jù)包將直接發(fā)送給客戶羰,而不經(jīng)過調(diào)度器。

1、網(wǎng)絡(luò)設(shè)置

這里假設(shè)一臺負載均衡調(diào)度器,兩臺實際服務(wù)器,購買三個外網(wǎng)ip,一臺機一個,三臺機的默認網(wǎng)關(guān)需要相同,最后再設(shè)置同樣的ip別名,這里假設(shè)別名為10.10.120.193。這樣一來,將通過10.10.120.193這個IP別名來訪問調(diào)度器,你可以將站點的域名指向這個IP別名。

2、將ip別名添加到回環(huán)接口lo上

這是為了讓實際服務(wù)器不要去尋找其他擁有這個IP別名的服務(wù)器,在實際服務(wù)器中運行:

另外還要防止實際服務(wù)器響應(yīng)來自網(wǎng)絡(luò)中針對IP別名的ARP廣播,為此還要執(zhí)行:

echo"1" > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo"2" > /proc/sys/net/ipv4/conf/lo/arp_announce

echo"1" > /proc/sys/net/ipv4/conf/all/arp_ignore

echo"1" > /proc/sys/net/ipv4/conf/all/arp_announce

配置完了就可以使用ipvsadm配置LVS-DR集群了

ipvsadm -A -t10.10.120.193:80 -srr

ipvsadm -a -t10.10.120.193:80 -r10.10.120.210:8000 -g

ipvsadm -a -t10.10.120.193:80 -r10.10.120.211:8000 -g

-g 就意味著使用直接路由的方式轉(zhuǎn)發(fā)數(shù)據(jù)包

LVS-DR 相較于LVS-NAT的最大優(yōu)勢在于LVS-DR不受調(diào)度器寬帶的限制,例如假設(shè)三臺服務(wù)器在WAN交換機出口寬帶都限制為10Mbps,只要對于連接調(diào)度器和兩臺實際服務(wù)器的LAN交換機沒有限速,那么,使用LVS-DR理論上可以達到20Mbps的最大出口寬帶,因為它的實際服務(wù)器的響應(yīng)數(shù)據(jù)包可以不經(jīng)過調(diào)度器而直接發(fā)往用戶端啊,所以它與調(diào)度器的出口寬帶沒有關(guān)系,只能自身的有關(guān)系。而如果使用LVS-NAT,集群只能最大使用10Mbps的寬帶。所以,越是響應(yīng)數(shù)據(jù)包遠遠超過請求數(shù)據(jù)包的服務(wù),就越應(yīng)該降低調(diào)度器轉(zhuǎn)移請求的開銷,也就越能提高整體的擴展能力,最終也就越依賴于WAN出口寬帶。

總的來說,LVS-DR適合搭建可擴展的負載均衡系統(tǒng),不論是Web服務(wù)器還是文件服務(wù)器,以及視頻服務(wù)器,它都擁有出色的性能。前提是你必須為實際器購買一系列的合法IP地址。

六、IP隧道(LVS-TUN)

基于IP隧道的請求轉(zhuǎn)發(fā)機制:將調(diào)度器收到的IP數(shù)據(jù)包封裝在一個新的IP數(shù)據(jù)包中,轉(zhuǎn)交給實際服務(wù)器,然后實際服務(wù)器的響應(yīng)數(shù)據(jù)包可以直接到達用戶端。目前Linux大多支持,可以用LVS來實現(xiàn),稱為LVS-TUN,與LVS-DR不同的是,實際服務(wù)器可以和調(diào)度器不在同一個WANt網(wǎng)段,調(diào)度器通過IP隧道技術(shù)來轉(zhuǎn)發(fā)請求到實際服務(wù)器,所以實際服務(wù)器也必須擁有合法的IP地址。

總體來說,LVS-DR和LVS-TUN都適合響應(yīng)和請求不對稱的Web服務(wù)器,如何從它們中做出選擇,取決于你的網(wǎng)絡(luò)部署需要,因為LVS-TUN可以將實際服務(wù)器根據(jù)需要部署在不同的地域,并且根據(jù)就近訪問的原則來轉(zhuǎn)移請求,所以有類似這種需求的,就應(yīng)該選擇LVS-TUN。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • IP
    IP
    +關(guān)注

    關(guān)注

    5

    文章

    1580

    瀏覽量

    149146
  • DNS
    DNS
    +關(guān)注

    關(guān)注

    0

    文章

    214

    瀏覽量

    19751

原文標題:負載均衡原理的解析

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    實際操作(2)#操作系統(tǒng)

    操作系統(tǒng)
    學習硬聲知識
    發(fā)布于 :2023年05月31日 23:17:27

    串口中斷的實際操作是怎樣的?

    串口通信有哪些類型?串口中斷的實際操作是怎樣的?
    發(fā)表于 12-16 06:32

    基于IXP425的負載均衡系統(tǒng)的設(shè)計與實現(xiàn)

    負載均衡設(shè)備是提高網(wǎng)絡(luò)性能的重要設(shè)備。該文研究負載均衡系統(tǒng)及其算法,對多種算法進行比較后選擇基于agent 的動態(tài)反饋
    發(fā)表于 04-17 09:09 ?25次下載

    負載均衡是什么意思?負載均衡器有什么用

    負載平衡也稱負載共享,是指對系統(tǒng)中的負載情況進行動態(tài)調(diào)整,以盡量消除或減少系統(tǒng)中各節(jié)點負載
    發(fā)表于 12-21 09:48 ?1.9w次閱讀
    <b class='flag-5'>負載</b><b class='flag-5'>均衡</b>是什么意思?<b class='flag-5'>負載</b><b class='flag-5'>均衡</b>器有什么用

    負載均衡服務(wù)器有哪些

    負載均衡服務(wù)器是進行負載分配的服務(wù)器。通過負載均衡服務(wù)器,將服務(wù)請求均衡分配到
    發(fā)表于 12-21 10:02 ?1140次閱讀
    <b class='flag-5'>負載</b><b class='flag-5'>均衡</b>服務(wù)器有哪些

    f5負載均衡和Nginx負載均衡有什么區(qū)別

    負載均衡是分攤到多個操作單元上進行執(zhí)行,建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,提供了一種廉價有效透明的方法擴展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。市場上有很多的
    發(fā)表于 01-01 18:41 ?8913次閱讀
    f5<b class='flag-5'>負載</b><b class='flag-5'>均衡</b>和Nginx<b class='flag-5'>負載</b><b class='flag-5'>均衡</b>有什么區(qū)別

    基于java的負載均衡算法解析及源碼分享

    負載均衡的算法實際上就是解決跨系統(tǒng)調(diào)用的時候,在考慮后端機器承載情況的前提下,保證請求分配的平衡和合理。下面是基于java的負載
    發(fā)表于 01-01 19:29 ?2189次閱讀

    RFID的案例解析與實際操作的詳細資料說明

    本文檔的主要內(nèi)容詳細介紹的是RFID的案例解析與實際操作的詳細資料說明。主要內(nèi)容包括了:一,概要性介紹二,各領(lǐng)域典型案例簡析三,實際案例詳解四,如何成功實現(xiàn)RFID解決方案五,需求分析六,硬件選擇七,軟件設(shè)計
    發(fā)表于 12-17 08:00 ?36次下載
    RFID的案例解析與<b class='flag-5'>實際操作</b>的詳細資料說明

    負載均衡創(chuàng)建的操作步驟

    一個負載均衡實例可以添加多個監(jiān)聽和后端服務(wù)器。
    的頭像 發(fā)表于 04-04 17:17 ?2354次閱讀

    簡述BOD測定儀在實際操作中的應(yīng)用和注意事項

    BOD測定儀在實際操作中的應(yīng)用和注意事項
    的頭像 發(fā)表于 09-28 17:54 ?2376次閱讀

    全面剖析HAProxy 負載均衡

    HAProxy是什么 HAProxy 是一個免費的負載均衡軟件,可以運行于大部分主流的 Linux 操作系統(tǒng)上。 HAProxy 提供了L4(TCP)和L7(HTTP)兩種負載
    的頭像 發(fā)表于 06-28 09:22 ?2225次閱讀
    全面剖析HAProxy <b class='flag-5'>負載</b><b class='flag-5'>均衡</b>器

    服務(wù)器負載均衡有幾種類型,做負載均衡好在哪

    對于服務(wù)器負載均衡可能很多朋友并不了解是什么,服務(wù)器負載均衡的簡單理解就是指對系統(tǒng)中的負載情況進
    的頭像 發(fā)表于 09-02 17:57 ?3208次閱讀

    解密負載均衡技術(shù)和負載均衡算法

    負載均衡器是一種軟件或硬件設(shè)備,它起到了將網(wǎng)絡(luò)流量分散到一組服務(wù)器的作用,可以防止任何一臺服務(wù)器過載。負載均衡算法就是負載
    的頭像 發(fā)表于 11-12 09:16 ?1073次閱讀

    BGA返修臺在實際操作中的注意事項有哪些?

    BGA返修臺在實際操作中,應(yīng)謹慎操作,注意事項非常重要,以下就來詳細介紹BGA返修臺在實際操作中的注意事項。
    的頭像 發(fā)表于 06-07 13:47 ?776次閱讀

    負載均衡是什么

    負載均衡(Server Load Balancing,簡稱SLB)是指我們火傘云對多臺云服務(wù)器進行流量分發(fā)的網(wǎng)絡(luò)服務(wù)設(shè)備。它可以通過流量分發(fā),快速提高應(yīng)用系統(tǒng)對外的服務(wù)能力;隱藏實際
    的頭像 發(fā)表于 07-05 15:07 ?1106次閱讀
    <b class='flag-5'>負載</b><b class='flag-5'>均衡</b>是什么