LVS(Linux virtual server)-實現四層負載均衡

一、簡介

LVS:Linux Virtual Server,負載調度器,內核集成,章文嵩,阿里的四層SLB(Server LoadBalance)是基 于LVS+keepalived實現

LVS 官網: http://www.linuxvirtualserver.org/

二、LVS運行原理

2.1LVS 的集群結構

2.2lvs相關概念

  • RS:Real Server
  • CIP:Client IP
  • VIP: Virtual serve IP VS(連接)外網的IP
  • DIP: Director IP VS內網的IP
  • RIP: Real server IP

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

2.3LVS的集群類型

  • lvs-nat:修改請求報文的目標IP,多目標IP的DNAT
  • lvs-dr: 操縱封裝新的MAC地址
  • lvs-tun:在原請求IP報文之外新加一個IP首部
  • lvs-fullnat: 修改請求報文的源和目標IP

以上4種類型前2種常用

2.3.1nat模式

lvs-nat:本質是多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發

2.3.1.1nat模式流程圖

  1. 客戶端發送訪問請求,請求數據包中含有請求來源(cip),訪問目標地址(VIP)訪問目標端口
  2. VS服務器接收到訪問請求做DNAT把請求數據包中的目的地由VIP換成RS的RIP和相應端口
  3. RS1相應請求,發送響應數據包,包中的相應保溫為數據來源(RIP1)響應目標(CIP)相應端口
  4. VS服務器接收到響應數據包,改變包中的數據來源(RIP1-->VIP),響應目標端口(9000-->80)VS服務器把修改過報文的響應數據包回傳給客戶端
  5. lvs的NAT模式接收和返回客戶端數據包時都要經過lvs的調度機,所以lvs的調度機容易阻塞
2.3.1.2模擬lvs-nat集群實驗(三層IP和四層端口)
實驗前準備
設備名稱IP
client172.25.250.111
lvs172.25.250.100(VIP|NAT)、192.168.252.100(DIP|僅主機)
rs1192.168.252.10
rs2192.168.252.20
設備的相關配置

lvs 調度器

#配置VIP和DIP(雙網卡)
DIP
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.252.100/24
method=manual#VIP
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=172.25.250.100/24,172.25.250.2
method=manual#激活VIP和DIP
nmcli connection reload
nmcli connection up eth0
nmcli connection up eth1#安裝ipvsadm
dnf install ipvsadm -y#編寫調度策略
ipvsadm -A -t 172.25.250.100:80 -s rr
ipvsadm -a -t 172.25.250.100:80 -r 192.168.252.10:80 -m
ipvsadm -a -t 172.25.250.100:80 -r 192.168.252.20:80 -m
ipvsadm-save / /etc/sysconfig.conf/ipvsadm
#查看調度策略
ipvsadm  -Ln #開啟路由內核轉發功能
vim /etc/sysctl.conf net.ipv4.ip_forward=1  
sysctl -p

rs1/2

#配置RIP
#RIP
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.252.20/24,192.168.252.100 #lvs上僅主機的網卡上的IP
method=manual#激活rip
nmcli connection reload
nmcli connection up eth0
測試

用client測試得到以下結果

2.3.2LVS-DR模式

DR:Direct Routing,直接路由,LVS默認模式,應用最廣泛,通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變

2.3.2.1DR模式流程圖

在DR模式中,RS接收到訪問請求后不需要回傳給LVS調度器,直接把回傳數據發送給client,所以RS和Lvs上都要有vip

  1. 客戶端發送數據幀給Lvs調度主機幀中內容為客戶端IP+客戶端的MAC+VIP+VIP的MAC
  2. LVS調度主機接收到數據幀后把幀中的VIP的MAC該為RS1的MAC,此時幀中的數據為客戶端IP+客戶端的MAC+VIP+RS1的MAC
  3. RS1得到2中的數據包做出響應回傳數據包,數據包中的內容為VIP+RS1的MAC+客戶端IP+客戶端IP的MAC
2.3.2.2模擬DR集群實驗(玩二層MAC地址)
實驗前準備
設備名稱IP
172.25.250.111client客戶端
172.25.250.100(nat)/192.168.252.100(僅主機)router的雙網卡對應的ip
192.168.252.111lvs的DIP
192.168.252.10RS1-rip
192.168.252.20RS2-rip
192.168.252.200集群對外的VIP
相關設備的配置

