lvs原理及實戰部署

一、集群與分布式系統

1 集群

1-1概念

集群式架構是將多個相同或相似的節點組合在一起,形成一個邏輯上的 “整體”,對外提供統一的服務或資源。節點之間通常具有較高的同構性(硬件、軟件配置相似),且緊密協作。

1-2 三種類型

高可用(High Availability )
高可用是指系統在長時間內保持穩定運行、減少停機時間的能力,核心是通過容錯設計避免單點故障。
核心目標:
  • 減少停機時間:通過冗余、自動故障轉移等機制,確保服務 “不間斷”(或中斷時間極短)。
  • 提升可靠性:即使部分節點故障,系統仍能正常提供服務。
關鍵指標:

可用性等級,通常用 “幾個 9” 表示,例如:

  • 99.9%:每年允許停機約 8.76 小時。
  • 99.99%:每年允許停機約 52.56 分鐘。
  • 99.999%:每年允許停機約 5.26 分鐘(“五個九”,高可用系統的常見目標)。
負載均衡(Load Balance )
負載均衡是一種分配網絡請求或計算任務到多個節點的技術,目的是避免單一節點過載,提升系統整體性能和穩定性。
核心目標:
  • 均衡負載:將流量 / 任務分散到多個節點,防止某節點因壓力過大宕機。
  • 提高吞吐量:通過并行處理提升系統的并發能力(如同時處理更多用戶請求)。
  • 擴展靈活性:可通過增加節點輕松擴展系統容量(水平擴展)。
高性能計算(High-Performance Computing)
高性能計算是通過多節點并行計算處理復雜、大規模計算任務的技術,核心是提升計算速度和處理能力。
核心目標:
  • 解決大規模問題:處理單臺計算機無法完成的復雜任務(如氣候模擬、基因測序、流體力學分析)。
  • 并行計算:將任務拆分到多個節點,同時計算并匯總結果,大幅縮短處理時間。

3-3典型應用場景

負載均衡集群:如 Web 服務器集群(Nginx、Apache 集群),通過分發請求避免單點過載。

高可用集群:如數據庫集群(MySQL 主從、PostgreSQL 流復制),確保服務不中斷。

2 分布式

2-1 概念

分布式架構是將一個復雜的系統拆分為多個獨立的子系統(節點),每個節點負責一部分功能,通過網絡協同完成整體任務。節點之間可以異構,且分工明確。

2-2 典型應用場景:

  • 分布式服務架構:如微服務系統(Spring Cloud、Dubbo),將業務拆分為獨立服務。
  • 分布式存儲:如 HDFS(分布式文件系統)、Ceph,將數據分散存儲在多個節點。
  • 分布式計算:比如Hadoop集群,將計算任務分發到多個節點并行處理。
  • 分布式數據庫:如 MongoDB 分片集群、TiDB,數據分散存儲在不同節點,提升讀寫性能。

區別與聯系

分布式是并聯工作的,集群是串聯工作的。

分布式是以縮短單個任務的執行時間來提升效率的,而集群則是通過提高單位時間內執行的任務數來提升效率

分布式中的每一個節點,都可以做集群。 而集群并不一定就是分布式的。

分布式一個業務拆分成多個子業務,每個子業務分別部署在不同的服務器上,如果某臺服務器掛掉,那么這塊業務會隨服務器一快損失

集群則是同一個業務部署在多臺服務器上,即便某臺服務器掛掉,其他服務器立刻頂上,不會對業務造成過大影響

二、lvs簡介

1 概念

LVS(Linux Virtual Server)是一個開源的**負載均衡軟件,由中國工程師章文嵩博士主導開發。它基于 Linux 內核,通過 IP 層的流量分發實現高性能負載均衡,廣泛應用于大型網站、分布式系統和云計算環境中。

2 名詞解釋

VS:Virtual Server		 		 調度器
RS:RealServer			 		負責真正提供服務的服務器
CIP:Client IP					客戶端IP
VIP: Virtual serve IP 	  		 調度器外網IP
DIP: Director IP 				調度器內網的IP
RIP: Real server IP				真實服務器IP

3 lvs集群體系結構

在這里插入圖片描述

工作原理

VS根據請求報文的目標IP和目標協議及端口進行修改(根據模式更改)并調度轉發到某一個RS(根據調度算法挑選)。

訪問流程

CIP<->VIP==DIP<->RIP

架構

負載均衡層(Load Balancer):
一臺或多臺LVS服務器構成負載調度器,也稱為Director Server。
負責接收客戶端的請求,并根據調度算法將請求分發給后端的Real Server。
監控Real Server的健康狀況,動態地從LVS路由表中添加或剔除不健康的服務器。

服務器群組層(Server Array):
由一臺或多臺實際運行的應用服務器構成,也稱為Real Server。
負責處理LVS分發過來的請求,并將處理結果返回給客戶端。
Real Server之間可以通過有效網絡互連,實現數據的共享和通信。

共享存儲層(Shared Storage)(可選):
提供共享存儲空間和內容一致性的存儲區域,如數據庫、OSS存儲、FS文件服務器等。
在需要共享數據或資源的分布式系統中,共享存儲層是不可或缺的。

三、工作模式

NAT模式

