LVS(Linux virual server)

LVS(Linux virual server)

系統性能擴展方式

Scale UP:增強單臺服務器性能,適合單體應用,但有硬件限制。

Scale Out:增加服務器數量,適合分布式和集群系統,可靈活擴展。

集群(Cluster)

定義:多臺計算機組合成一個系統,解決特定問題。

類型

  • LB(負載均衡):多主機分擔訪問請求,提高并發處理能力。
  • HA(高可用):避免單點故障,用MTBF(平均無故障時間)和MTTR(平均恢復時間)衡量可用性,目標是達到高可用性(如99.9%)。
  • HPC(高性能計算):用于大規模計算任務,是國家戰略資源。

分布式

定義:將業務拆分成多個子業務,部署在多臺服務器上。

應用

  • 分布式存儲:如Ceph、GlusterFs、FastDFS等。
  • 分布式計算:如Hadoop、Spark。
  • 分布式應用:服務拆分、靜態資源分布、分布式數據存儲等。

集群和分布式對比

集群:多臺服務器運行相同業務,功能和數據一致,通過負載均衡和冗余提高并發和可靠性。

分布式:多臺服務器運行不同子業務,功能和數據不同,通過并行處理縮短任務執行時間,提升效率。

總結

集群:適合高并發、高可用場景,通過增加服務器數量提升性能。

分布式:適合大規模數據處理和復雜業務,通過任務拆分和并行處理提升效率。

LVS概念

概念名概念
VSVirtual Server 虛擬服務器負責調度
RSReal Server 真實服務器負責真正提供服務
ClientClient 客戶端客戶大大
VIPVirtual server IP VS外網的IP\
RIPReal server IP RS的IP\
DIPDirector IP VS內網的IP\
CIPClient IP 客戶端的IP\

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

工作原理: VS根據請求報文的目標IP和目標協議及端口將其調度轉發至某RS,根據調度算法來挑選RS

ipvsadm命令

參數描述
-A添加一個新的虛擬服務器
-E編輯現有的虛擬服務器
-D刪除一個虛擬服務器
-C清除所有虛擬服務器配置
-L顯示虛擬服務器的詳細信息
-a向虛擬服務器添加一個真實服務器
-d從虛擬服務器中刪除一個真實服務器
-n以數字形式顯示 IP 地址和服務端口,不進行解析
-s指定調度算法,默認WLC
-f指定防火墻標簽
-w指定權重
-p設置持久連接超時
-ttcp服務
-uudp服務

備份與還原

命令描述
ipvsadm-save > /你的規則文件要保存去哪備份
ipvsadm-restore < /你的規則文件還原

參數和對應模式

參數
-gDR模式(直連路由模式)
-mNAT模式
-iTUN模式(ipip隧道模式)

集群的類型

類型解釋參數
lvs-nat修改請求報文的目標IP,多目標IP的DNAT-m
lvs-dr操縱封裝新的MAC地址-g
lvs-tun在原請求IP報文之外新加一個IP首部-i
lvs-fullnat修改請求報文的源和目標IP/

NAT

原理

IVS-NAT 原理:修改請求數據包的目標地址(RIP)和端口(PORT)到選定的真實服務器(RS)的地址和端口。

  • 網絡要求:RIP和DIP(Director IP)應在同一個網絡,使用私有地址;RS的網關應指向DIP。
  • 轉發要求:請求和響應數據包都必須通過Director(負載均衡器)轉發,這可能導致Director成為瓶頸。
  • 端口映射:支持修改請求數據包的目標端口。
  • 系統兼容性:Director必須是Linux系統,RS可以是任何操作系統。

[!CAUTION]

注意:這里我們就省略了路由器

在這里插入圖片描述

實驗
主機IP—Port網絡模式
Client172.25.254.111—eth0CIPNAT
LVS172.25.254.100—eth0
192.168.0.100—eth0
VIP僅主機
RS1192.168.0.10—eth0RIP僅主機
RS2192.168.0.20—eth0RIP僅主機

[!NOTE]

網絡配置方面省略,直接開始LVS的配置