client

僅需修改網關,把網關設置為routernat網卡上的IPvim /etc/NetworkManager/system-connections/eth0.nmconnection[connection]id=eth0type=ethernetinterface-name=eth0[ethernet][ipv4]address1=172.25.250.111/24,172.25.250.100method=manual

router
#開啟內核路由轉發sysctl -a | grep ipv4.ip_forward
net.ipv4.ip_forward = 1
sysctl -p #開啟防火墻和地址偽裝
systemctl start firewalld
firewall-cmd --add-masquerade     #地址偽裝

lvs-dr
#配置DIP和VIP
DIP
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address0=192.168.252.111/24,192.168.252.100   #把網關設置為router僅網卡設備上的IP
====================================================================
VIP
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
method=manual
address0=192.168.252.200/32
address1=127.0.0.1/8
====================================================================
#激活DIP和VIP
nmcli connection reload
nmcli connection up eth0
nmcli connection up eth0    #可能會遇到激活網卡后無VIP情況,需要看網卡設備激活狀況
nmcli connection show 
# 編寫調度策略
ipvsadm -A -t 192.168.252.200:80 -s rr 
#-A:添加策略 -t:tcp  IP:虛擬IP  -s:調度算法 -rr:輪詢
#調度后端真實服務器
ipvsadm -a -t 192.168.252.200:80 -r 192.168.252.10:80 -g
ipvsadm -a -t 192.168.252.200:80 -r 192.168.252.20:80 -g#調度策略做永久保存
ipvsadm-save > /etc/sysconfig/ipvsadm
[root@dr-lvs system-connections]# cat /etc/sysconfig/ipvsadm
-A -t dr-lvs:http -s rr
-a -t dr-lvs:http -r 192.168.252.10:http -g -w 1
-a -t dr-lvs:http -r 192.168.252.20:http -g -w 1#重啟服務
systenctl start ipvssadm 
#關閉防火墻

RS1/2

#配置RIP和VIP
#RIP
[connection]
id=eth0
uuid=7ba00b1d-8cdd-30da-91ad-bb83ed4f7474
type=ethernet
interface-name=eth0
timestamp=1752646309[ipv4]
address1=192.168.252.20/24,192.168.252.100
dns=8.8.8.8;
method=manual#VIP
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
address1=192.168.252.200/32
address2=127.0.0.1/8
method=manual
#開啟arp抑制,防止客戶端請求穿透LVS的調度策略,直接訪問后端服務器
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
#net.ipv4.conf.all.arp_announce = 2
#net.ipv4.conf.all.arp_announce =1
#arp_announce 只響應同本機所有接口   arp_ignore 忽略arp報文
測試

排錯過程:

得出后端真實服務器的web沒有啟動

2.3.3實驗過程中的問題和排錯

2.3.3.1問題

可能會出現VIP配置沒問題,但是查不到vip的情況

原因之前激活過的網卡已占用設備位置,所以需要把之前激活的網卡刪除再重新激活后配置的網卡

執行nmcli connection delete 加上已占用網卡的uuid?

? ? ? ? nmcli connection up lo

排錯:
  • 后端服務器的防火火墻未關閉
  • 后端web服務沒有起/網關
  • 配置的ip沖突
  • 編寫策略有問題,是基于VIP去調度后端真實服務器

2.3.4TUN模式(了解)

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

2.3.4.1TUN模式流程圖

  1. 客戶端發送請求數據包,包內有源IP+vip+dport
  2. 到達vs調度器后對客戶端發送過來的數據包重新封裝添加IP報文頭,新添加的IP報文頭中包含TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并發送到RS1
  3. RS收到VS調度器發送過來的數據包做出響應,生成的響應報文中包含SRCIP(VIP)+DSTIP(CIP)+port,響應數據包通過網絡直接回傳給client
2.3.4.2TUN模式的特點
  • DIP, VIP, RIP都應該是公網地址
  • RS的網關一般不能指向DIP
  • 請求報文要經由Director,但響應不能經由Director
  • 不支持端口映射
  • RS的OS須支持隧道功能

2.3.5fullnet模式(了解)

2.3.5.1fullnet流程圖

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

CIP --> DIP

VIP --> RIP

2.3.6LVS工作模式總結

