LVS技術知識詳解(知識點+相關實驗部署)

目錄

1.1 LVS簡介

1.2 LVS體系結構

1.3 LVS相關術語

1.4 LVS工作模式

1.5?LVS工作原理

1.6 LVS調度算法

2.LVS相關實驗部署

2.1 lvs軟件相關信息

2.1.1 ipsadm常見參數

2.1.2 試例

2.2 LVS部署NAT模式

2.2.1 實驗環境

2.2.2 實驗步驟

2.2.2.1 實驗基礎環境

2.2.2.2 追加配置

2.3 LVS部署DR模式

2.3.1 實驗環境

2.3.2?實驗步驟

2.3.2.1 實驗基礎環境

2.3.2.2 追加配置

2.4 防火墻標記解決調度問題

2.4.1 問題重現

2.4.2 解決方法

1.1 LVS簡介

?????????LVS 是 Linux Virtual Server 的簡稱,也就是 Linux 虛擬服務器。這是一個由章文嵩博士發起的一個開源項目,它的官方網站是http://www.linuxvirtualserver.org/,現在 LVS 已經是 Linux 內核標準的一部分。

????????LVS 可以達到的技術目標是:通過 LVS 達到的負載均衡技術和 Linux 操作系統實現一個高性能高可用的 Linux 服務器集群,它具有良好的可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的性能。

1.2 LVS體系結構

????????LVS 架構從邏輯上可分為Load Balance(負載調度器)、Real Server(Server 集群層)和Shared Storage(共享存儲層)。

????????第一層:Load Balance(負載調度器),它是訪問整個群集系統的唯一入口,對外使用所有服務器共有的虛擬IP地址,也成為群集IP地址。

????????負載均衡器:是服務器群集系統的單個入口點,可運行 IPVS,該 IPVS 在 Linux 內核或KTCPVS 內部實現 IP 負載均衡技術,在 Linux 內核中實現應用程序級負載平衡。使用 IPVS 時,要求所有服務器提供相同的服務和內容,負載均衡器根據指定的調度算法和每個服務器的負載將新的客戶端請求轉發到服務器。無論選擇哪個服務器,客戶端都應獲得相同的結果。使用 KTCPVS 時,服務器可以具有不同的內容,負載均衡器可以根據請求的內容將請求轉發到其他服務器。由于 KTCPVS 是在 Linux 內核內部實現的,因此中繼數據的開銷很小,因此仍可以具有較高的吞吐量。

????????第二層:Real Server(Server 集群層),群集所提供的應用服務,比如:HTTP、FTP服務器池來承擔,每個節點具有獨立的真實IP地址,只處理調度器分發過來的客戶機請求。

????????服務器群集的節點可根據系統所承受的負載進行分擔。當所有服務器過載時,可添加多臺服務器來處理不斷增加的工作負載。對于大多數 Internet 服務(例如Web),請求通常沒有高度關聯,并且可以在不同服務器上并行運行。因此,隨著服務器群集的節點數增加,整體性能幾乎可以線性擴展。

????????第三層:Shared Storage(共享存儲層),為服務器池中的所有節點提供穩定、一致的文件存儲服務,確保整個群集的統一性,可使用 NAS 設備或提供 NFS (Network File System)網絡文件系統共享服務的專用服務器。

????????共享存儲:可以是數據庫系統,網絡文件系統或分布式文件系統。服務器節點需要動態更新的數據應存儲在基于數據的系統中,當服務器節點并行在數據庫系統中讀寫數據時,數據庫系統可以保證并發數據訪問的一致性。靜態數據通常保存在網絡文件系統(例如 NFS 和 CIFS)中,以便可以由所有服務器節點共享數據。但是,單個網絡文件系統的可伸縮性受到限制,例如,單個NFS / CIFS 只能支持 4 到 8 個服務器的數據訪問。對于大型集群系統,分布式/集群文件系統可以用于共享存儲,例如 GPFS,Coda 和 GFS,然后共享存儲也可以根據系統需求進行擴展。