在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.0.10:80 -m
[root@LVS ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m

當我們配置完上面這三條命令后,我們可以用以下命令進行查看是否配置正確

ipvsadm -Ln

在這里插入圖片描述

在客戶端上初嘗試
[root@client ~]# curl 192.168.0.10
RS1 - 192.168.0.10
[root@client ~]# for i in {1..10}
> do
> curl 172.25.254.100
> done;

我們可以看到客戶端卡住了訪問不了,可以看到上面的LVS顯示20的RS服務器收到了數據包,ActiveConn為1了

所以是RS那邊出了問題,而不是LVS的問題

在這里插入圖片描述

我們可以看到我們之前用腳本配置的網關是錯誤的,所以我們需要重新修改網關的配置

在這里插入圖片描述

修改網關配置
#在RS1中
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.0.10/24,192.168.0.100				#改這里
dns=8.8.8.8[root@RS1 ~]# nmcli connection reload
[root@RS1 ~]# nmcli connection up eth0#在RS2中
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.0.20/24,192.168.0.100				#改這里
dns=8.8.8.8[root@RS2 ~]# nmcli connection reload
[root@RS2 ~]# nmcli connection up eth0

在這里插入圖片描述

重新加載網絡配置

在這里插入圖片描述

lvs上需要開啟內核的IP轉發功能
vim  /etc/sysctl.conf 
net.ipv4.ip_forward=1
測試訪問

我們可以看到流量已經可以正常由lvs通過rr算法進行輪詢分發

在這里插入圖片描述

DR

原理
  1. 客戶端發送數據幀給vs調度主機幀中內容為客戶端IP+客戶端的MAC+VIP+VIP的MAC
  2. VS調度主機接收到數據幀后把幀中的VIP的MAC該為RS1的MAC,此時幀中的數據為客戶端IP+客戶端 的MAC+VIP+RS1的MAC
  3. RS1得到2中的數據包做出響應回傳數據包,數據包中的內容為VIP+RS1的MAC+客戶端IP+客戶端IP的 MAC

在這里插入圖片描述

特點
  1. Director和各RS都配置有VIP
  2. 確保前端路由器將目標IP為VIP的請求報文發往Director
  3. 在前端網關做靜態綁定VIP和Director的MAC地址
實驗
主機IP—Port網絡模式
Client172.25.254.111—eth0CIPNAT
Router172.25.254.100—eth0
192.168.0.100—eth1
NAT
僅主機
LVS192.168.0.200—eth0
192.168.0.220—eth0
DIP
VIP
僅主機
RS1192.168.0.220—lo
192.168.0.10—eth0
VIP
RIP
僅主機
RS2192.168.0.220—lo
192.168.0.20—eth0
VIP
RIP
僅主機
Client

在這里插入圖片描述

[root@client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.254.100  0.0.0.0         UG    100    0        0 eth0
172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
Router

在這里插入圖片描述

#開機啟動
[root@Router ~]# systemctl enable --now firewalld.service
Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.#啟用火墻的偽裝(NAT,網絡地址轉換)功能
[root@Router ~]# firewall-cmd --add-masquerade
success
[root@Router ~]# firewall-cmd --reload
success
DRlvs
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.0.200/24,192.168.0.100
address2=192.168.0.220/24route -n
#DRlvs的網關可以寫可以不寫 都可以

在這里插入圖片描述

在這里插入圖片描述

[root@DRlvs ~]# systemctl disable --now firewalld.service
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
[root@DRlvs ~]# dnf install ipvsadm-1.31-6.el9.x86_64 -y
#開機啟動
[root@DRlvs ~]# systemctl enable --now ipvsadm.service
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.[root@DRlvs ~]# ipvsadm -A -t 192.168.0.220:80 -s rr
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:80 -r 192.168.0.10:80 -g
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:80 -r 192.168.0.20:80 -g
[root@DRlvs ~]# 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.0.220:80 rr-> 192.168.0.10:80              Route   1      0          0-> 192.168.0.20:80              Route   1      0          0
RS1
[root@RS1 ~]# cd /etc/NetworkManager/system-connections/
[root@RS1 system-connections]# cp -p eth0.nmconnection lo.nmconnection
[root@RS1 system-connections]# vim lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.0.220/32				#添加RS1的VIP[root@RS1 system-connections]# nmcli connection reload
[root@RS1 system-connections]# nmcli connection up lo

在這里插入圖片描述

#查看當前系統中所有與 ARP相關的內核參數配置
[root@RS1 ~]# sysctl -a | grep arp#設置rs主機lo接口不對外響應
#注意需要先設置全局內核參數配置再設置對應接口的內核參數配置
[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 = 2
RS2
[root@RS2 ~]# cd /etc/NetworkManager/system-connections/
[root@RS2 system-connections]# cp -p eth0.nmconnection lo.nmconnection
[root@RS2 system-connections]# vim lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.0.220/32				#添加VIP[root@RS2 ~]# nmcli connection reload
[root@RS2 ~]# nmcli connection up lo

在這里插入圖片描述

[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
檢驗

主機上的網卡MAC地址

主機與網卡設備
router:
eth0: 00:0c:29:ca:24:99
eth1: 00:0c:29:ca:24:a3
lvs:
eth0: 00:0c:29:b1:18:8c
RS1:
eth0: 00:0c:29:6c:51:af
RS2:
eth0: 00:0c:29:1c:94:31

我們可以通過抓包來查看整個流程

WireShark抓包

在這里插入圖片描述

1.客戶端發送出請求來到路由器給到lvs的Director

①
客戶端發送訪問來到路由器111
對應端口eth1的MAC地址24:a3然后路由器給到lvs的Director
對應端口eth0的MAC地址18:8c

在這里插入圖片描述

2.Director收到請求后分發給RS1

②
Director收到請求后分發給RS1,這里顯示的還是VIP220
但是我們仔細看MAC地址可以看出是RS1
現在包里攜帶的是
CIP			VIP(RS)
CMAC		RIPMAC

在這里插入圖片描述

3.RS1回包跳過lvs發給路由器

③
RS1回包跳過Director直接來到路由器
所以現在包里攜帶的是
VIP		CIP
RMAC	CMAC

在這里插入圖片描述

4.還原了MAC地址

最后這里
可以理解為
回包到這一步時,顯示源MAC是router的MAC,目標MAC是lvs的Director的MAC
但是還有后面一步是變成了
源MAC是lvs的Director的MAC,目標的MAC是router的MAC
注意:這一步防止RS服務器的MAC的泄露,所以有RMAC轉換為DMAC
再下一步就是
路由器發往客戶端

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

思考
1.為什么lvs上要有DIP?只在Director上配置一個VIP不可以嗎?
MAC地址轉換:在DR模式下,LVS通過修改請求數據包的MAC地址來實現轉發,而不是修改IP地址。Director將請求數據包的源MAC地址改為自己的DIP對應的MAC地址,目標MAC地址改為選定的Real Server(RS)的MAC地址。這樣,數據包會被發送到正確的RS。網絡隔離:DIP用于在Director內部網絡中標識負載均衡器,確保內部網絡通信不會與外部網絡混淆。DIP通常配置在Director的內部網絡接口上,用于與RS通信。ARP響應:Director需要能夠響應ARP請求,以便在網絡中正確地解析VIP到MAC地址。如果只配置VIP,Director可能無法正確地參與ARP過程,從而影響數據包的轉發。安全性:通過配置DIP,可以限制Director的網絡暴露,增強系統的安全性。
2.在RS上配置的arp_ignore=1和arp_arp_announce=2有什么作用?
arp_ignore=1:
防止RS響應那些目標硬件地址不是自己的ARP請求。這樣可以避免RS的IP地址被其他設備錯誤地解析到錯誤的MAC地址,從而防止ARP欺騙攻擊。
通俗的說,我的理解是
防止了RS暴露自己的MAC地址,只會響應lvs發來的請求,防止客戶端直接訪問RS。arp_announce=2:
防止RS發送可能引起網絡混亂的ARP響應。當RS接收到一個ARP請求,請求的源IP和目標IP都在RS的IP列表中時,RS不會發送ARP響應。這可以避免RS在DR模式下發送不必要的ARP響應,從而減少網絡中的ARP流量和潛在的ARP沖突。
通俗的說,我的理解是
只響應本機所有網絡接口的溝通(e.g. lo與eth0就可以溝通),不會響應外面的網絡接口和溝通

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須支持隧道功能

fullnat

fullnat:通過同時修改請求報文的源IP地址和目標IP地址進行轉發

CIP --> DIP VIP --> RIP

  1. VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP
  2. RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但Director還要將其發往Client
  3. 請求和響應報文都經由Director
  4. 支持端口映射

[!WARNING]

注意:此類型kernel默認不支持

LVS工作模式總結

NAT模式TUN模式DR模式
RS操作系統不限支持隧道禁用ARP
調度器和服務器網絡可跨網絡可跨網絡不可跨網絡
調度服務器數量服務器數量
RS服務器網關指向到調度器DIP指向到路由指向到路由
  • Ivs-nat與lvs-fullnat:請求和響應報文都經由Director
  • Ivs-nat:RIP的網關要指向DIP
  • Ivs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信
  • Ivs-dr與lvs-tun:請求報文要經由Director,但響應報文由RS直接發往Client
  • Ivs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發
  • Ivs-tun:通過在原IP報文外封裝新IP頭實現轉發,支持遠距離通信

LVS調度算法

靜態算法

靜態算法描述
RRroundrobin輪詢RS分別被調度,當RS配置有差別時不推薦
WRRWeightedRR,加權輪詢根據RS的配置進行加權調度,性能差的RS被調度的次數少
SHSource Hashing,實現session sticky,源IP地址hash;將來自于同一個IP地址的請求始終發往 第一次挑中的RS,從而實現會話綁定
DHDestination Hashing;目標地址哈希,第一次輪詢調度至RS,后續將發往同一個目標地址的請 求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡,如:寬帶運營商

動態算法

動態算法描述調度方法
LCleast connections(最少鏈接發)適用于長連接應用Overhead(負載值)=activeconns(活動鏈接數) x 256+inactiveconns(非活動鏈接數)
WLCWeighted LC(權重最少鏈接)默認調度方法Overhead=(activeconns x 256+inactiveconns)/weight
SEDShortest Expection Delay初始連接高權重優先Overhead=(activeconns+1+inactiveconns) x 256/weight
NQNever Queue第一輪均勻分配,后續SED
LBLCLocality-Based LC動態的DH算法
LBLCRLBLC with Replication帶復制功能的LBLC

[!NOTE]

SED:當node1的權重為1,node2的權重為10,經過運算前幾次的調度都會被node2承接,注意服務器權重設置的合理性

LBLC:使用場景:根據負載狀態實現正向代理

LBLCR:解決LBLC負載不均衡問題,從負載重的復制 到負載輕的RS

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

1.FO(WeightedFaiOver)調度算法

常用作灰度發布

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

2.OVF(Overflow-connection)調度算法

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

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

防火墻標簽解決輪詢錯誤

輪詢規則中可能會遇到的錯誤

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

火墻標記

在RS1和RS2中安裝mod_ssl
yum install mod_ssl -y

標記前

[root@DRlvs ~]# ipvsadm -A -t 192.168.0.220:80 -s rr
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:80 -r 192.168.0.10:80 -g
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:80 -r 192.168.0.20:80 -g
[root@DRlvs ~]# ipvsadm -A -t 192.168.0.220:443 -s rr
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:443 -r 192.168.0.10:443 -g
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:443 -r 192.168.0.20:443 -g
[root@DRlvs ~]# 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.0.220:80 rr-> 192.168.0.10:80              Route   1      0          0-> 192.168.0.20:80              Route   1      0          0
TCP  192.168.0.220:443 rr-> 192.168.0.10:443             Route   1      0          0-> 192.168.0.20:443             Route   1      0          0

當訪問vip時兩次調度都到了RS1上,說明80端口和443端口并沒有組合到一起被lvs調度器調配

因為我們設置的是rr輪詢,那么第一次訪問如果是RS1的話,第二次訪問將會分配給RS2

[root@Router ~]# curl -k http://192.168.0.10;curl -k https://192.168.0.10
RS1 - 192.168.0.10
RS1 - 192.168.0.10

在這里插入圖片描述

這么來看訪問調度都不能滿足rr,80端口和443端口是獨立的,我們需要告訴lvs調度器80端口和443端口要一起調度,所以我們需要火墻標記。

標記后

[!CAUTION]

在此之前務必清除ipvsadm

[root@DRlvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.220 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 666[root@DRlvs ~]# iptables -t mangle -L -n -v
Chain PREROUTING (policy ACCEPT 6 packets, 432 bytes)pkts bytes target     prot opt in     out     source               destination0     0 MARK       6    --  *      *       0.0.0.0/0            192.168.0.220        multiport dports 80,443 MARK set 0x29a
......[root@DRlvs ~]# ipvsadm -A -f 666 -s rr
[root@DRlvs ~]# ipvsadm -a -f 666 -r 192.168.0.10 -g
[root@DRlvs ~]# ipvsadm -a -f 666 -r 192.168.0.20 -g[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  666 rr-> 192.168.0.10:0               Route   1      0          0-> 192.168.0.20:0               Route   1      0          0

為什么是mangle表,是因為數據包既不是進也不是出,也不是進入調度器本機,而是對于數據包進行附加的說明
-A添加,PREROUTING在路由之前,進來之前馬上打標記,-d目的地地址VIP -p協議 tcp協議 -m 指定我們標記的是接口(多端口) --dports 目標端口 -j 指定動作做標記 --set-mark 設定標記值

[root@Router ~]# curl -k http://192.168.0.220;curl -k https://192.168.0.220
RS2 - 192.168.0.20
RS1 - 192.168.0.10
[root@Router ~]# curl -k http://192.168.0.220;curl -k https://192.168.0.220
RS2 - 192.168.0.20
RS1 - 192.168.0.10
[root@Router ~]# curl -k http://192.168.0.220;curl -k https://192.168.0.220
RS2 - 192.168.0.20
RS1 - 192.168.0.10
[root@Router ~]# curl -k http://192.168.0.220;curl -k https://192.168.0.220
RS2 - 192.168.0.20
RS1 - 192.168.0.10[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  666 rr-> 192.168.0.10:0               Route   1      8          0-> 192.168.0.20:0               Route   1      8          0

可以正常輪詢,80端口和443端口也可以組合調配了

在這里插入圖片描述

在這里插入圖片描述

lvs持久鏈接

在我們客戶上網過程中有很多情況下需要和服務器進行交互,客戶需要提交響應信息給服務器,如果單純的進行調度會導致客戶填寫的表單丟失,為了解決這個問題我們可以用sh算法,但是sh算法比較簡單 粗暴,可能會導致調度失衡

**解決方案 **

在進行調度時,不管用什么算法,只要相同源過來的數據包我們就把他的訪問記錄在內存中,也就是把這個源的主機調度到了那個RS上 如果在短期(默認360S)內同源再來訪問我仍然按照內存中記錄的調度信息,把這個源的訪問還調度到 同一臺RS上。如果過了比較長的時間(默認最長時間360s)同源訪問再次來訪,那么就會被調度到其他的RS上。

[root@DRlvs ~]# ipvsadm -E -f 666 -s rr -p 300
[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  666 rr persistent 300-> 192.168.0.10:0               Route   1      0          0-> 192.168.0.20:0               Route   1      0          0

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在進行調度時,不管用什么算法,只要相同源過來的數據包我們就把他的訪問記錄在內存中,也就是把這個源的主機調度到了那個RS上 如果在短期(默認360S)內同源再來訪問我仍然按照內存中記錄的調度信息,把這個源的訪問還調度到 同一臺RS上。如果過了比較長的時間(默認最長時間360s)同源訪問再次來訪,那么就會被調度到其他的RS上。

[root@DRlvs ~]# ipvsadm -E -f 666 -s rr -p 300
[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  666 rr persistent 300-> 192.168.0.10:0               Route   1      0          0-> 192.168.0.20:0               Route   1      0          0

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

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

相關文章

在 ASP.NET Core 和 JavaScript 中配置 WebSocket

在本文中&#xff0c;我們將了解 WebSocket&#xff0c;并逐步講解如何在客戶端配置 WebSocket 并與服務器通信。首先&#xff0c;讓我們先來了解一下“ WebSocket ”。什么是 WebSocketWebSocket 是一種協議&#xff0c;它提供了一種通過持久連接在客戶端和服務器之間交換數據…

車載刷寫框架 --- 關于私有節點刷寫失敗未報引起的反思

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

ABP VNext + GitHub Actions:CI/CD 全流程自動化

&#x1f31f; ABP VNext GitHub Actions&#xff1a;CI/CD 全流程自動化 &#x1f4da; 目錄&#x1f31f; ABP VNext GitHub Actions&#xff1a;CI/CD 全流程自動化&#x1f929; TL;DR&#x1f504; 全局流程概覽1?? 準備工作與項目結構1.1 &#x1f6e0;? 工具鏈與 S…

Elasticsearch 重命名索引

作者&#xff1a;來自 Elastic Alex Salgado 學習如何使用四種實用方法在 Elasticsearch 中重命名索引。 想獲得 Elastic 認證&#xff1f;看看下一期 Elasticsearch Engineer 培訓什么時候開始&#xff01; Elasticsearch 擁有豐富的新功能&#xff0c;幫助你根據使用場景構建…

高通8255 Android Virtio Virtio-SPI 配置方法

目錄 一&#xff1a;VirtIO和Passthrough的區別 二&#xff1a;配置邏輯 三&#xff1a;配置方法 步驟一&#xff1a;QNX SPI資源配置 & 測試 配置 測試 步驟二&#xff1a;BE配置 &測試 配置 測試 步驟三&#xff1a;Hypervisor配置 配置 測試 步驟四&…

從零手寫紅黑樹(C++實現詳解)

目錄 一、紅黑樹概述 二、紅黑樹節點設計 (1)枚舉紅黑 &#xff08;2&#xff09;紅黑樹的節點設計 三、紅黑樹核心實現:Insert 1.首先將節點遍歷到對應位置創建對應節點并插入到二叉搜索樹對應的位置 2.本文重點的重點 &#xff08;1&#xff09;parent為黑時直接插入即…

【黃山派-SF32LB52】—硬件原理圖學習筆記

目錄 一、硬件介紹 二、芯片主控 1.模組介紹 2.原理圖介紹 3.模組供電電路 三、電源轉換部分 1.OVP過壓保護電路 2.CHG充電電路 3.系統電源橋接電路 4.LDO電路 四、Debug電路 1.一鍵下載電路 五、QSPI屏幕 六、SD卡 七、AUDIO音頻 八、GPIO電路 1.按鍵部分…

從五次方程到計算機:數學抽象如何塑造現代計算

引言 數學的發展往往始于一個具體的問題&#xff0c;而后在尋求解答的過程中&#xff0c;催生出深刻的抽象理論。從五次方程的求解到抽象代數&#xff0c;再到范疇論和λ演算&#xff0c;最終影響圖靈機和現代計算機的設計&#xff0c;這一歷程展現了數學如何從實際問題演變為通…

劇本殺小程序開發:科技賦能,重塑推理娛樂新形態

在科技飛速發展的今天&#xff0c;各個行業都在積極探索與科技的融合&#xff0c;以實現創新發展。劇本殺行業也不例外&#xff0c;劇本殺小程序的開發&#xff0c;正是科技賦能傳統娛樂的生動體現&#xff0c;它重塑了推理娛樂的新形態&#xff0c;為玩家帶來了前所未有的游戲…

機器學習sklearn入門:歸一化和標準化

bg&#xff1a;歸一化&#xff08;Normalization&#xff09;通常指將數據按比例縮放至某個特定范圍&#xff0c;但具體范圍并不一定是固定的 0到1。標準化是將數據轉換成均值為0&#xff0c;標準差為1的分布。使用場景&#xff1a;用歸一化&#xff1a;需要嚴格限定范圍&#…

【Project】kafka+flume+davinci廣告點擊實時分析系統

一、項目需求分析 某電商平臺需實現廣告實時點擊分析系統&#xff0c;核心需求為實時統計以下內容的Top10&#xff1a; 各個廣告的點擊量各個省份的廣告點擊量各個城市的廣告點擊量 通過實時掌握廣告投放效果&#xff0c;為廣告投放策略調整和大規模投入提供依據&#xff0c;以…

JAVA后端開發——success(data) vs toAjax(rows): 何時用

toAjax(int rows)用途&#xff1a;用于不返回任何數據的 “寫” 操作&#xff08;增、刪、改&#xff09;。工作原理&#xff1a;它只接收一個 int 類型的參數&#xff08;通常是數據庫操作影響的行數&#xff09;。它只關心這個數字是不是大于0&#xff0c;然后返回一個通用的…

pdf格式怎么提取其中一部分張頁?

想從PDF里提取幾個頁面&#xff0c;辦法還挺多的&#xff0c;下面給你嘮嘮常見的幾種&#xff0c;保準你一看就懂。一、用專業PDF編輯軟件提取 像Adobe Acrobat&#xff0c;這可是PDF編輯界的“老手”了。你先把要處理的PDF文件在Adobe Acrobat里打開&#xff0c;接著找到菜單欄…

Spring監聽器

1、監聽器的原理 ApplicationListener<T>是Spring框架中基于觀察者模式實現的事件監聽接口&#xff0c;用于監聽應用程序中特定類型的事件。該接口是一個函數式接口&#xff0c;從Spring 4.2開始支持Lambda表達式實現。 接口定義如下&#xff1a; FunctionalInterface …

基于Rust游戲引擎實踐(Game)

Rust游戲引擎推薦 以下是一些流行的Rust游戲引擎,適用于不同開發需求: Bevy 特點:數據驅動、模塊化設計,支持ECS架構,適合初學者和復雜項目。 適用場景:2D/3D游戲、原型開發。 Amethyst 特點:成熟的ECS框架,支持多線程,社區活躍。 適用場景:大型游戲或高性能應用。…

PyTorch 數據加載實戰:從 CSV 到圖像的全流程解析

目錄 一、PyTorch 數據加載的核心組件 1.1 Dataset 類的核心方法 1.2 DataLoader 的作用 二、加載 CSV 數據實戰 2.1 自定義 CSV 數據集 2.2 使用 TensorDataset 快速加載 三、加載圖像數據實戰 3.1 自定義圖像數據集 3.2 使用 ImageFolder 快速加載 四、加載官方數據…

程序人生,開啟2025下半年

時光匆匆&#xff0c;2025年已然過去一半。轉眼來到了7月份。 回望過去上半年&#xff0c;可能你也經歷了職場的浮沉、生活的跌宕、家庭的變故。 而下半年&#xff0c;生活依舊充滿了各種變數。 大環境的起起伏伏、生活節奏的加快&#xff0c;都讓未來的不確定性愈發凸顯。 在這…

在 .NET Core 中創建 Web Socket API

要在 ASP.NET Core 中創建 WebSocket API&#xff0c;您可以按照以下步驟操作&#xff1a;設置新的 ASP.NET Core 項目打開 Visual Studio 或您喜歡的 IDE。 創建一個新的 ASP.NET Core Web 應用程序項目。 選擇API模板&#xff0c;因為這將成為您的 WebSocket API 的基礎。在啟…

Python 之地址編碼識別

根據輸入地址&#xff0c;利用已有的地址編碼文件&#xff0c;構造處理規則策略識別地址的編碼。 lib/address.json 地址編碼文件&#xff08;這個文件太大&#xff0c;博客里放不下&#xff0c;需要的話可以到 gitcode 倉庫獲取&#xff1a;https://gitcode.com/TomorrowAndT…

kafka的部署

目錄 一、kafka簡介 1.1、概述 1.2、消息系統介紹 1.3、點對點消息傳遞模式 1.4、發布-訂閱消息傳遞模式 二、kafka術語解釋 2.1、結構概述 2.2、broker 2.3、topic 2.4、producer 2.5、consumer 2.6、consumer group 2.7、leader 2.8、follower 2.9、partition…