地址轉換:Network Address Translation,簡稱:NAT 模式,類似于防火墻的私有網絡結構,負載調度器作為所有服務器節點的網關,作為客戶機的訪問入口,也是各節點回應客戶機的訪問出口,服務器節點使用私有 IP 地址,與負載調度器位于同一個物理網絡,安全性要優于其他兩種方式

  • 雙向地址轉換:請求階段用 DNAT,響應階段用 SNAT,所有數據必須經過 LVS。
  • 后端服務器隱藏:RS 僅需與 LVS 私網通信,無需暴露公網,安全性高。
  • 性能瓶頸:LVS 是數據傳輸的唯一出入口,高并發場景下可能成為帶寬或處理能力瓶頸。
  • 適用場景:小規模后端集群(通常 RS 數量≤10 臺),對成本敏感且安全性要求較高的場景。

實現原理

在這里插入圖片描述

5Cnat2.jpg&pos_id=img-UbxrOZQ7-1752905953983)

1、 客戶端發出的請求數據包經過網絡到達 LVS 網卡,數據包源 IP 為 CIP,目的 IP 為 VIP。

2、然后進入 PREROUTING 鏈中,根據目的 IP 查找路由,確定是否為本機 IP 地址,隨后將數據包轉發至 INPUT 鏈中,源 IP 和 目的 IP 不變。

3、 到達 LVS 后,通過目的 IP 和目的 PORT 查找是否為 IPVS 服務,如是 IPVS 服務,將會選擇一個 RS 來作為后端服務器,數據包的目的 IP 地址將會修改為 RIP,這時并以 RIP 為目的 IP 去查找路由,確定下一跳及 PORT 信息后,數據包將會轉發至 OUTPUT 鏈中。

4、 被修改過的數據包經過 POSTROUTING 鏈后,到達 RS 服務器,數據包源 IP 為 CIP,目的 IP 為 RIP。

5、 RS 服務器經過處理后,將會把數據包發送至用戶空間的應用程序,待處理完成后,發送響應數據包,RS 服務器的默認網關為 LVS 的 IP,應用程序將會把數據包轉發至下一跳 LVS 服務器,數據包源 IP 為 RIP,目的 IP 為 CIP。

6、 LVS 服務器收到 RS 服務器響應的數據包后,查找路由,目的 IP 不是本機 IP并且 LVS 服務器開啟了 FORWARD 模式,會將數據包轉發給它,數據包不變。

7、 LVS 服務器收到響應數據包后,根據目的 IP 和 目的 PORT 查找相應的服務,這時,源 IP 為 VIP,通過查找路由,確定下一跳信息

注意

1.RIP和DIP應在同一個IP網絡,且應使用私網地址;RS的網關要指向DIP
2.請求報文和響應報文都必須經由Director轉發,Director易成為系統瓶頸
3.支持端口映射,可修改請求報文的目標PORT
4.VS必須是Linux系統,RS可以是任意OS系統

NAT 模式的優缺點

一、優點

  1. 部署簡單,網絡架構要求低:后端服務器(RS)只需將默認網關指向 LVS 的 DIP,對 RS 的操作系統和應用無特殊要求,兼容性強(支持 Linux、Windows 等)。LVS 與 RS 可不在同一網段,網絡拓撲靈活,適合跨網段部署場景。
  2. 安全性較高:后端服務器隱藏在私有網絡中,不直接暴露公網,僅通過 LVS 的 VIP 對外提供服務,可減少 RS 被直接攻擊的風險。
  3. 支持端口映射:可在 LVS 上配置 VIP 端口與 RS 端口的映射,適合后端服務端口不一致的場景。

二、缺點

  1. 性能瓶頸明顯:所有數據包必須經過 LVS,LVS 需對每個包進行 IP 地址轉換,計算開銷大,容易成為系統瓶頸。
  2. 網絡延遲較高:響應數據包需從 RS→LVS→客戶端,比 DR 模式的 “RS 直接回客戶端” 多一次轉發,增加了網絡延遲,對實時性要求高的業務(如視頻通話、高頻交易)不友好。

DR模式

DR(Direct Routing,直接路由)模式是一種高性能的負載均衡技術,其核心通過修改數據包的 MAC 地址實現請求分發,且響應數據直接從后端服務器返回給客戶端,大幅減少了負載均衡器的流量壓力。

  • 高性能:LVS 僅處理請求分發(改 MAC),響應數據不經過 LVS,避免了帶寬瓶頸,支持大規模后端集群(通常可承載數百臺 RS)。
  • 網絡限制:LVS 與 RS 必須在同一二層網段(共享交換機),否則無法通過 MAC 地址轉發。
  • 安全性:RS 需綁定 VIP,若配置不當可能導致 VIP 沖突;且 RS 可直接與客戶端通信,需做好安全隔離。
  • 適用場景:高并發、大流量場景(如 Web 服務、視頻點播),對性能要求極高的業務。

實現原理

