當前位置:編程學習大全網 - 源碼下載 - 美團面試題:如何設計負載均衡架構支撐千萬級用戶的高並發訪問?

美團面試題:如何設計負載均衡架構支撐千萬級用戶的高並發訪問?

1.1 負載均衡介紹

1.1.1 負載均衡的妙用

1.1.2 為什麽要用lvs

那為什麽要用lvs呢?

ü 簡單壹句話,當並發超過了Nginx上限,就可以使用LVS了。

ü 日1000-2000W PV或並發請求1萬以下都可以考慮用Nginx。

ü 大型門戶網站,電商網站需要用到LVS。

1.2 LVS介紹

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是壹個虛擬的服務器集群系統,可以在UNIX/LINUX平臺下實現負載均衡集群功能。該項目在1998年5月由章文嵩博士組織成立,是 中國國內最早出現的自由軟件項目之壹

1.2.1 相關參考資料

LVS官網: blogs.com/clsn/p/7904611.html

Nginx:

blogs.com/clsn/p/7750615.html

1.3.2 安裝ipvsadm管理工具

安裝管理工具

查看當前LVS狀態,順便激活LVS內核模塊。

查看系統的LVS模塊。

1.3.3 LVS集群搭建

命令集 :

檢查結果 :

ipvsadm參數說明: (更多參照 man ipvsadm)

1.3.4 在web瀏覽器配置操作

命令集 :

至此LVS集群配置完畢 !

1.3.5 進行訪問測試

瀏覽器訪問:

命令行測試:

抓包查看結果:

arp解析查看:

1.4 負載均衡(LVS)相關名詞

術語說明:

1.4.1 LVS集群的工作模式--DR直接路由模式

DR模式是通過改寫請求報文的目標MAC地址,將請求發給真實服務器的,而真實服務器將響應後的處理結果直接返回給客戶端用戶。

DR技術可極大地提高集群系統的伸縮性。但要求調度器LB與真實服務器RS都有壹塊物理網卡連在同壹物理網段上,即必須在同壹局域網環境。

DR直接路由模式說明:

a)通過在調度器LB上修改數據包的目的MAC地址實現轉發。註意,源IP地址仍然是CIP,目的IP地址仍然是VIP。

b)請求的報文經過調度器,而RS響應處理後的報文無需經過調度器LB,因此,並發訪問量大時使用效率很高,比Nginx代理模式強於此處。

c)因DR模式是通過MAC地址的改寫機制實現轉發的,因此,所有RS節點和調度器LB只能在同壹個局域網中。需要註意RS節點的VIP的綁定(lo:vip/32)和ARP抑制問題。

d)強調壹下:RS節點的默認網關不需要是調度器LB的DIP,而應該直接是IDC機房分配的上級路由器的IP(這是RS帶有外網IP地址的情況),理論上講,只要RS可以出網即可,不需要必須配置外網IP,但走自己的網關,那網關就成為瓶頸了。

e)由於DR模式的調度器僅進行了目的MAC地址的改寫,因此,調度器LB無法改變請求報文的目的端口。LVS DR模式的辦公室在二層數據鏈路層(MAC),NAT模式則工作在三層網絡層(IP)和四層傳輸層(端口)。

f)當前,調度器LB支持幾乎所有UNIX、Linux系統,但不支持windows系統。真實服務器RS節點可以是windows系統。

g)總之,DR模式效率很高,但是配置也較麻煩。因此,訪問量不是特別大的公司可以用haproxy/Nginx取代之。這符合運維的原則:簡單、易用、高效。日1000-2000W PV或並發請求1萬以下都可以考慮用haproxy/Nginx(LVS的NAT模式)

h)直接對外的訪問業務,例如web服務做RS節點,RS最好用公網IP地址。如果不直接對外的業務,例如:MySQL,存儲系統RS節點,最好只用內部IP地址。

DR的實現原理和數據包的改變