NAT模式TUN模式DR模式
RS操作系統不限支持隧道禁用arp
調度器和服務器網絡可跨網絡可跨網絡不可跨網絡
調度服務器數量服務器數量
RS服務器網關指向到調度器DIP指向到路由指向到路由

2.4LVS調度算法

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

least connections(最少鏈接發)

適用于長連接應用Overhead(負載值)=activeconns(活動鏈接數) x 256+inactiveconns(非活動鏈接數)

WLC

Weighted LC(權重最少鏈接)

默認調度方法Overhead=(activeconns x 256+inactiveconns)/weight

SED

Shortest Expection Delay,

初始連接高權重優先Overhead=(activeconns+1+inactiveconns) x 256/weight

但是,當node1的權重為1,node2的權重為10,經過運算前幾次的調度都會被node2承接

NQNever Queue,第一輪均勻分配,后續SED
LBLCLocality-Based LC,動態的DH算法,使用場景:根據負載狀態實現正向代理
LBLCRLBLC with Replication,帶復制功能的LBLC,解決LBLC負載不均衡問題,從負載重的復制到負載輕的RS

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

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

相關文章

Kubernetes CNI網絡插件性能瓶頸排查與優化實踐

Kubernetes CNI網絡插件性能瓶頸排查與優化實踐 CNI(Container Network Interface)是 Kubernetes 網絡層的核心組件,不同 CNI 插件實現了容器間網絡通信、多租戶隔離、流量限速等功能。然而在大規模集群或高并發業務場景下,CNI 插…

20250720-6-Kubernetes 調度-nodeName字段,DaemonS_筆記

一、污點與容忍1. 給節點添加污點1)命令格式基本語法:kubectl taint node [node] keyvalue:[effect]示例:kubectl taint node k8s-node1 gpuyes:NoSchedule操作說明:與打標簽命令類似,將"…

微軟開源項目 Detours 詳細介紹與使用實例分享

目錄 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours應用場景 5、Detours兼容性 6、Detours具體使用方法 7、Detours使用實例 - 使用Detours攔截系統庫中的UnhandledExceptionFilter接口,實現對程序異常的攔截 C++軟件異常排查從入門到精通系列教程…

研發知識系統選型實戰:從 Notion 到 Gitee Wiki 的迭代經驗

關鍵詞:知識管理、版本控制、協作編輯、國產平臺、研發效能 在日常研發管理中,知識管理平臺往往被視為“非核心工具”,但它的好壞直接影響著團隊交接效率、文檔可用性以及協作深度。過去幾年,我們團隊先后使用過 Notion、Confluen…

從一開始的網絡攻防(三):sqlmap快速上手

一、確定目標 使用sqlmap的第一步是確定探測的目標,一般有四種: 數據庫URL文件Google批量掃 環境 Target IP: 192.168.8.133 Port: 13306(Mysql)、8088(sqli_labs) mysql: docker pull的最新mysql sqlmap github:https://g…

《Anaconda 精簡路徑治理》系列 · 番外篇Conda 虛擬環境路徑結構方案全解——六種路徑布局對比、優劣與治理建議

Python 多版本環境治理理念驅動的系統架構設計:三維治理、四級隔離、五項自治 原則-CSDN博客 Anaconda 路徑精簡后暴露 python 及工具到環境變量的配置記錄-CSDN博客 【終極實戰】Conda/Poetry/Virtualenv/Pipenv/Hatch 多工具協同 AnacondaPyCharm:構建…

容器基礎知識3-kubectl、kubeadm 和 kubelet,kube-proxy

kubectl、kubeadm 和 kubelet,kube-proxy的概念和關系一、kubeadm:K8s 集群的 “搭建工程師”核心定位如果把 K8s 集群比作一棟大樓,kubeadm 就是負責 “打地基、搭框架” 的工程師,專門用來快速搭建 K8s 集群的工具。具體工作內容…

langchain調用本地ollama語言模型和嵌入模型

參考:ollama兼容OpenAIEmbeddings的解決思路 解決代碼: 訪問embedding模型代碼 # 測試以下兩個引用都可以 from langchain_openai import OpenAIEmbeddings #from langchain_community.embeddings import OpenAIEmbeddings from typing import List,…

gitlab私有化部署