在這里插入圖片描述

  1. 客戶端發出的請求數據包經過網絡到達 LVS 網卡,數據包源 IP 為 CIP(客戶端 IP),目的 IP 為 VIP(虛擬服務 IP)。
  2. 數據包進入 PREROUTING 鏈,LVS 根據目的 IP(VIP)查找路由,確認 VIP 為本機服務 IP 后,將數據包轉發至 INPUT 鏈,此時源 IP(CIP)和目的 IP(VIP)均保持不變。
  3. 到達 LVS 后,通過目的 IP(VIP)和目的 PORT(服務端口)匹配到 IPVS 服務,LVS 根據負載均衡算法選擇一臺 RS(后端服務器)。與 NAT 模式不同,DR 模式不修改目的 IP(仍為 VIP),僅將數據包的目的 MAC 地址修改為選中 RS 的 MAC 地址(R-MAC),隨后以該 MAC 地址為目標查找二層路由,確定下一跳后將數據包轉發至 OUTPUT 鏈。
  4. 被修改 MAC 地址的數據包經過 POSTROUTING 鏈后,通過二層網絡(同網段交換機)送達 RS 服務器。此時數據包的源 IP 仍為 CIP,目的 IP 仍為 VIP(因 RS 的回環網卡已綁定 VIP,可正常接收該數據包)。
  5. RS 服務器接收數據包后,經處理轉發至用戶空間的應用程序,處理完成后生成響應數據包。由于 RS 的默認網關指向客戶端所在網絡的網關(而非 LVS),響應數據包直接通過三層路由發送,源 IP 為 VIP(RS 回環網卡上的 VIP,確保客戶端識別),目的 IP 為 CIP。
  6. 響應數據包不經過 LVS,直接通過公網路由到達客戶端所在網絡,最終送達客戶端。
  7. 客戶端接收響應數據包,其源 IP 為 VIP(與請求的目標 IP 一致),目的 IP 為 CIP,整個過程對客戶端透明,感知不到后端 RS 的存在。

注意

由于所有 RS 的回環網卡都綁定了 VIP,可能導致局域網內的 ARP 沖突(當交換機詢問 “VIP 對應的 MAC 是哪個” 時,多臺 RS 會同時響應)。因此需在 RS 上做ARP 抑制配置
不支持端口映射(端口不能修改)
Director 與所有 RS 必須在同一物理網段(共享二層交換機),依賴 MAC 地址轉發,跨網段會導致失敗。
RS 的默認網關需指向客戶端所在網絡的網關(而非 DIP),確保響應數據包能直接回傳客戶端,不經過 Director。
RS 的lo網卡綁定 VIP 時,需設置子網掩碼為255.255.255.255,避免廣播沖突。

DR模式優缺點

一、優點

  1. 性能極高,吞吐量巨大:DR 模式下,LVS 僅負責修改數據包的 MAC 地址,不修改 IP 地址,避免了 IP 地址轉換的開銷。響應數據包從 RS 直接返回給客戶端,LVS 僅處理入站請求,極大降低了負載均衡器的壓力,可支持大規模并發訪問。
  2. 網絡路徑短,延遲低:客戶端請求經 LVS 轉發至 RS 后,RS 直接回包給客戶端,減少了 “客戶端→LVS→RS→LVS→客戶端” 的冗余路徑,降低了網絡延遲。
  3. 可擴展性強:由于 LVS 負載較輕,理論上可掛載大量后端 RS,適合高并發場景(如電商秒殺、視頻直播等)。

二、缺點

  1. 網絡環境限制嚴格:LVS 和所有 RS 必須在同一物理局域網內,且共享同一個 VIP,因為數據包通過 MAC 地址轉發
  2. VIP 沖突與 ARP 廣播問題需特殊處理:所有 RS 和 LVS 都需配置 VIP(RS 通常在回環接口 lo 上配置 VIP,且需關閉 ARP 響應和廣播,避免客戶端或網關收到多個 VIP 的 ARP 應答導致沖突)。
  3. 后端服務器需與 LVS 同網段,靈活性低:無法像 NAT 模式那樣通過網關跨網段轉發,RS 必須和 LVS 在同一子網,限制了網絡架構的靈活性。

TUN模式

轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而在原IP報文之外再封裝一個IP首部
(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目標IP
是CIP)

實現原理

在這里插入圖片描述

1.客戶端發送請求數據包,包內有源IP+vip+dport
2.到達vs調度器后對客戶端發送過來的數據包重新封裝添加IP報文頭,新添加的IP報文頭中包含
TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并發送到RS1
3.RS收到VS調度器發送過來的數據包做出響應,生成的響應報文中包含SRCIP(VIP)+DSTIP(CIP)
+port,響應數據包通過網絡直接回傳給client
注意

1.DIP, VIP, RIP都應該是公網地址
2.RS的網關一般不能指向DIP
3.請求報文要經由Director,但響應不能經由Director
4.不支持端口映射
5.RS的OS須支持隧道功能

四、lvs調度算法

類型

靜態方法:僅根據算法本身進行調度,不考慮RS的負載情況
動態方法:主要根據每RS當前的負載狀態及調度算法進行調度Overhead=value較小的RS將被調度

靜態算法

  1. 輪詢(Round Robin, rr)
    • 原理:按順序依次將請求分配給 RS,循環往復。
    • 優點:實現簡單,公平分配請求。
    • 缺點:忽略服務器性能差異,可能導致性能弱的服務器過載。
    • 適用場景:后端服務器性能相近的場景。
  2. 加權輪詢(Weighted Round Robin, wrr)
    • 原理:為每個 RS 分配權重(如性能強的服務器權重高),按權重比例分配請求。
    • 優點:根據服務器性能差異化分配,利用率更高。
    • 缺點:權重需人工預設,無法動態適應服務器負載變化。
    • 適用場景:服務器性能差異明顯(如新舊服務器混用)。
  3. 源地址哈希(Source Hashing, sh)
    • 原理:根據客戶端 IP 地址計算哈希值,將同一客戶端的請求始終路由到固定 RS。
    • 優點:實現會話粘性(Session Affinity),適合需保持會話狀態的業務(如購物車)。
    • 缺點:可能導致負載不均(如部分客戶端請求特別頻繁)。
    • 適用場景:有會話保持需求的業務(如 PHP Session、無狀態服務除外)。
  4. 目標地址哈希(Destination Hashing, dh)
    • 原理:根據目標 IP(如 VIP)或端口計算哈希值,將請求路由到固定 RS。
    • 優點:適合內容緩存場景(如 CDN),確保相同內容始終由同一 RS 處理。
    • 缺點:靈活性低,不適合動態業務。
    • 適用場景:內容分發網絡(CDN)、靜態資源緩存。