1.3 LVS相關術語

  • LB (Load Balancer 負載均衡)
  • HA (High Available 高可用)
  • Failover (失敗切換)
  • Cluster (集群)
  • LVS (Linux Virtual Server Linux 虛擬服務器)
  • DS (Director Server),指的是前端負載均衡器節點
  • RS (Real Server),后端真實的工作服務器
  • VIP (Virtual IP),虛擬的IP地址,向外部直接面向用戶請求,作為用戶請求的目標的 IP 地址
  • DIP (Director IP),主要用于和內部主機通訊的 IP 地址
  • RIP (Real Server IP),后端服務器的 IP 地址
  • CIP (Client IP),訪問客戶端的 IP 地址

訪問流程:CIP <--> VIP == DIP <--> RIP

1.4 LVS工作模式

LVS有4種工作模式模式(NAT,TUN,DR,fullnat), 但fullnat工作模式默認不支持

LVS-NAT(Network Address Translation):在該模式下,負載均衡器不僅需要修改請求報文的目標地址,還需要修改響應報文的源地址,適用于小規模集群。?

LVS-DR(Direct Routing):在該模式下,負載均衡器只修改請求報文的目標MAC地址,而不修改IP地址,后端服務器直接將響應報文發回客戶端,適用于大規模集群

LVS-TUN(IP Tunneling):該模式通過IP隧道將請求轉發到后端服務器,后端服務器直接將響應報文發回客戶端,適用于地理位置分散的集群

1.5?LVS工作原理

LVS-NAT工作原理

????????調度器接收客戶端請求后,會修改請求報文的目標 IP 地址(即 VIP)為后端真實服務器的 IP 地址(RIP),同時記錄這個連接。真實服務器處理完請求后,將響應報文返回給調度器,調度器再把響應報文的源 IP 地址修改回 VIP,最后發送給客戶端。整個過程中,客戶端只和調度器有網絡交互,對真實服務器無感知。

LVS-DR工作原理

????????調度器接收到客戶端請求后,會通過修改數據幀的 MAC 地址(把目標 MAC 地址改為后端真實服務器的 MAC 地址),將請求轉發給真實服務器。真實服務器處理完請求后,直接把響應報文發送給客戶端。和 TUN 模式一樣,真實服務器需要配置 VIP,并且能直接和客戶端通信。不過與 TUN 模式不同的是,DR 模式是通過修改 MAC 地址來轉發請求,而不是封裝 IP 報文。

?LVS-TUN工作原理

????????調度器收到客戶端請求后,會在原有的 IP 報文外面再封裝一層新的 IP 頭,新 IP 頭的目標地址是后端真實服務器的 IP 地址。真實服務器收到這個封裝后的報文后,會解封裝獲取原始請求,然后直接將響應報文發送給客戶端(源 IP 地址為 VIP)。這種模式要求真實服務器和調度器都得有公網 IP,且真實服務器能直接和客戶端通信。

LVS-fullnat工作原理

????????該模式是對 NAT 模式的改進。調度器在接收客戶端請求后,會同時修改請求報文的源 IP 地址(改為調度器的 IP 地址)和目標 IP 地址(改為后端真實服務器的 IP 地址)。真實服務器處理完請求后,將響應報文發送給調度器,調度器再把響應報文轉發給客戶端。這種模式的優勢在于,調度器和真實服務器可以不在同一個網段,而且真實服務器可以使用私有 IP 地址。

4種工作模式的對比

特性NAT 模式TUN 模式DR 模式?fullnat模式
轉發機制修改 IP 包的源 / 目標 IP 地址在原 IP 包外封裝新 IP 頭修改 MAC 地址同時修改源和目標 IP 地址
請求流向客戶端 → 調度器 → 真實服務器客戶端 → 調度器 → 真實服務器客戶端 → 調度器 → 真實服務器客戶端 → 調度器 → 真實服務器
響應流向真實服務器 → 調度器 → 客戶端真實服務器 → 客戶端真實服務器 → 客戶端真實服務器 → 調度器 → 客戶端
真實服務器網關配置需要指向調度器無需指向調度器無需指向調度器需要指向調度器
真實服務器 IP 類型公網或私網 IP公網 IP公網或私網 IP私網 IP
網絡拓撲要求調度器與真實服務器 需同網段調度器與真實服務器 可跨網段調度器與真實服務器 需同網段調度器與真實服務器 可跨網段
調度器壓力高(處理所有請求和響應)中(僅處理請求)低(僅處理請求)中(處理所有請求和響應)
性能較低(轉發效率低)高(直接路由響應)最高(直接路由響應)中(NAT 改進版)
部署復雜度低(單網卡即可)高(需支持 IP 隧道)中(需配置 ARP 抑制)中(需支持雙向 NAT)
典型應用場景小規模集群,RS 為私有 IP大規模互聯網服務大規模高性能集群跨網段部署的私有云環境

