負載均衡原理的解析

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

不能狹義地理解為分配給所有實際服務(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負責(zé)提供域名解析服務(wù)蔫巩,當訪問某個站點時,實際上首先需要通過該站點域名的DNS服務(wù)器來獲取域名指向的IP地址,在這一過程中圆仔,DNS服務(wù)器完成了域名到IP地址的映射垃瞧,同樣,這樣映射也可以是一對多的坪郭,這時候个从,DNS服務(wù)器便充當了負載均衡調(diào)度器,它就像http重定向轉(zhuǎn)換策略一樣歪沃,將用戶的請求分散到多臺服務(wù)器上嗦锐,但是它的實現(xiàn)機制完全不同。

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

image

可見baidu擁有三個A記錄

相比http重定向沪曙,基于DNS的負載均衡完全節(jié)省了所謂的主站點奕污,或者說DNS服務(wù)器已經(jīng)充當了主站點的職能。但不同的是液走,作為調(diào)度器碳默,DNS服務(wù)器本身的性能幾乎不用擔(dān)心。因為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模塊熙揍,可以

image

有輸出意味著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 -t 111.11.11.11:80 -r 10.10.120.210:8000 -m

ipvsadm -a -t 111.11.11.11:80 -r 10.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ù)器中運行:

image

另外還要防止實際服務(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 -t 10.10.120.193:80 -s rr

ipvsadm -a -t 10.10.120.193:80 -r 10.10.120.210:8000 -g

ipvsadm -a -t 10.10.120.193:80 -r 10.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豹休。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炊昆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子威根,更是在濱河造成了極大的恐慌凤巨,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件医窿,死亡現(xiàn)場離奇詭異磅甩,居然都是意外死亡,警方通過查閱死者的電腦和手機姥卢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門卷要,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人独榴,你說我怎么就攤上這事僧叉。” “怎么了棺榔?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵瓶堕,是天一觀的道長。 經(jīng)常有香客問我症歇,道長郎笆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任忘晤,我火速辦了婚禮宛蚓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘设塔。我一直安慰自己凄吏,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著痕钢,像睡著了一般图柏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上任连,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天蚤吹,我揣著相機與錄音,去河邊找鬼课梳。 笑死距辆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的暮刃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼爆土,長吁一口氣:“原來是場噩夢啊……” “哼椭懊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起步势,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤氧猬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坏瘩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盅抚,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年倔矾,在試婚紗的時候發(fā)現(xiàn)自己被綠了妄均。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡哪自,死狀恐怖丰包,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壤巷,我是刑警寧澤邑彪,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站胧华,受9級特大地震影響寄症,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矩动,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一有巧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铅忿,春花似錦剪决、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽享言。三九已至,卻和暖如春渗鬼,著一層夾襖步出監(jiān)牢的瞬間览露,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工譬胎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留差牛,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓堰乔,卻偏偏與公主長得像偏化,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子镐侯,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 【摘要】 面對大量用戶訪問侦讨、高并發(fā)請求,海量數(shù)據(jù)苟翻,可以使用高性能的服務(wù)器韵卤、大型數(shù)據(jù)庫,存儲設(shè)備崇猫,高性能Web服務(wù)器...
    靜修佛緣閱讀 4,537評論 0 24
  • 開頭先理解一下所謂的“均衡”不能狹義地理解為分配給所有實際服務(wù)器一樣多的工作量沈条,因為多臺服務(wù)器的承載能力各不相同,...
    野柳閱讀 1,895評論 0 1
  • 當前大多數(shù)的互聯(lián)網(wǎng)系統(tǒng)都使用了服務(wù)器集群技術(shù)澈魄,集群是將相同服務(wù)部署在多臺服務(wù)器上構(gòu)成一個集群整體對外提供服務(wù)景鼠,這些...
    jiangmo閱讀 12,868評論 3 36
  • 本文部分觀點圖片采用于:http://chenx1242.blog.51cto.com 隨著智能機的逐漸普及,大量...
    BossHuang閱讀 3,131評論 0 16
  • 【讀經(jīng)】 代上3-4章 【感動】 本章中有兩個特殊的人:雅比斯和迦勒痹扇,這兩個人出身很普通铛漓,不是王室家族也非貴族,但...
    chanor閱讀 336評論 0 0