動態算法

  1. 最小連接(Least Connections, lc)
    • 原理:將請求分配給當前連接數最少的 RS,認為連接數少的服務器負載低。
    • 優點:自動平衡服務器負載,避免單臺服務器過載。
    • 缺點:未考慮連接的活躍程度(如長連接與短連接的差異)。
    • 適用場景:連接生命周期差異不大的業務。
  2. 加權最小連接(Weighted Least Connections, wlc)
    • 原理:在最小連接基礎上,結合服務器性能權重(如active_conns/weight),優先分配給 “單位權重連接數” 最少的 RS。
    • 優點:綜合考慮服務器性能和實時負載,分配更精準。
    • 缺點:需預設權重,且計算復雜度略高。
    • 適用場景:服務器性能差異明顯,且連接生命周期相近的業務。
  3. 最短期望延遲(Shortest Expected Delay, sed)
    • 原理:計算每個 RS 的預期處理時間(overhead=(activeconns+1+inactiveconns) x 256/weight),選擇預期延遲最小的 RS。
    • 優點:相比 wlc,更傾向于為低負載服務器分配新請求,避免高負載服務器堆積請求。
    • 缺點:仍依賴預設權重。
    • 適用場景:連接建立成本較高的業務(如數據庫連接)。
  4. 永不排隊(Never Queue, nq)
    • 原理:若 RS 的連接數為 0,直接分配;否則選擇連接數最少的 RS。
    • 優點:避免新請求在高負載服務器排隊,快速響應。
    • 缺點:可能導致部分服務器過載,部分閑置。
    • 適用場景:對響應時間敏感、請求處理時間差異大的業務。
  5. 基于局部性的最小連接(Locality-Based Least Connections, lblc)
    • 原理:結合源地址哈希和最小連接算法,優先將請求分配給已處理過該客戶端請求且負載較低的 RS,否則選擇全局連接數最少的 RS。
    • 優點:兼顧會話粘性和負載均衡,適合緩存集群(如 Redis 集群)。
    • 缺點:實現復雜度較高。
    • 適用場景:內容緩存、分布式存儲系統。

4.15內核后新增調度算法

1.FO(Weighted Fai Over)調度算法:常用作灰度發布

  • 在此FO算法中,遍歷虛擬服務所關聯的真實服務器鏈表,找到還未過載(未設置IP_VS_DEST_FOVERLOAD標志)的且權重最高的真實服務器,進行調度
  • 當服務器承接大量鏈接,我們可以對此服務器進行過載標記(IP_VS_DEST_F OVERLOAD),那么vs調度器就不會把鏈接調度到有過載標記的主機中。

2.OVF(Overflow-connection)調度算法
基于真實服務器的活動連接數量和權重值實現。將新連接調度到權重值最高的真實服務器,直到其活動
連接數量超過權重值,之后調度到下一個權重值最高的真實服務器,在此OVF算法中,遍歷虛擬服務相關
聯的真實服務器鏈表,找到權重值最高的可用真實服務器。一個可用的真實服務器需要同時滿足以下條
件:

  • 未過載(未設置IP_VS_DEST_F OVERLOAD標志)
  • 真實服務器當前的活動連接數量小于其權重值
  • 其權重值不為零

五、lvs部署命令介紹

lvs軟件相關信息

程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
規則保存工具:/usr/sbin/ipvsadm-save
規則重載工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
ipvs調度規則文件:/etc/sysconfig/ipvsadm

ipvsadm命令

虛擬服務

ipvsadm -A|E -t|u|f 服務/IP/火墻標記 [-s 算法] [-p [超時時間]]
-A #添加
-E #修改
-t #tcp服務
-u #udp服務
-f #firewall mask 火墻標記,是一個數字
-s #指定調度算法,默認為WLC
-p #設置持久連接超時,持久連接可以理解為在同一個時間段同一個來源的請求調度到同一Realserver

真實服務器

ipvsadm -a|e -t|u|f 服務/IP/火墻標記 -r realserver-address [-g|i|m] [-w weight]
-a #添加realserver
-e #更改realserver-t #tcp協議
-u #udp協議
-f #火墻 標簽-r #realserver地址-g #DR模式
-i #TUN模式
-m #NAT模式-w #設定權重

其他

ipvsadm 
-Z #清空計數器
-C #清空lvs策略
-L #查看lvs策略
-n #不做解析
--rate :輸出速率信息

部署NAT模式集群案例

在這里插入圖片描述

實驗環境

主機ip及網卡模式角色
client192.168.60.100 GW:192.168.60.2 NAT模式測試機
lvsvip:eth0 192.168.60.200 NAT模式
dip:eth1 192.168.182.200 僅主機模式
調度器(VS)
rs1192.168.182.210 GW:192.168.60.200 僅主機模式真實服務器(RS)
rs2192.168.182.220 GW:192.168.60.200 僅主機模式真實服務器(RS)