1.6 LVS調度算法

LVS調度算法分為兩種:靜態調度算法和動態調度算法

靜態調度算法:即調度器不會去判斷后端服務器的繁忙與否,一如既往得將請求派發下去。

動態調度算法:調度器會去判斷后端服務器的繁忙程度,然后依據調度算法動態得派發請求。

靜態調度算法:rr,wrr,dh,sh

動態調度算法:wlc,lc,lblc,lblcr,SED,NQ

rr輪詢:Round Robin,將收到的訪問請求按順序輪流分配給群集中的各節點真實服務器中,不管服務器實際的連接數和系統負載。
wrr加權輪詢:Weighted Round Robin,根據真實服務器的處理能力輪流分配收到的訪問請求,調度器可自動查詢各節點的負載情況,并動態跳轉其權重,保證處理能力強的服務器承擔更多的訪問量。
dh目標地址散列調度算法:DH,該算法是根據目標 IP 地址通過散列函數將目標 IP 與服務器建立映射關系,出現服務器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該服務器。
sh源地址散列調度算法:SH,與目標地址散列調度算法類似,但它是根據源地址散列算法進行靜態分配固定的服務器資源。
wlc加權最少連接:Weighted Least Connections,服務器節點的性能差異較大的情況下,可以為真實服務器自動調整權重,權重較高的節點將承擔更大的活動連接負載。
lc最少連接:Least Connections,根據真實服務器已建立的連接數進行分配,將收到的訪問請求優先分配給連接數少的節點,如所有服務器節點性能都均衡,可采用這種方式更好的均衡負載。
lblc基于局部性的最少連接:LBLC,基于局部性的最少連接調度算法用于目標 IP 負載平衡,通常在高速緩存群集中使用。如服務器處于活動狀態且處于負載狀態,此算法通常會將發往 IP 地址的數據包定向到其服務器。如果服務器超載(其活動連接數大于其權重),并且服務器處于半負載狀態,則將加權最少連接服務器分配給該 IP 地址。
lblcr復雜的基于局部性的最少連接:LBLCR,具有復雜調度算法的基于位置的最少連接也用于目標IP負載平衡,通常在高速緩存群集中使用。與 LBLC 調度有以下不同:負載平衡器維護從目標到可以為目標提供服務的一組服務器節點的映射。對目標的請求將分配給目標服務器集中的最少連接節點。如果服務器集中的所有節點都超載,則它將拾取群集中的最少連接節點,并將其添加到目標服務器群中。如果在指定時間內未修改服務器集群,則從服務器集群中刪除負載最大的節點,以避免高度負載。
SED最短延遲調度:SED,最短的預期延遲調度算法將網絡連接分配給具有最短的預期延遲的服務器。如果將請求發送到第 i 個服務器,則預期的延遲時間為(Ci +1)/ Ui,其中 Ci 是第 i 個服務器上的連接數,而 Ui 是第 i 個服務器的固定服務速率(權重) 。
NQ永不排隊調度:NQ,從不隊列調度算法采用兩速模型。當有空閑服務器可用時,請求會發送到空閑服務器,而不是等待快速響應的服務器。如果沒有可用的空閑服務器,則請求將被發送到服務器,以使其預期延遲最小化(最短預期延遲調度算法)。

在4.15版本內核以后新增調度算法

FO
(Weighted Fai Over)調度算法,常用作灰度發布。在此算法中,遍歷虛擬服務所關聯的真實服務器鏈表,找到還未過載(未設置IP_VS_DEST_FOVERLOAD標志)的且權重最高的真實服務器,進行調度,當服務器承接大量鏈接,對此服務器進行過載標記(IP_VS_DEST_F OVERLOAD),那么vs調度器就不會把鏈接調度到有過載標記的主機中
OVF
(Overflow-connection)調度算法,基于真實服務器的活動連接數量和權重值實現。將新連接調度到權重值最高的真實服務器,直到其活動連接數量超過權重值,之后調度到下一個權重值最高的真實服務器,在此OVF算法中,遍歷虛擬服務相關聯的真實服務器鏈表,找到權重值最高的可用真實服務器。一個可用的真實服務器需要同時滿足以下條件:1.未過載(未設置IP_VS_DEST_F OVERLOAD標志)? 2.真實服務器當前的活動連接數量小于其權重值? 3.其權重值不為零