(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP

(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

(c) IPVS比對數據包請求的服務是否為集群服務,若是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標MAC地址為RIP的MAC地址

(d) 由於DS和RS在同壹個網絡中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標MAC地址為RIP的MAC地址,那麽此時數據包將會發至Real Server。

(e) RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo接口傳送給eth0網卡然後向外發出。 此時的源IP地址為VIP,目標IP為CIP

(f) 響應報文最終送達至客戶端

1.5 在web端的操作有什麽含義?

1.5.1 RealServer為什麽要在lo接口上配置VIP?

既然要讓RS能夠處理目標地址為vip的IP包,首先必須要讓RS能接收到這個包。

在lo上配置vip能夠完成接收包並將結果返回client。

1.5.2 在eth0網卡上配置VIP可以嗎?

不可以,將VIP設置在eth0網卡上,會影響RS的arp請求,造成整體LVS集群arp緩存表紊亂,以至於整個負載均衡集群都不能正常工作。

1.5.3 為什麽要抑制ARP響應?

① arp協議說明

為了提高IP轉換MAC的效率,系統會將解析結果保存下來,這個結果叫做ARP緩存。

ARP緩存表是把雙刃劍

ARP廣播進行新的地址解析

測試命令

windows查看arp -a

③arp_announce和arp_ignore詳解

lvs在DR模式下需要關閉arp功能

arp_announce

對網絡接口上,本地IP地址的發出的,ARP回應,作出相應級別的限制:

確定不同程度的限制,宣布對來自本地源IP地址發出Arp請求的接口

arp_ignore 定義

對目標地定義對目標地址為本地IP的ARP詢問不同的應答模式0

抑制RS端arp前的廣播情況

抑制RS端arp後廣播情況

1.6 LVS集群的工作模式

DR(Direct Routing)直接路由模式

NAT(Network Address Translation)

TUN(Tunneling)隧道模式

FULLNAT(Full Network Address Translation)

1.6.1 LVS集群的工作模式--NAT

通過網絡地址轉換,調度器LB重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器,真實服務器的響應報文處理之後,返回時必須要通過調度器,經過調度器時報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。

收費站模式---來去都要經過LB負載均衡器。

NAT方式的實現原理和數據包的改變

(a). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP

(b). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

(c). IPVS比對數據包請求的服務是否為集群服務,若是,修改數據包的目標IP地址為後端服務器IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP

(d). POSTROUTING鏈通過選路,將數據包發送給Real Server

(e). Real Server比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP為RIP,目標IP為CIP

(f). Director Server在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然後響應給客戶端。 此時報文的源IP為VIP,目標IP為CIP

LVS-NAT模型的特性

l RS應該使用私有地址,RS的網關必須指向DIP

l DIP和RIP必須在同壹個網段內

l 請求和響應報文都需要經過Director Server,高負載場景中,Director Server易成為性能瓶頸

l 支持端口映射

l RS可以使用任意操作系統

l 缺陷:對Director Server壓力會比較大,請求和響應都需經過director server

1.6.2 LVS集群的工作模式--隧道模式TUN

采用NAT技術時,由於請求和響應的報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成為瓶頸。

為了解決這個問題,調度器把請求的報文通過IP隧道(相當於ipip或ipsec )轉發至真實服務器,而真實服務器將響應處理後直接返回給客戶端用戶,這樣調度器就只處理請求的入站報文。

由於壹般網絡服務應答數據比請求報文大很多,采用 VS/TUN技術後,集群系統的最大吞吐量可以提高10倍。

VS/TUN工作流程,它的連接調度和管理與VS/NAT中的壹樣,只是它的報文轉發方法不同。

調度器根據各個服務器的負載情況,連接數多少,動態地選擇壹臺服務器,將原請求的報文封裝在另壹個IP報文中,再將封裝後的IP報文轉發給選出的真實服務器。

真實服務器收到報文後,先將收到的報文解封獲得原來目標地址為VIP地址的報文, 服務器發現VIP地址被配置在本地的IP隧道設備上(此處要人為配置),所以就處理這個請求,然後根據路由表將響應報文直接返回給客戶。

TUN原理和數據包的改變

(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP 。

(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

(c) IPVS比對數據包請求的服務是否為集群服務,若是,在請求報文的首部再次封裝壹層IP報文,封裝源IP為為DIP,目標IP為RIP。然後發至POSTROUTING鏈。 此時源IP為DIP,目標IP為RIP

(d) POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(因為在外層封裝多了壹層IP首部,所以可以理解為此時通過隧道傳輸)。 此時源IP為DIP,目標IP為RIP

(e) RS接收到報文後發現是自己的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裏面還有壹層IP首部,而且目標是自己的lo接口VIP,那麽此時RS開始處理此請求,處理完成之後,通過lo接口送給eth0網卡,然後向外傳遞。 此時的源IP地址為VIP,目標IP為CIP

(f) 響應報文最終送達至客戶端

LVS-Tun模型特性

1.6.3 LVS集群的工作模式--FULLNAT

LVS的DR和NAT模式要求RS和LVS在同壹個vlan中,導致部署成本過高;TUNNEL模式雖然可以跨vlan,但RealServer上需要部署ipip隧道模塊等,網絡拓撲上需要連通外網,較復雜,不易運維。

為了解決上述問題,開發出FULLNAT

該模式和NAT模式的區別是:數據包進入時,除了做DNAT,還做SNAT(用戶ip->內網ip)

從而實現LVS-RealServer間可以跨vlan通訊,RealServer只需要連接到內網。類比地鐵站多個閘機。

1.7 IPVS調度器實現了如下八種負載調度算法:

a) 輪詢(Round Robin)RR

調度器通過"輪叫"調度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每壹臺服務器,而不管服務器上實際的連接數和系統負載。

b) 加權輪叫(Weighted Round Robin)WRR

調度器通過"加權輪叫"調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。

調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

c) 最少鏈接(Least Connections) LC

調度器通過"最少連接"調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。

如果集群系統的真實服務器具有相近的系統性能,采用"最小連接"調度算法可以較好地均衡負載。

d) 加權最少鏈接(Weighted Least Connections) Wlc