網絡部署

client

vim /etc/NetworkManager/system-connections/eth0.nmconnection
#寫入配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.60.100/24,192.168.60.2
dns=8.8.8.8#使配置生效
nmcli connection reload #重新加載網絡配置
nmcli connection up eth0 #重啟網卡

lvs

#編輯eth0網卡配置文件
vim /etc/NetworkManager/system-connections/eth0.nmconnection
#寫入配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.60.200/24
dns=8.8.8.8#編輯eth1網卡配置文件
vim /etc/NetworkManager/system-connections/eth1.nmconnection
#寫入配置
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
method=manual
address1=192.168.182.200/24
dns=8.8.8.8#使配置生效
nmcli connection reload #重新加載網絡配置
nmcli connection up eth0 	#重啟網卡
nmcli connection up eth1#開啟內核路由功能
#編輯內核參數文件
vim /etc/sysctl.conf
#啟用IP轉發,讓主機內網卡可以通信,使Linux系統充當路由器
net.ipv4.ip_forward = 1
#是配置立即生效
sysctl -p

rs1

vim /etc/NetworkManager/system-connections/eth0.nmconnection
#寫入配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.182.210/24,192.168.182.200 #網關設置為dip, 
dns=8.8.8.8#關閉防火墻
systemctl disable --now firewalld.service

rs2

vim /etc/NetworkManager/system-connections/eth0.nmconnection
#寫入配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.182.220/24,192.168.182.200
dns=8.8.8.8nmcli connection reload #重新加載網絡配置
nmcli connection up eth0 #重啟網卡

程序、文件部署

lvs

#安裝ipvsadm
dnf install ipvsadm-1.31-6.el9.x86_64 -y#關閉防火墻
systemctl disable --now firewalld.service

rs1

#安裝httpd
dnf install httpd
#開啟服務,啟用80端口
systemctl start httpd
#寫入apache默認頁面
echo RS1 192.168.182.210 > /var/www/html/index.html#關閉防火墻
systemctl disable --now firewalld.service

rs2

#安裝httpd
dnf install httpd
#開啟服務,啟用80端口
systemctl start httpd
#寫入apache默認頁面
echo RS2 192.168.182.220 > /var/www/html/index.html#關閉防火墻
systemctl disable --now firewalld.service

添加調度策略

lvs

#添加虛擬服務器 指定其ip和端口192.168.60.200:80 算法為Round Robin(輪詢)
ipvsadm -A -t 192.168.60.200:80 -s rr
#為虛擬服務器指定后端真實服務器 模式為nat
ipvsadm -a -t 192.168.60.200:80 -r 192.168.182.210:80 -m
ipvsadm -a -t 192.168.60.200:80 -r 192.168.182.220:80 -m#保存規則
ipvsadm -Sn > /etc/sysconfig/ipvsadm#設置開機自啟動,需要先將文件規則/etc/sysconfig/ipvsadm
systemctl enable --now ipvsadm.service

測試

client

在這里插入圖片描述

lvs

在這里插入圖片描述

部署DR模式集群案例

在這里插入圖片描述

實驗環境

#五臺主機環境相同
[root@RS2 ~]# hostnamectlStatic hostname: RS2Icon name: computer-vmChassis: vm 🖴Machine ID: a4903574870e4a5680ed175ce460853aBoot ID: 987e45e2cdbe4679833e155842096ebbVirtualization: vmware
Operating System: Red Hat Enterprise Linux 9.4 (Plow)     CPE OS Name: cpe:/o:redhat:enterprise_linux:9::baseosKernel: Linux 5.14.0-427.13.1.el9_4.x86_64Architecture: x86-64Hardware Vendor: VMware, Inc.Hardware Model: VMware Virtual Platform
Firmware Version: 6.00

網絡部署

主機ip及網卡模式角色
client
eth0:192.168.60.100 NAT模式
GW:192.168.60.200
測試機
routeeth0:192.168.60.200 NAT模式
eth1:192.168.182.200 僅主機模式
路由器
lvseth0:192.168.60.230 僅主機模式
vip:192.168.182.100
GW:192.168.182.200
調度器
rs1eth0:192.168.60.210 僅主機模式
vip:192.168.182.100
GW:192.168.182.2
真實服務器
rs2eth0:192.168.60.220 僅主機模式
vip:192.168.182.100
GW:192.168.182.2
真實服務器

client

vim /etc/NetworkManager/system-connections/eth0.nmconnection
#寫入配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.60.100/24,192.168.60.200#使配置生效
nmcli connection reload #重新加載網絡配置
nmcli connection up eth0 #重啟網卡

route

#編輯eth0網卡配置文件
vim /etc/NetworkManager/system-connections/eth0.nmconnection
#寫入配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.60.200/24#編輯eth1網卡配置文件
vim /etc/NetworkManager/system-connections/eth1.nmconnection
#寫入配置
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
method=manual
address1=192.168.182.200/24#使配置生效
nmcli connection reload #重新加載網絡配置
nmcli connection up eth0 	#重啟網卡
nmcli connection up eth1#開啟內核路由功能
#編輯內核參數文件
vim /etc/sysctl.conf
#啟用IP轉發,讓主機內網卡可以通信,使Linux系統充當路由器
net.ipv4.ip_forward = 1
#是配置立即生效
sysctl -p