2.LVS相關實驗部署

實驗環境均為紅帽9.1的虛擬主機

2.1 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

2.1.1 ipsadm常見參數

選項作用
-A添加一個虛擬服務,使用IP地址、端口號、協議來唯一定義一個虛擬服務
-E編輯一個虛擬服務
-D?刪除一個虛擬服務
-C?清空虛擬服務表
-R?從標準輸入中還原虛擬服務規則
-S保存虛擬服務規則值標準輸出,輸出的規則可以使用-R導入還原
-a在虛擬服務中添加一臺真實服務器
-e在虛擬服務中編輯一臺真實服務器
-d在虛擬服務中減少一臺真實服務器
-L顯示虛擬服務列表
-t?使用TCP服務,該參數后需要跟主機與端口信息
-u使用UDP服務,該參數會需要跟主機與端口信息
-s指定LVS所采用的的調度算法
-r設置真實服務器IP地址與端口信息
-g設置LVS工作模式為DR直連路由模式
-i?設置LVS工作模式為TUN隧道模式
-m設置LVS工作模式為NAT地址轉換模式
-w設置指定服務器的權重
-c連接狀態,需要配合-L使用
-n數字格式輸出

2.1.2 試例

管理虛擬服務

添加地址為172.25.254.100:80的虛擬服務,指定調度算法為輪詢。

ipvsadm -A -t 172.25.254.100:80 -s rr

修改虛擬服務的算法為加權輪詢

ipvsadm -E -t 172.25.254.100:80 -s wrr

刪除一個虛擬服務

ipvsadm -D -t 172.25.254.100:80

管理真實服務

添加一個真實服務器,使用DR模式,設置權重為2

ipvsadm -a -t 172.25.254.100:80 -r 192.168.1.10:80 -g -w 2

修改真實服務器的權重為5

ipvsadm -e -t 172.25.254.100:80 -r 192.168.1.10:80 -g -w 5

刪除一個真實服務器

ipvsadm -d -t 172.25.254.100:80 -r 192.168.1.10:80

2.2 LVS部署NAT模式

2.2.1 實驗環境

主機名IPvip角色
clientNAT:172.25.254.10測試機
lvs僅主機-eth1:192.168.1.100NAT-eth0:172.25.254.100調度器
rs1僅主機:192.168.1.10,GW:192.168.1.100null真實服務器
rs2僅主機:192.168.1.20,GW:192.168.1.100null真實服務器

2.2.2 實驗步驟

2.2.2.1 實驗基礎環境

client

lvs

lvs調度器有兩塊網卡,多一塊“僅主機”網卡去連接兩臺真實服務器

RS

rs1和rs2的網卡都是“僅主機”模式

2.2.2.2 追加配置

(1)在lvs中啟用內核路由功能,讓內外網能進行一定程度的通信