以下是整理好的Markdown格式文檔,詳細描述了從下載鏡像、啟動鏡像、修改external_url以及設置或重置root密碼的步驟。 GitLab 安裝與配置指南 本文檔將指導您完成GitLab的安裝和基本配置過程,包括下載鏡像、啟動容器、修改外部訪問URL(external_url)及設…

CCLink IE轉ModbusTCP網關配置無紙記錄器(上篇)

本研究案例采用CCLink IE轉ModbusTCP網關技術,實現了將記錄儀數據傳輸至三菱PLCPLC的過程。具體操作步驟如下所述。在確保無紙記錄儀與PT100傳感器傳感器的連接無誤后,應將無紙記錄儀與個人計算機(PC)通過以太網線進行連接&#x…

近期工作感想:職業規劃篇

最近整理博客時,撞見意外的驚喜——17年剛畢業那會兒寫的職業規劃,靜靜躺在回收站里。 重讀那些碎碎念,忍不住想笑:那時候的焦慮太真切了,哪敢想后來會遇到這么多大佬,推著我往前一直陰暗爬行😂…

Matlab自學筆記六十四:求解自變量帶有約束條件的方程

1.說明 有一些方程由于實際問題的需要,需要設置一些限制約束條件,例如x>0等,若使用Matlab編程求解,首先嘗試使用符號運算求解(符號運算可參考文章54:Matlab自學筆記五十四:符號數學工具箱和…

Flutter狀態管理篇之ChangeNotifier(二)

目錄 前言 一、ChangeNotifier定義 1.ChangeNotifier定義 2.Listenable的定義 二、繼承體系 三、核心方法解析 1.類結構與屬性分析 1.Listenable的定義 2..核心字段 1.屬性解析 1._count 2._listeners 3.為什么不用const [] 4._notificationCallStackDep…

大帶寬服務器對于高流量網站的作用

隨著科學技術的快速發展,越來越多的網站面臨著高流量的訪問需求,在同一時間中會有著大量的用戶進行訪問,同時也提高了該企業的知名度,但是這對于服務器的性能需求也在逐漸增高,而大帶寬服務器卓越的性能和穩定的傳輸能…

2025年算法備案發號規律總結與下半年發號預測

上半年發號規律總結圖太糊?可看下方表格(左劃看全表)👇今年批次算法備案總批次發布時間所發當批算法材料提交時間段審核周期25年第一批第十批2025/3/122025年1月(春節前)約2個月25年第二批第十一批2025/5/1…

高光譜相機(Hyperspectral Camera)

高光譜相機(Hyperspectral Camera)高光譜相機:是一種可以采集連續、多達上百個窄波段的光譜信息的成像設備。它的核心特征是:每個像素點都擁有一個完整的光譜曲線,類似于“像素級別的光譜儀”。舉例:普通彩…

經典排序算法之歸并排序(Merge Sort)

歸并算法定義:所謂歸并排序是指將兩個或兩個以上有序的數列(或有序表),合并成一個仍然有序的數列(或有序表)。這樣的排序方法經常用于多個有序的數據文件歸并成一個有序的數據文件。歸并排序相比較之前的排…

Linux系統環境下 Node.js 20 安裝實踐:glibc 2.17 兼容方案與工具鏈優化

前言:在 CentOS 7.9 的生產環境中,默認搭載的 glibc 2.17 是系統的核心依賴,直接升級它可能引發穩定性風險。而 Node.js 20 作為較新的運行時,其與 glibc 的兼容性長期困擾著開發者:為什么有些場景下 Node.js 20 能直接…

構建一個簡單的Java框架來測量并發執行任務的時間

文章目錄一、完整代碼二、代碼解釋1、方法簽名2、初始化CountDownLatch3、提交任務到執行器4、任務線程的邏輯5、主線程的邏輯詳細解釋總結以下代碼實現了一個簡單的框架,用于測量并發執行任務的時間。它使用了Executor來執行任務,并通過CountDownLatch來…

精通 triton 使用 MLIR 的源碼邏輯 - 第001節:triton 的應用簡介

項目使用到 MLIR,通過了解 triton 對 MLIR 的使用,體會到 MLIR 在較大項目中的使用方式,匯總一下。1. Triton 概述OpenAI Triton 是一個開源的編程語言和編譯器,旨在簡化 GPU 高性能計算(HPC) 的開發&#…