lvs

#編輯eth0網卡配置文件
vim /etc/NetworkManager/system-connections/eth0.nmconnection
#寫入配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.182.230/24,192.168.182.200#編輯lo網卡配置文件
vim /etc/NetworkManager/system-connections/lo.nmconnection
#寫入配置
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.182.100/32 #vip#修改權限
chmod 600 /etc/NetworkManager/system-connections/lo.nmconnection#使配置生效
nmcli connection reload #重新加載網絡配置
nmcli connection up eth0 	#重啟網卡
nmcli connection up lo#ip 查看配置是否生效,如果ip未添加 
[root@RS1 system-connections]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:1d:88:df brd ff:ff:ff:ff:ff:ffaltname enp3s0altname ens160inet 192.168.182.210/24 brd 192.168.182.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::869f:ac0c:2ae7:302e/64 scope link noprefixroute valid_lft forever preferred_lft forever#查看連接 可以看到有兩個lo
[root@RS1 system-connections]# nmcli connetcion show   
NAME  UUID                                  TYPE      DEVICE 
eth0  7ba00b1d-8cdd-30da-91ad-bb83ed4f7474  ethernet  eth0   
lo    d4597a3b-5641-4c5a-81cd-ccf60082d7f8  loopback  lo
lo    b2baf1f3-48fa-398c-a8e1-e2e1f6a15e21  loopback  -- #刪除第一個lo 配置生效
[root@RS1 system-connections]# nmcli c delete d4597a3b-5641-4c5a-81cd-ccf60082d7f8 
Connection 'lo' (d4597a3b-5641-4c5a-81cd-ccf60082d7f8) successfully deleted.

rs1

#編輯eth0網卡配置文件
vim /etc/NetworkManager/system-connections/eth0.nmconnection
#寫入配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.182.210/24,192.168.182.2#編輯lo網卡配置文件
vim /etc/NetworkManager/system-connections/lo.nmconnection
#寫入配置
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.182.100/32 #vip#修改權限
chmod 600 /etc/NetworkManager/system-connections/lo.nmconnection#使配置生效
nmcli connection reload #重新加載網絡配置
nmcli connection up eth0 	#重啟網卡
nmcli connection up lo#設定lo不對外響應 
vim /etc/sysctl.conf
#寫入
#arp_ignore(ARP 忽略策略):僅當 ARP 請求的目標 IP 配置在接收請求的網卡上時,才響應;否則忽略。
#arp_announce(ARP 宣告策略):強制使用與目標 IP 同網段的本地 IP 作為源 IP(必須同網段,否則不發送)。
net.ipv4.conf.all.arp_ignore =1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore =1
net.ipv4.conf.lo.arp_announce =2
#
sysctl -p

rs2

vim /etc/NetworkManager/system-connections/eth0.nmconnection
#寫入配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.182.220/24,192.168.182.2#編輯lo網卡配置文件
vim /etc/NetworkManager/system-connections/lo.nmconnection
#寫入配置
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.182.100/32 #vip#修改權限
chmod 600 /etc/NetworkManager/system-connections/lo.nmconnection#使配置生效
nmcli connection reload #重新加載網絡配置
nmcli connection up eth0 	#重啟網卡
nmcli connection up lo#設定lo不對外響應 
vim /etc/sysctl.conf
#寫入
net.ipv4.conf.all.arp_ignore =1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore =1
net.ipv4.conf.lo.arp_announce =2
#
sysctl -p

程序、文件部署

lvs

#安裝ipvsadm
dnf install ipvsadm-1.31-6.el9.x86_64 -y#關閉防火墻
systemctl disable --now firewalld.service

rs1

#安裝httpd
dnf install httpd
#開啟服務,啟用80端口
systemctl start httpd
#寫入apache默認頁面
echo RS1 192.168.182.210 > /var/www/html/index.html#關閉防火墻
systemctl disable --now firewalld.service

rs2

#安裝httpd
dnf install httpd
#開啟服務,啟用80端口
systemctl start httpd
#寫入apache默認頁面
echo RS2 192.168.182.220 > /var/www/html/index.html#關閉防火墻
systemctl disable --now firewalld.service

添加調度策略

#添加虛擬服務器 指定其ip和端口192.168.182.100:80 算法為Round Robin(輪詢)
ipvsadm -A -t 192.168.182.100:80 -s rr
#為虛擬服務器指定后端真實服務器 模式為DR
ipvsadm -a -t 192.168.182.100:80 -r 192.168.182.210:80 -g
ipvsadm -a -t 192.168.182.100:80 -r 192.168.182.220:80 -g#保存規則
ipvsadm -Sn > /etc/sysconfig/ipvsadm#設置開機自啟動,需要先將文件規則/etc/sysconfig/ipvsadm
systemctl enable --now ipvsadm.service

測試

client

在這里插入圖片描述

lvs

在這里插入圖片描述

防火墻標記解決輪詢調度問題

現象

在RS中同時開放80和443端口,那么默認控制是分開輪詢的,這樣我們就出現了一個輪詢錯亂的問題,當我第一次訪問80被輪詢到RS1后下次訪問443仍然可能會被輪詢到RS1上

原因

LVS 內核模塊將每個虛擬服務(VIP:Port)視為獨立實體,并且每個實體都擁有自己的:

  • 調度算法實例(如 RR 計數器)
  • 活動連接列表
  • 服務器權重配置

