想學習更多相關知識請看博主的個人部落格
1. LVS官網
LVS 時全球最流程的四層負載均衡開源軟體。
LVS 官網:http://www.linuxvirtualserver.org/
2.Linux Virtual Server
2.1 LVS介紹
LVS:Linux Virtual Server,負載排程器,核心整合,章文嵩(花名 正明), 阿里的四層SLB(Server
Load Balance)是基於LVS+keepalived實現
LVS 相關術語
VS: Virtual Server,負責排程
RS: Real Server,負責真正提供服務
2.2 LVS工作原理
VS根據請求報文的目標IP和目標協議及埠將其排程轉發至某RS,根據排程演算法來挑選RS。LVS是核心
級功能,工作在INPUT鏈的位置,將發往INPUT的流量進行“處理”
範例:檢視核心支援LVS
[root@centos8 ~]#grep -i -C 10 ipvs /boot/config-4.18.0-147.el8.x86_64
...(省略部分內容)...
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MATCH_POLICY=m
...(省略部分內容)...
#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y #
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_FO=m #新增
CONFIG_IP_VS_OVF=m #新增
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
# CONFIG_IP_VS_MH is not set
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
...(省略部分內容)...
2.3 LVS叢集體系架構
2.4 LVS 功能及組織架構
負載均衡的應用場景為高訪問量的業務,提高應用程式的可用性和可靠性。
2.4.1 應用於高訪問量的業務
如果您的應用訪問量很高,可以通過配置監聽規則將流量分發到不同的雲伺服器 ECS(Elastic
Compute Service 彈性計算服務)例項上。此外,可以使用會話保持功能將同一客戶端的請求轉發到同
一臺後端ECS
2.4.2 擴充套件應用程式
可以根據業務發展的需要,隨時新增和移除ECS例項來擴充套件應用系統的服務能力,適用於各種Web服務
器和App伺服器。
2.4.3 消除單點故障
可以在負載均衡例項下新增多臺ECS例項。當其中一部分ECS例項發生故障後,負載均衡會自動遮蔽故
障的ECS例項,將請求分發給正常執行的ECS例項,保證應用系統仍能正常工作
2.4.4 同城容災 (多可用區容災)
為了提供更加穩定可靠的負載均衡服務,阿里雲負載均衡已在各地域部署了多可用區以實現同地域容
災。當主可用區出現機房故障或不可用時,負載均衡仍然有能力在非常短的時間內(如:大約30s中
斷)切換到另外一個備可用區恢復服務能力;當主可用區恢復時,負載均衡同樣會自動切換到主可用區
提供服務。
使用負載均衡時,您可以將負載均衡例項部署在支援多可用區的地域以實現同城容災。此外,建議您結
合自身的應用需要,綜合考慮後端伺服器的部署。如果您的每個可用區均至少新增了一臺ECS例項,那
麼此種部署模式下的負載均衡服務的效率是最高的。
如下圖所示,在負載均衡例項下繫結不同可用區的ECS例項。正常情況下,使用者訪問流量將同時轉至發
主、備可用區內的ECS例項;當可用區A發生故障時,使用者訪問流量將只轉發至備可用區內的ECS例項。
此種部署既可以避免因為單個可用區的故障而導致對外服務的不可用,也可以通過不同產品間可用區的
選擇來降低延遲。
如果採取如下圖所示的部署方案,即在負載均衡例項的主可用區下繫結多臺ECS例項,而在備可用區沒
有任何ECS例項。當主可用區發生故障時會造成業務中斷,因為備可用區沒有ECS例項來接收請求。這
樣的部署方式很明顯是以犧牲高可用性為代價來獲取低延時。
2.4.5 跨地域容災
您可以在不同地域下部署負載均衡例項,並分別掛載相應地域內不同可用區的ECS。上層利用雲解析做
智慧DNS,將域名解析到不同地域的負載均衡例項服務地址下,可實現全域性負載均衡。當某個地域出現
不可用時,暫停對應解析即可實現所有使用者訪問不受影響。
2.5 LVS應用場景
2.5.1 音視訊大流量場景
物件儲存(Object Storage Service,簡稱OSS),是阿里雲對外提供的海量、安全和高可靠的雲端儲存服務
音視訊海量流量自動分發
音視訊應用中由於使用者與主播之間需要實時大量的互動,因此,使用者的流量非常大,而直播業務的波峰
波谷效應明顯,這對整個系統的彈性、穩定性和可用性帶來了巨大的挑戰
提高橫向擴充套件能力
新增或刪減負載均衡後端的伺服器實時生效,可根據業務流量大小實時增減
抵禦海量流量
業務發展快,訪問流量巨大,負載均衡可對多臺雲伺服器進行流量分發服務
提升應用可用性
負載均衡提供後端伺服器的健康檢查,實時遮蔽異常伺服器,提升系統可用性
2.5.2 網路遊戲動靜分離場景
動靜請求分離,快速穩定交付
遊戲業務有很多圖片等靜態資源需要載入,通過CDN實現全球使用者訪問靜態資源的加速;當使用者在遊戲
中有互動時,產生的訪問流量非常大,此時為了保證互動實時性,需要使用負載均衡進行流量分發
動態請求流量分發
動態請求量大,採用多臺雲伺服器計算處理,並利用負載均衡服務隨時進行流量分發
靜態請求快速載入
靜態內容選擇物件儲存,接入CDN服務,進一步優化內容分發鏈路,讓內容即刻載入
2.5.3 多層次容災架構場景
跨地域跨可用區的容災方案
使用者業務遍佈各地域,使用雲解析DNS將不同地域使用者智慧解析訪問到相應的業務系統內,使用負載均
衡進行海量的訪問流量分發,還可構建地域級、可用區級的多層容災架構
智慧解析
智慧判斷提供最佳的訪問解析地址,使訪問使用者獲得最快捷、最流暢的體驗
流量分發
業務發展快,訪問流量巨大,負載均衡可對多臺雲伺服器進行流量分發服務
多層次容災
雲解析提供跨地域的高可用,負載均衡可實現可用區級的高可用
2.5.4 海量訪問流量分發場景
2.6 LVS叢集型別中的術語
VS:Virtual Server,Director Server(DS), Dispatcher(排程器),Load Balancer
RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)
CIP:Client IP
VIP:Virtual serve IP VS外網的IP
DIP:Director IP VS內網的IP
RIP:Real server IP
訪問流程:CIP <--> VIP == DIP <--> RIP
3 LVS 工作模式和相關命令
3.1 LVS叢集的工作模式
lvs-nat:修改請求報文的目標IP,多目標IP的DNAT
lvs-dr:操縱封裝新的MAC地址
lvs-tun:在原請求IP報文之外新加一個IP首部
lvs-fullnat:修改請求報文的源和目標IP
3.1.1 LVS的NAT模式
lvs-nat:本質是多目標IP的DNAT,通過將請求報文中的目標地址和目標埠修改為某挑出的RS的RIP和
PORT實現轉發
(1)RIP和DIP應在同一個IP網路,且應使用私網地址;RS的閘道器要指向DIP
(2)請求報文和響應報文都必須經由Director轉發,Director易於成為系統瓶頸
(3)支援埠對映,可修改請求報文的目標PORT
(4)VS必須是Linux系統,RS可以是任意OS系統
3.1.2 LVS的DR模式
LVS-DR:Direct Routing,直接路由,LVS預設模式,應用最廣泛,通過為請求報文重新封裝一個MAC首部
進行轉發,源MAC是DIP所在的介面的MAC,目標MAC是某挑選出的RS的RIP所在介面的MAC地址;源
IP/PORT,以及目標IP/PORT均保持不變
DR模式的特點:
-
Director和各RS都配置有VIP
-
確保前端路由器將目標IP為VIP的請求報文發往Director
-
在前端閘道器做靜態繫結VIP和Director的MAC地址
-
在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
-
在RS上修改核心引數以限制arp通告及應答級別
/proc/sys/net/ipv4/conf/all/arp_ignore /proc/sys/net/ipv4/conf/all/arp_announce
-
-
RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網路;RIP的閘道器不能指向
DIP,以確保響應報文不會經由Director -
RS和Director要在同一個物理網路
-
請求報文要經由Director,但響應報文不經由Director,而由RS直接發往Client
-
不支援埠對映(埠不能修敗)
-
RS可使用大多數OS系統
3.1.3 LVS的TUN模式
轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而在原IP報文之外再封裝一個IP首
部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目
標IP是CIP)
TUN模式特點:
1. DIP, VIP, RIP可以是公網地址
2. RS的閘道器一般不能指向DIP
3. 請求報文要經由Director,但響應不經由Director
4. 不支援埠對映
5. RS的OS須支援隧道功能
3.1.4 LVS的FULLNAT模式
通過同時修改請求報文的源IP地址和目標IP地址進行轉發
CIP --> DIP
VIP --> RIP
fullnat模式特點:
- VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網路;因此,RIP的閘道器一般不會指向
DIP - RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但Director還要將其發往Client
- 請求和響應報文都經由Director
- 支援埠對映
注意:此型別kernel預設不支援
3.1.5 LVS工作模式總結和比較
lvs-nat與lvs-fullnat:
- 請求和響應報文都經由Director
- lvs-nat:RIP的閘道器要指向DIP
- lvs-fullnat:RIP和DIP未必在同一IP網路,但要能通訊
lvs-dr與lvs-tun:
- 請求報文要經由Director,但響應報文由RS直接發往Client
- lvs-dr:通過封裝新的MAC首部實現,通過MAC網路轉發
- lvs-tun:通過在原IP報文外封裝新IP頭實現轉發,支援遠距離通訊