在集群系統中的服務器性能差異較大的情況下,調度器采用"加權最少鏈接"調度算法優化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

e) 基於局部性的最少鏈接(Locality-Based Least Connections) Lblc

"基於局部性的最少鏈接" 調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。

該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器 是可用的且沒有超載,將請求發送到該服務器。

若服務器不存在,或者該服務器超載且有服務器處於壹半的工作負載,則用"最少鏈接"的原則選出壹個可用的服務 器,將請求發送到該服務器。

f) 帶復制的基於局部性最少鏈接(Locality-Based Least Connections with Replication)

"帶復制的基於局部性最少鏈接"調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。

它與LBLC算法的不同之處是它要維護從壹個 目標IP地址到壹組服務器的映射,而LBLC算法維護從壹個目標IP地址到壹臺服務器的映射。

該算法根據請求的目標IP地址找出該目標IP地址對應的服務 器組,按"最小連接"原則從服務器組中選出壹臺服務器,若服務器沒有超載,將請求發送到該服務器。

若服務器超載,則按"最小連接"原則從這個集群中選出壹 臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。

同時,當該服務器組有壹段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的 程度。

g) 目標地址散列(Destination Hashing) Dh

"目標地址散列"調度算法根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

h) 源地址散列(Source Hashing)SH

"源地址散列"調度算法根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器。

若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

1.8 LVS+Keepalived方案實現

1.8.1 keepalived功能

1. 添加VIP

2. 添加LVS配置

3. 高可用(VIP漂移)

4. web服務器 健康 檢查

1.8.2 在負載器安裝Keepalived軟件

# 檢查軟件是否安裝

1.8.3 修改配置文件

lb03上keepalied配置文件

lb04的Keepalied配置文件

keepalived persistence_timeout參數意義 LVS Persistence 參數的作用

/nimasike/article/details/53911363

1.8.4 啟動keepalived服務

1.8.5 在web服務器上進行配置

註意:web服務器上的配置為臨時生效,可以將其寫入rc.local文件,註意文件的執行權限。

使用curl命令進行測試

至此keepalived+lvs配置完畢

1.9 常見LVS負載均衡高可用解決方案

? 開發類似keepalived的腳本,早期的辦法,現在不推薦使用。

? heartbeat+lvs+ldirectord腳本配置方案,復雜不易控制,不推薦使用

? RedHat工具piranha,壹個web界面配置LVS。

? LVS-DR+keepalived方案,推薦最優方案,簡單、易用、高效。

1.9.1 lvs排錯思路

  • 上一篇:電信網絡電視itv出現錯誤代碼1302後重啟機頂又恢復正常了 怎麽解決
  • 下一篇:如何設置淘寶店的名片,店標和簽名
  • copyright 2024編程學習大全網