這意味這80和443端口的輪詢序列都是獨立的

解決方法

1.合并端口

本質:讓所有請求(無論是原始 80 還是 443)最終都通過同一個端口(443) 進入負載均衡系統,共享同一套調度上下文

ipvs

# 創建虛擬服務,監聽443端口,使用輪詢(RR)算法
ipvsadm -A -t 192.168.1.1:443 -s rr# 添加后端RS服務器,注意端口為443(假設RS1和RS2都提供HTTPS服務)
ipvsadm -a -t 192.168.1.1:443 -r 192.168.10.1:443 -g  # -g表示DR模式
ipvsadm -a -t 192.168.1.1:443 -r 192.168.10.2:443 -g

iptables 重定向規則(將 80→443)

# 將80端口請求重定向到443
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 443#

rs僅監聽443端口

2.iptables mark 標記

無論合并端口還是標記,核心目標都是打破 “VIP:Port 獨立調度” 的限制

iptables mark

本質通過標記將不同端口的請求邏輯上歸為同一組,讓 LVS 對它們使用同一個調度上下文(共享 RR 計數器)。

MARK 屬于 iptables 的一種目標(target),借助它能夠給通過規則的數據包附上特定數值。這些被標記的數據包可以在后續的規則或者其他網絡子系統(像路由表)中被識別出來,進而實現有針對性的處理。

MARK target 可用于給特定的報文打標記,–set-mark value

value 可為0xffff格式,表示十六進制數字借助于防火墻標記來分類報文,而后基于標記定義集群服
務:可將多個不同的應用使用同一個集群服務進行調度

環境

配置于此不過多贅述,參考DR集群案例

新增配置

rs1,rs2

#安裝加密模塊,實現https協議服務
yum install mod_ssl -y
#重啟httpd,是配置生效
systemctl restart httpd

lvs

# 向mangele PREROUTING鏈 添加規則 用于匹配ip-192.168.182.100 協議-tcp 端口:80\443 ,滿足以上條件者打上標記666
#將80和443歸為同一組,使用同一個集群服務調度
iptables -t mangle -A PREROUTING -d 192.168.182.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 666#寫入規則
ipvsadm -A -f 666 -s rr
ipvsadm -a -f 666 -r 192.168.182.210 -g
ipvsadm -a -f 666 -r 192.168.182.220 -g

測試

連續訪問80,443五次,可以從每次結果看出,完全遵照rr算法結果,每次訪問的主機不同

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89575.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[Linux]如何設置靜態IP位址?

自從將Ubuntu Server 24.04 LTS作業系統建置在VM上後&#xff0c;逐漸導入一些容器和微服務器並使可由其他Client端來連接使用&#xff0c;其中包含AIGC模型和自動化工作流等服務&#xff0c;例如Open-WebUI和n8n。然而&#xff0c;若VM重新開機或路由器因故斷電等等狀態&#…

【Leecode 隨筆】

文章目錄題目一&#xff1a;盛最多水的容器題目描述&#xff1a;題目分析&#xff1a;解題思路&#xff1a;示例代碼&#xff1a;深入剖析&#xff1a;題目二&#xff1a;最長無重復字符的子串題目描述&#xff1a;題目分析&#xff1a;解題思路&#xff1a;示例代碼&#xff1…

Springboot項目應用PageInfo分頁問題失效

使用github的pagehelper分頁依賴<!-- 分頁控件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.0</version><scope>compile</scope></dependency&…

【無標題】標準模型粒子行為與11維拓撲量子色動力學模型嚴格對應的全面論述

