1. 企業級調度器LVS初識、工作模式詳解
想學習更多相關知識請看博主的個人博客
1. LVS官網
LVS 時全球最流程的四層負載均衡開源軟件。
LVS 官網://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頭實現轉發,支持遠距離通信