[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# 啟用配置
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1

?(2)在lvs中安裝ipvsadm

[root@lvs ~]# dnf install ipvsadm -y

(3)在rs1和rs2中關閉防火墻,并安裝httpd模擬提供服務

rs1
[root@rs1 ~]# systemctl disable --now firewalld.service                 # 關閉防火墻
[root@rs1 ~]# dnf install httpd -y                                      # 安裝httpd
[root@rs1 ~]# echo "welcome to 192.168.1.10" > /var/www/html/index.html # 生成默認測試頁文件
[root@rs1 ~]# systemctl enable --now httpd                              # 開啟http服務rs2
[root@rs2 ~]# systemctl disable --now firewalld.service
[root@rs2 ~]# dnf install httpd -y
[root@rs2 ~]# echo "welcome to 192.168.1.20" > /var/www/html/index.html
[root@rs2 ~]# systemctl enable --now httpd

在lvs中訪問兩臺RS檢測http服務是否生效

(4)在lvs中添加調度策略

# 添加調度策略
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.1.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.1.20:80 -m# 查看調度策略
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr-> 192.168.1.10:80              Masq    1      0          0-> 192.168.1.20:80              Masq    1      0          0# 在火墻中放行web服務,不然客戶端會訪問失敗
[root@lvs ~]# firewall-cmd --permanent --add-service=http
success
[root@lvs ~]# firewall-cmd --reload
success

(5)可選操作

# 保存規則
# /etc/sysconfig/下原本是沒有ipvsadm這個文件的,執行第一條命令會自動創建
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.254.100:80 -s rr
-a -t 172.25.254.100:80 -r 192.168.1.10:80 -m -w 1
-a -t 172.25.254.100:80 -r 192.168.1.20:80 -m -w 1# 刪除所有規則
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn# 重新導入規則
[root@lvs ~]# ipvsadm -R < /etc/sysconfig/ipvsadm
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr-> 192.168.1.10:80              Masq    1      0          0-> 192.168.1.20:80              Masq    1      0          0

(6)客戶端訪問測試

? ? ? ? 連續訪問10次

2.3 LVS部署DR模式

2.3.1 實驗環境

主機名IPvip角色
clientNAT:172.25.254.10測試機
router僅主機-eth1:192.168.1.100NAT-eth0:172.25.254.100路由器
lvs僅主機:192.168.1.200,GW:192.168.1.100lo:192.168.1.220調度器
rs1僅主機:192.168.1.10,GW:192.168.1.100lo:192.168.1.220真實服務器
rs2僅主機:192.168.1.20,GW:192.168.1.100lo:192.168.1.220真實服務器

2.3.2?實驗步驟

2.3.2.1 實驗基礎環境

client

router

router路由器有兩塊網卡,多一塊“僅主機”網卡去連接lvs調度器

lvs

lvs的網卡變為“僅主機”模式

RS

rs1和rs2的網卡還是“僅主機”模式

2.3.2.2 追加配置

(1)router啟用內核路由功能

# 開啟路由內核功能
[root@router ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1

(2)對router的防火墻進行配置,不然客戶端訪問會失敗

[root@router ~]# firewall-cmd --permanent --add-masquerade
success
# 讓配置在當前的會話中生效
[root@router ~]# firewall-cmd --reload
success

(3)在lvs、rs1、rs2上關閉防火墻,并配置環回ip用作vip

ip addr add dev lo 192.168.1.220/32
# 該命令用于配置環回IP,但為臨時配置,重啟系統后失效
# 且只能用ip a查看,ifconfig看不到該信息
lvs
[root@lvs ~]# systemctl disable --now firewalld.service
[root@lvs ~]# ip addr add dev lo 192.168.1.220/32rs1
[root@rs1 ~]# systemctl disable --now firewalld.service
[root@rs1 ~]# ip addr add dev lo 192.168.1.220/32rs2
[root@rs2 ~]# systemctl disable --now firewalld.service
[root@rs2 ~]# ip addr add dev lo 192.168.1.220/32

(4)在lvs中安裝ipvsadm,并添加調度策略

安裝ipvsadm
[root@lvs ~]# dnf install ipvsadm -y# 添加調度策略
[root@lvs ~]# ipvsadm -A -t 192.168.1.220:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.1.220:80 -r 192.168.1.10:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.1.220:80 -r 192.168.1.20:80 -g# 查看調度策略
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.220:80 rr-> 192.168.1.10:80              Route   1      0          0-> 192.168.1.20:80              Route   1      0          0

(5)在rs1和rs2中安裝httpd模擬提供服務

rs1
[root@rs1 ~]# dnf install httpd -y
[root@rs1 ~]# echo "welcome to 192.168.1.10" > /var/www/html/index.html
[root@rs1 ~]# systemctl enable --now httpdrs2
[root@rs2 ~]# dnf install httpd -y
[root@rs2 ~]# echo "welcome to 192.168.1.20" > /var/www/html/index.html
[root@rs2 ~]# systemctl enable --now httpd

在lvs中訪問兩臺RS檢測http服務是否生效

(6)在RS1和RS2中解決vip響應問題

DR 模式的核心設計是:

????????調度器和所有真實服務器(RS)都需要配置相同的 VIP調度器用 VIP 接收客戶端請求,RS 用 VIP 作為響應的源 IP 直接返回給客戶端。但這種 “同一 VIP 在多臺機器上存在” 的情況,會引發兩個關鍵問題:

ARP 廣播沖突:當客戶端或網絡中的其他設備發送 ARP 請求(詢問 “VIP 對應的 MAC 地址是什么”)時,若所有 RS 都響應,會導致客戶端收到多個 MAC 地址,可能直接將請求發送給某臺 RS 而非調度器,繞過負載均衡。

響應路徑錯誤:若 RS 對 VIP 的 ARP 響應配置不當,可能導致客戶端后續請求直接發給 RS,而非通過調度器分發,破壞負載均衡策略。

? ? ? ? 因此需要對RS做關于vip的arp限制

rs1
# 解決vip響應問題
[root@rs1 ~]# echo "net.ipv4.conf.all.arp_ignore=1" >> /etc/sysctl.conf
[root@rs1 ~]# echo "net.ipv4.conf.all.arp_announce=2" >> /etc/sysctl.conf
[root@rs1 ~]# echo "net.ipv4.conf.lo.arp_ignore=1" >> /etc/sysctl.conf
[root@rs1 ~]# echo "net.ipv4.conf.lo.arp_announce=2" >> /etc/sysctl.conf
# 啟用配置
[root@rs1 ~]# sysctl -p
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 = 2rs2
[root@rs2 ~]# echo "net.ipv4.conf.all.arp_ignore=1" >> /etc/sysctl.conf
[root@rs2 ~]# echo "net.ipv4.conf.all.arp_announce=2" >> /etc/sysctl.conf
[root@rs2 ~]# echo "net.ipv4.conf.lo.arp_ignore=1" >> /etc/sysctl.conf
[root@rs2 ~]# echo "net.ipv4.conf.lo.arp_announce=2" >> /etc/sysctl.conf
[root@rs2 ~]# sysctl -p
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

(7)客戶端訪問測試

2.4 防火墻標記解決調度問題

? ? ? ? 在實際環境中,服務器不可能只提供一種服務,以http 和 https 為例,當我們在 RS 中同時開放 80 和 443 端口,那么默認控制是分開輪詢的,這樣我們就出現了一個輪詢錯亂的問題:當我第一次訪問 80 被輪詢到 RS1 后,下次訪問 443 仍然可能會被輪詢到 RS1 上。

2.4.1 問題重現

環境使用上一個實驗“LVS部署DR模式”做完的環境

(1)在rs1和rs2中安裝mod_ssl并重啟httpd服務(rs安裝mod_ssl模塊 是為了讓rs支持https)

[root@rs1 ~]# dnf install mod_ssl -y
[root@rs1 ~]# systemctl restart httpd[root@rs2 ~]# dnf install mod_ssl -y
[root@rs2 ~]# systemctl restart httpd

(2)查看httpd端口

(3)添加關于https的調度策略

[root@lvs ~]# ipvsadm -A -t 192.168.1.220:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.1.220:443 -r 192.168.1.10:443 -g
[root@lvs ~]# ipvsadm -a -t 192.168.1.220:443 -r 192.168.1.20:443 -g# 查看調度策略
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.220:80 rr-> 192.168.1.10:80              Route   1      0          0-> 192.168.1.20:80              Route   1      0          0
TCP  192.168.1.220:443 rr-> 192.168.1.10:443             Route   1      0          0-> 192.168.1.20:443             Route   1      0          0

(4)測試錯誤結果

2.4.2 解決方法

(1)先把原來的策略刪除

[root@lvs ~]# ipvsadm -C# 查看策略,此時為空
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

(2)在lvs調度器中配置防火墻標記,人為設定80和443是一個整體

[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.1.220 -p tcp -m multiport --dports 80,443 -j MARK  --set-mark 66# 查看結果
[root@lvs ~]# iptables -t mangle -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
MARK       tcp  --  0.0.0.0/0            192.168.1.220        multiport dports 80,443 MARK set 0x42Chain INPUT (policy ACCEPT)
target     prot opt source               destinationChain FORWARD (policy ACCEPT)
target     prot opt source               destinationChain OUTPUT (policy ACCEPT)
target     prot opt source               destinationChain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

(3)重新配置調度策略

[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.1.10 -g
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.1.20 -g[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  66 rr-> 192.168.1.10:0               Route   1      0          0-> 192.168.1.20:0               Route   1      0          0

?(4)客戶端訪問測試

可以看到,問題解決

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

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

相關文章

芋道導入邏輯

一、代碼 PostMapping("/import")Operation(summary "導入用戶")Parameters({Parameter(name "file", description "Excel 文件", required true),Parameter(name "updateSupport", description "是否支持更新&a…

gradle7.6.1+springboot3.2.4創建微服務工程

目錄 一、創建主工程cloud-demo并刪除src目錄 二、創建子工程user-service/order-service 三、更改父工程build.gradle文件 四、子工程使用mybatis框架 五、子工程使用mybatis-plus框架 六、相關數據庫創建 七、最終目錄結構 一、創建主工程cloud-demo并刪除src目錄 二、…

電腦windows系統深度維護指南

&#x1f5a5;? 電腦系統全方位維護指南 預防故障 提升性能 延長壽命 &#x1f50d; 引言&#xff1a;為什么需要系統維護&#xff1f; 電腦如同汽車&#xff0c;定期保養可避免&#xff1a; ? 突發藍屏死機 ? 系統卡頓崩潰 ? 硬件過早損壞 ? 數據丟失風險 本指南提供…

字節內部流傳的數據分析手冊

之前2領導整理內部分享的&#xff0c;所以很多內部業務的分析&#xff0c;比如工作中怎么落地、怎么推進。(數據都是脫敏的哈) **里面的內容都偏應用&#xff0c;比如產品迭代怎么做數據評估、用戶增長靠什么指標拆解、AB實驗怎么設計、運營活動怎么閉環。**數據分析都是很實際…

Nginx Proxy Manager + LB + Openappsec + Web UI 構建下一代WAF

Nginx Proxy Manager + LB + Openappsec + Web UI部署 一、環境介紹 二、系統參數優化 三、安裝docker 四、創建docker網絡 五、創建測試容器 六、部署NPM和openappsec 1、下載docker-compose文件 2、拉取相關鏡像 3、web UI 獲取token 4、修改compose文件并安裝 七、登陸NPM配…

【React】npm install報錯npm : 無法加載文件 D:\APP\nodejs\npm.ps1,因為在此系統上禁止運行腳本。

使用vsCode打開react項目安裝依賴時報錯&#xff0c;把terminal打開的powershell改成command prompt即可

深入解析C#裝箱轉換:值類型如何“變身”為引用類型?

當你將 int i 賦值給 object oi 時&#xff0c; 看似簡單的操作背后&#xff0c;藏著一場精密的類型轉換革命&#xff01;&#x1f511; 一、核心概念&#xff1a;什么是裝箱&#xff1f; 裝箱&#xff08;Boxing&#xff09; 是C#中的一種隱式轉換機制&#xff0c;它將值類型&…

java list 與set 集合的迭代器在進行元素操作時出現數據混亂問題及原因

為什么 List 和 Set 迭代器刪除結果不同&#xff1f;1. List 和 Set 的本質差異List&#xff08;如 ArrayList&#xff09;&#xff1a;有序集合&#xff0c;元素按插入順序存儲&#xff0c;允許重復元素。迭代器遍歷時&#xff0c;元素按索引順序返回。刪除操作&#xff08;通…

大語言模型:人像攝影的“達芬奇轉世”?——從算法解析到光影重塑的智能攝影革命

導言在攝影術誕生之初&#xff0c;達芬奇或許無法想象&#xff0c;他對于光影、比例和解剖的嚴謹研究&#xff0c;會在數百年后以另一種形式重生。今天&#xff0c;當攝影師面對復雜的光線環境或苦苦尋找最佳構圖時&#xff0c;一位由代碼構筑的“光影軍師”正悄然降臨——大語…

Java——MyBatis從入門到精通:一站式學習指南

MyBatis從入門到精通&#xff1a;一站式學習指南 作為一款優秀的半自動ORM框架&#xff0c;MyBatis以其靈活的SQL控制和簡潔的配置方式&#xff0c;成為Java后端開發中持久層框架的首選。本文將從基礎概念到高級特性&#xff0c;全面講解MyBatis的使用方法&#xff0c;包含實用…

面試150 添加與搜索單詞--數據結構設計

思路 通過哈希法去實現&#xff0c;這里主要描述search的思路&#xff1a;如果’.‘不在word中&#xff0c;我們只需要去查詢word在不在set中。如果’.‘存在&#xff0c;我們對哈希中的字符串進行遍歷w&#xff0c;如果當前字符串的長度不等于word跳過,對word進行遍歷&#xf…

學習打卡網站(搭子版本)

概述 之前用了網上的一些學習打卡類app&#xff0c;基本都是收費的&#xff0c;而且有些自己想要的功能卻沒有&#xff0c;甚至還有廣告&#xff0c;正好暑假是個需要容易懶惰的時間&#xff0c;所以干脆自己做了一個能和學習搭子一起記錄計劃的小網站。 昨天早上開始寫&#x…

分享如何在Window系統的云服務器上部署網站及域名解析+SSL

最近看到阿里云的服務器有個199的活動&#xff0c;買了個2核4G帶寬5M的服務器&#xff0c;用于小網站的運營也足夠&#xff0c;于是就買一個&#xff0c;并且我還挑了個新加坡的站點&#xff0c;本想著運營獨立站&#xff0c;用新加坡的站點外網訪問會更友好一點。于是問題就來…

FastAdmin系統框架通用操作平滑遷移到新服務器的詳細步驟-優雅草卓伊凡

FastAdmin系統框架通用操作平滑遷移到新服務器的詳細步驟-優雅草卓伊凡我們蜻蜓hr系統采用的后端框架就是fastadmin&#xff0c;因此我們平穩遷移以此為例&#xff0c;為什么要遷移一份是因為有甲方需要。遷移FastAdmin系統到新服務器需要確保數據完整性和系統功能正常。以下是…

Request和Response相關介紹

Request 和 Response 是什么&#xff1f; Request&#xff08;請求對象&#xff09;&#xff1a;用來接收瀏覽器發過來的數據。 Response&#xff08;響應對象&#xff09;&#xff1a;用來把服務器處理后的結果返回給瀏覽器。 1. request 的作用&#xff08;獲取請求數據&am…

Springboot 實現熱部署

spring為開發者提供了一個名為spring-boot-devtools的模塊來使Spring Boot應用支持熱部署&#xff0c;提高開發者的開發效率&#xff0c;無需手動重啟Spring Boot應用。引入依賴<dependency><groupId>org.springframework.boot</groupId><artifactId>s…

虛擬機擴展磁盤容量后擴展分區大小

1. 首先檢查磁盤剩余空間sudo fdisk -l /dev/sda2. 如果有未分配空間&#xff0c;直接擴展分區sudo fdisk /dev/sda在fdisk交互界面中&#xff0c;依次寫入d # 刪除分區 3 # 例如選擇分區3&#xff08;/dev/sda3&#xff09; n # 新建分區 p # 主分區 3 # 分區號3 # 起始扇…

元宇宙與游戲:虛實交融的數字文明新紀元

引言&#xff1a;當游戲遇見元宇宙在紐約現代藝術博物館&#xff08;MoMA&#xff09;的"虛擬世界"特展中&#xff0c;一幅數字藝術作品《元宇宙誕生》引發觀展熱潮。這幅由AI與人類藝術家共同創作的作品&#xff0c;描繪了游戲《堡壘之夜》的虛擬演唱會與現實世界交…

音視頻學習(四十二):H264幀間壓縮技術

必要性與優勢 原始數字視頻數據量龐大&#xff0c;未經壓縮的視頻難以有效傳輸和存儲。例如&#xff0c;一個 1080p、30fps 的無壓縮視頻&#xff0c;每秒數據量可達數百兆比特。視頻壓縮的目標是在保證視覺質量的前提下&#xff0c;最大限度地減少數據冗余。視頻數據中存在多種…

微服務雪崩防護最佳實踐之sentinel

思考1、當服務訪問量達到一定程度&#xff0c;流量扛不住的時候&#xff0c;該如何處理&#xff1f;2、服務之間相互依賴&#xff0c;當服務A出現響應時間過長&#xff0c;影響到服務B的響應&#xff0c;進而產生連鎖反應&#xff0c;直至影響整個依賴鏈上的所有服務&#xff0…