標準模型粒子行為與11維拓撲量子色動力學模型嚴格對應的全面論述標準模型粒子與拓撲結構的嚴格對應 mermaid graph LRsubgraph 標準模型粒子A[費米子] --> A1[夸克]A --> A2[輕子]B[玻色子] --> B1[規范玻色子]B --> B2[希格斯]endsubgraph 11維拓撲模型C[實體頂點…

SQL一些關于存儲過程和使用的總結

存儲過程&#xff1a;數據庫里的 "定制工具箱"存儲過程就像一個裝滿工具的箱子&#xff0c;你需要什么功能&#xff0c;就調用對應的工具。它是用 SQL 語句寫好的一段程序&#xff0c;存儲在數據庫里&#xff0c;隨時可以調用。創建存儲過程 就像在工具箱里放新工具。…

springCloud -- 微服務01

目錄 一、認識微服務 1.單體架構 2.微服務 3.SpringCloud 二、微服務拆分 1.服務拆分原則 2.服務調用 3. RestTemplate 三、服務注冊和發現 1. 注冊中心原理 2. 服務發現 2.1 服務注冊 2.2 服務發現 四、OpenFeign 一、認識微服務 1.單體架構 單體架構就是整個項目中所有功能…

Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring 論文閱讀

用于動態場景去模糊的深度多尺度卷積神經網絡 摘要 針對一般動態場景的非均勻盲去模糊是一個具有挑戰性的計算機視覺問題&#xff0c;因為模糊不僅來源于多個物體運動&#xff0c;還來源于相機抖動和場景深度變化。為了去除這些復雜的運動模糊&#xff0c;傳統的基于能量優化的…

PDF 拆分合并PDFSam:開源免費 多文件合并 + 按頁碼拆分 本地處理

各位打工人和學生黨們&#xff0c;你知道嗎&#xff0c;處理PDF文件簡直是咱們的日常噩夢啊&#xff0c;尤其是遇到要合并好幾個文件&#xff0c;或者從中摳幾頁出來的時候&#xff0c;簡直頭大如斗&#xff01;今天給你們安利一個神仙工具&#xff0c;PDFSam&#xff0c;聽我的…

AI產品經理面試寶典第32天:AI+工業場景落地核心問題與應答策略

一、AI+工業落地價值怎么答? 面試官:AI在工業領域能創造哪些核心價值?請用具體案例說明 你的回答: AI在工業領域創造價值的底層邏輯是"數據閉環"。以阿里云ET工業大腦為例,通過采集生產線3000+傳感器數據,構建出影響良品率的60個關鍵變量模型。當數據流經AI…

【09】MFC入門到精通——MFC 屬性頁對話框的 CPropertyPage類 和 CPropertySheet 類

文章目錄九、屬性頁對話框的類CPropertyPage類 和 CPropertySheet 類。9.1 CPropertyPage 類&#xff08;1&#xff09;構造函數&#xff08;2&#xff09;CancelToClose()函數&#xff08;3&#xff09;SetModified()函數&#xff08;4&#xff09;可重載函數9.2 CPropertyShe…

Python學習筆記4

時間:2025.7.18學習內容&#xff1a;【語法基礎】if判斷、比較運算符與邏輯運算符一、if判斷if判斷基本格式&#xff1a;if要判斷的條件&#xff0c;條件成立時要做的事情注意&#xff1a;input內默認存儲的是字符串age17 if age<18:print(未成年不能上網) scoreinput(你的成…

20250718-2-Kubernetes 應用程序生命周期管理-Pod對象:基本概念(豌豆莢)_筆記

二、Kubernetes應用程序生命周期管理&#xfeff;1. 課程內容概述主要內容&#xff1a;Pod資源共享實現機制管理命令應用自修復&#xff08;重啟策略健康檢查&#xff09;環境變量Init container靜態Pod2. Pod對象介紹&#xfeff;1&#xff09;Pod基本概念&#xfeff;&#x…

為Notepad++插上JSON格式化的翅膀

文章目錄概要安裝步驟效果展示概要 JSMinNPP.dll 是一個 Notepad 插件&#xff0c;用于壓縮 JavaScript 代碼和格式化JSON字符床。以下是安裝和使用的詳細步驟&#xff1a; 安裝步驟 下載 JSMinNPP.dll 插件 https://pan.quark.cn/s/73dd0ac225be 放置 DLL 文件 打開 Notepa…

STM32-第七節-TIM定時器-3(輸入捕獲)

一、簡介&#xff1a;1.名稱&#xff1a;IC&#xff0c;輸入捕獲2.電路&#xff1a;如圖為通用定時器框圖&#xff0c;下半部分的左半模塊&#xff0c;與輸出比較部分共用捕獲/比較寄存器與引腳。3.功能&#xff1a;當通道輸入引腳出現電平跳變時&#xff0c;當前CNT的值&#…

Console 納管 Elasticsearch 9(二):日志監控

前面介紹過 INFINI Console 納管 Elasticsearch 9&#xff08;一&#xff09;&#xff0c;進行指標監控、數據管理、DSL 語句執行&#xff0c;但日志監控功能需要結合 Agent 才能使用。現在來實現一下&#xff1a; Agent 需要和 ES 部署到同一機器上&#xff0c;這里是在我本地…

實訓十——路由器與TCP/IP模型

補充拓撲圖&#xff08;交換機串聯通信&#xff09;電腦A——交換機S1——交換機S2——電腦B問&#xff1a;A和B如何通信&#xff1f;首先A會將通信的數據封裝好&#xff0c;將源端口、目標端口&#xff0c;源地址、目標地址&#xff0c;源MAC、目標MAC封裝起來&#xff0c;但是…

【Android】ViewBinding(視圖綁定)

一、什么是ViewBindingViewBinding是Android Studio 3.6推出的新特性&#xff0c;旨在替代findViewById(內部實現還是使用findViewById)。通過ViewBinding&#xff0c;可以更輕松地編寫可與視圖交互的代碼。在模塊中啟用ViewBinding之后&#xff0c;系統會為該模塊中的每個 XML…

泛型與類型安全深度解析及響應式API實戰

一、泛型通配符&#xff1a;靈活與安全的平衡術 在Java動物收容所系統中&#xff0c;我們常需要處理不同動物類型的集合。通過泛型通配符&#xff0c;可以構建更靈活的API&#xff1a; class Shelter<T extends Animal> {private List<T> animals new ArrayList&l…

Cookie 與 Session概述

在 Web 開發中&#xff0c;會話跟蹤是一個核心問題。HTTP 協議是無狀態的&#xff0c;這意味著服務器無法直接記住客戶端的狀態。而 Cookie 和 Session 技術的出現&#xff0c;正是為了解決這一難題。一、Cookie概述Cookie&#xff0c;翻譯成中文是小甜點、小餅干的意思。在 HT…

阿里云alicloud liunux3-安裝docker

你這個錯誤&#xff1a;Curl error (35): SSL connect error for https://download.docker.com/linux/centos/8/x86_64/stable/... Error: Failed to download metadata for repo docker-ce-stable: Yum repo downloading error說明你的機器訪問 download.docker.com 的 HTTPS …