LVS三種模式實戰

IPVS基本上是一種高效的Layer-4交換機,它提供負載平衡的功能。當一個TCP連接的初始SYN報文到達時,IPVS就選擇一臺服務器,將報文轉發給它。此后通過查看報文的IP和TCP報文頭地址,保證此連接的后繼報文被轉發到相同的服務器。這樣,IPVS不用檢查到請求的內容再選擇服務器,這就要求后端的服務器組是提供相同的服務,不管請求被送到哪一臺服務器,返回結果都應該是一樣的。但是在有一些應用中后端的服務器可能功能不一,有的是提供HTML文檔的Web服務器,有的是提供圖片的Web服務器,有的是提供CGI的Web服務器。這時,就需要基于內容請求分發 (Content-Based Request Distribution),同時基于內容請求分發可以提高后端服務器上訪問的局部性。

IPVS是LVS的關鍵,因為LVS的IP負載平衡技術就是通過IPVS模塊來實現的,IPVS是LVS集群系統的核心軟件,它的主要作用是:安裝在Director Server上,同時在Director Server上虛擬出一個IP地址,用戶必須通過這個虛擬的IP地址訪問服務。這個虛擬IP一般稱為LVS的VIP,即Virtual IP。訪問的請求首先經過VIP到達負載調度器,然后由負載調度器從Real Server列表中選取一個服務節點響應用戶的請求。

LVS的本身分成了兩個部分,第一部分是工作在內核空間的一個IPVS的模塊(工作在Netfilter框架的input鏈上),其實LVS的功能都是IPVS模塊實現的,第二部分是工作在用戶空間的一個用來定義集群服務的一個工具ipvsadm, 這個工具的主要作用是將管理員定義的集群服務列表傳送給工作在內核空間中的IPVS模塊。

重要命令介紹

ipvsadm常用指令

選項作用
-A添加虛擬服務節點
-D刪除虛擬服務節點
-L查看虛擬服務節點列表
-n以數字形式顯示查看內容
-a添加真實服務節點
-d刪除真實服務節點
-l查看真實服務節點列表
-t指定虛擬服務器IP地址
-s指定調度算法
-r指定真實服務器節點IP地址
-w指定權重值
-g直接路由模式(默認)
-mNAT模式
-i隧道模式

NAT模式

工作原理

  • 當用戶的請求到達調度器時,請求報文會先到內核空間的PREROUTING鏈上。此時報文的源IP為CIP,目標IP為VIP
  • PREROUTING檢查發現數據包的目標IP是本機,就將數據包送至INPUT鏈。
  • IPVS工作在INPUT鏈上,當數據包抵達INPUT鏈后,IPVS會檢查數據包所請求的服務是否為集群服務,若是,修改數據包的目標IP地址為后端服務器RIP,然后將數據包送往 POSTROUTING鏈。此時報文的源IP為CIP,目標IP為RIP。
  • POSTROUTING鏈通過選路,將數據包轉發給Real Server
  • Real Server對比發現目標IP是自己,就會接受這個請求報文,開始構建響應報文發回給調度器。源IP為RIP,目標IP為CIP
  • 調度器在響應客戶端前,會將報文的源IP地址修改為自己的VIP,然后響應給客戶端。此時報文的源IP為VIP,目標IP為CIP

LVS調度器(DS)配置

# 安裝對應模塊
yum -y install ipvsadm nginx  tcpdump# 開啟路由功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p# 加載ip_vs模塊
modprobe ip_vs
lsmod | grep ip_vs# 啟動ipvsadm服務,創建文件必須先創建
touch /etc/sysconfig/ipvsadm
systemctl enable --now ipvsadm# 配置分配策略
ipvsadm -A -t 192.168.100.100:80 -s rr
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.1:80 -m
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.1:80 -mipvsadm-save > /etc/sysconfig/ipvsadm

真實服務器(RS)端配置

yum -y install epel-release nginx tcpdumpsystemctl start nginx# 配置指定IP 192.168.100.1  192.168.100.2 ,且將網關指定為 192.168.100.100# 192.168.100.1
echo web1 > /usr/share/nginx/html/index.html
# 192.168.100.2
echo web2 > /usr/share/nginx/html/index.html

DR模式

工作原理

  • 當客戶端用戶發送請求給網站時,首先經過 DNS 解析到 IP 后并向百度服務器發送請求,數據包經過 LVS 負載均衡服務器
  • 這時到達 LVS 網卡時的數據包包括:源 IP 地址(客戶端地址)、目的 IP 地址(百度對外服務器 IP 地址,也就是 VIP)、源 MAC 地址(CMAC / LVS 連接路由器的 MAC 地址)、目標 MAC 地址(VMAC / VIP 對應的 MAC 地址)。
  • 數據包到達網卡后,經過鏈路層到達 PREROUTING 鏈,進行查找路由,發現目的 IP 是 LVS 的 VIP,這時就會發送至 INPUT 鏈中并且數據包的 IP 地址、MAC 地址、Port 都未經過修改。
  • 數據包到達 INPUT 鏈中,LVS 會根據目的 IP 和 Port(端口)確認是否為 LVS 定義的服務。
  • 如是定義過的 VIP 服務,會根據配置的服務信息,從 RealServer 中選擇一個后端服務器 RS1,然后 RS1 作為目標出方向的路由,確定下一跳信息及數據包通過具體的哪個網卡發出,最好將數據包通過 INET_HOOK 到 OUTPUT 鏈中。
  • 數據包通過 POSTROUTING 鏈后,目的 MAC 地址將會修改為 RealServer 服務器 MAC 地址(RMAC)源 MAC 地址修改為 LVS 與 RS 同網段的 IP 地址的 MAC 地址(DMAC)此時,數據包將會發至 RealServer 服務器。
  • 數據包到達 RealServer 服務器后,發現請求報文的 MAC 地址是自己的網卡 MAC 地址,將會接受此報文,待處理完成之后,將響應報文通過 lo 接口傳送給 eth0 網卡然后向外發出。
  • 此時的源 IP 地址為 VIP,目標 IP 為 CIP,源 MAC 地址為 RS1 的 RMAC,目的 MAC 地址為下一跳路由器的 MAC 地址(CMAC),最終數據包通過 RS 相連的路由器轉發給客戶端。

DS配置

# 刪除NAT模式的路由功能即net.ipv4.ip_forward = 1
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0 
net.ipv4.conf.default.send_redirects= 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p# 配置VIP
ifcfg ens33:0 192.168.100.101# ipvsadm 安裝同NAT模式# 配置分配策略
ipvsadm -A -t 192.168.100.101:80 -s rr
ipvsadm -a -t 192.168.100.101:80 -r 192.168.100.1:80 -g
ipvsadm -a -t 192.168.100.101:80 -r 192.168.100.2:80 -gipvsadm-save > /etc/sysconfig/ipvsadm

RS配置

# 啟用nginx同NAT模式,省略# 配置抑制ARP防止VIP在同一網段產生IP地址沖突
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1 
net.ipv4.conf.all.arp_announce=2 
net.ipv4.conf.default.arp_ignore=1 
net.ipv4.conf.default.arp_announce = 2 
net.ipv4.conf.lo.arp_ignore = 1 
net.ipv4.conf.lo.arp_announce=2# 為兩臺RS配置臨時虛擬ip并添加路由
ifconfig lo:0 192.168.100.101/32
route add -host 192.168.115.101/32 dev lo:0 # 將訪問交由本機處理后返回

TUNL模式

DS配置

# 安裝ipvsadm 同NAT模式ipvsadm -C# 啟用ipip模塊 使用隧道網卡配置VIP
modprobe ipip
ip addr add 192.168.100.102/24 dev tunl0
ip link set up tunl0
ip route del 192.168.100.0/24 dev tunl0#刪除tunl0路由# 啟用路由功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p# 配置調度策略
ipvsadm -A -t 192.168.100.102:80 -s rr
ipvsadm -a -t 192.168.100.102:80 -r 192.168.100.1:80 -i
ipvsadm -a -t 192.168.100.102:80 -r 192.168.100.2:80 -i
ipvsadm-save > /etc/sysconfig/ipvsadm

RS配置

# 啟用nginx同NAT模式,省略# 啟用ipip模塊 使用隧道網卡配置VIP
modprobe ipip
ip addr add 192.168.100.102/24 dev tunl0
ip link set up tunl0
ip route del 192.168.100.0/24 dev tunl0#刪除tunl0路由vim /etc/sysctl.conf
# 啟用路由功能
net.ipv4.ip_forward = 1
# 配置本地ipv4策略,防止VIP沖突
net.ipv4.conf.all.arp_ignore=1 
net.ipv4.conf.all.arp_announce=2 
net.ipv4.conf.default.arp_ignore=1 
net.ipv4.conf.default.arp_announce = 2 
net.ipv4.conf.lo.arp_ignore = 1 
net.ipv4.conf.lo.arp_announce=2
# 配置本地ipv4策略,防止訪問丟包
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.tunl0.rp_filter=0sysctl -p

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

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

相關文章

HCIA第二次綜合實驗:OSPF

HCIA第二次綜合實驗:OSPF一、實驗拓撲二、實驗需求 1、R1-R3為區域0,R3-R4為區域1;其中R3在環回地址在區域1; 2、R1、R2各有一個環回口; 3、R1-R3中,R3為DR設備,沒有BDR; 4、R4環回地…

深入解析環境變量:從基礎概念到系統級應用

目錄 一、基本概念及其核心作用 1、基本概念 2、核心作用 二、常見環境變量 三、查看環境變量方法 四、測試PATH 1、對比執行:./project和直接執行project的區別 2、思考:為何某些命令可直接執行而無需路徑,但我們的二進制程序卻需要…

Spring Boot:DTO 字段 cPlanId 無法反序列化的奇葩問題

本文記錄一次在 Spring Boot 項目中,DTO 字段明明有值,反序列化后卻是 null 的問題。最終發現并不是常見的 JSON 工具庫 Bug,而是隱藏在 setter 命名大小寫規則中的坑。💻 背景介紹技術棧如下:Spring Boot:…

文本生成視頻的主要開源模型

AI文本到視頻生成技術發展迅速,這些模型的“快速”通常指相對于傳統視頻制作的效率(生成時間從幾秒到幾分鐘,取決于硬件),但實際速度取決于您的計算資源(如GPU)。這些模型大多依賴于深度學習框架…

vscode里面怎么配置ssh步驟

01.ubuntu里面下載幾個插件還需要下載插件net-tools02.vscode里面下載插件會生成下面類似電視機的插件(room6)

【人工智能99問】激活函數有哪些,如何選擇使用哪個激活函數?(5/99)

文章目錄激活函數一、激活函數的分類1. 按“是否線性”分類2. 按“是否飽和”分類(針對非線性激活函數)3. 按“適用層”分類二、常見激活函數及特點(一)非線性激活函數(主要用于隱藏層)1. 飽和激活函數&…

代數——第4章——線性算子(算符)(Michael Artin)

第 4 章 線性算子(Linear Operators) That confusions of thought and errors of reasoning still darken the beginnings of Algebra, is the earnest and just complaint of sober and thoughtful men. (思維混亂和推理錯誤 仍然使代數的開端變得模糊不清, …

Neo4j Python 驅動庫完整教程(帶輸入輸出示例)

Neo4j Python 驅動庫完整教程(帶輸入輸出示例) 1. 基礎連接示例 輸入代碼 from neo4j import GraphDatabase# 連接配置 URI "bolt://localhost:7687" USER "neo4j" PASSWORD "password123" # 替換為你的實際密碼def t…

Axios 和 Promise 區別對比

Axios 和 Promise 是前端開發中兩個不同的概念,盡管 Axios 基于 Promise 實現,但它們的核心定位和功能有顯著區別。以下是對比分析: 1. 核心定位與功能Promise 定義:Promise 是 JavaScript 的異步編程方案,用于處理異步…

Git分支管理與工作流詳解

前言 分支管理是Git最強大的功能之一,它允許開發者在不影響主代碼庫的情況下創建獨立的工作空間。本文將詳細介紹Git分支的操作和常見工作流策略,幫助團隊更高效地協作開發。 1. Git分支的基本概念 1.1 什么是分支 在Git中,分支本質上是指…

【flutter】flutter網易云信令 + im + 聲網rtm從0實現通話視頻文字聊天的踩坑

接了一個國外的項目,項目采用網易云im 網易云信令聲網rtm遇到的一些問題這個項目只對接口,給的工期是兩周,延了工期,問題還是比較多的 需要全局監聽rtm信息,收到監聽內容,引起視頻通話網易云給的文檔太爛,所有的類型推策只能文檔一點點推聲網的rtm配置網易云的信令,坑太多,比如…

hive/spark sql中unix_timestamp 函數的坑以及時間戳相關的轉換

我用的是hive版本是3.1.3,spark版本是3.3.1,它們的unix_timestamp 函數在同樣的語句下轉換出來的時間戳是完全不同的,如下試驗所示1.unix_timestamp 函數的坑上圖試驗中我同樣的計算 2025-07-11 10:00:00 時間點對應的時間戳,但是…

MyBatis專欄介紹

專欄導讀 在當今的軟件開發領域,持久層框架的選擇對于提高開發效率和數據處理能力至關重要。MyBatis作為一個半自動化的ORM框架,因其靈活、高效的特點,在眾多開發者中廣受好評。本專欄《MyBatis實戰》旨在通過深入淺出的方式,幫助…

HarmonyOS從入門到精通:自定義組件開發指南(七):自定義事件與回調

HarmonyOS從入門到精通:自定義組件開發指南(七):自定義事件與回調 在HarmonyOS應用開發中,組件化架構是構建復雜界面的基礎,而組件間的高效通信則是實現業務邏輯的核心。自定義事件與回調機制作為組件交互的…

C++編程學習(第七天)

基于過程的程序設計C既可以用來進行基于過程的程序設計,又可以用來進行面向對象的程序設計。基于過程的程序設計又稱為過程化的程序設計,它的特點是:程序必須告訴計算機應當具體怎么做,也就是要給出計算機全部操作的具體過程&…

ubuntu透網方案

場景:兩個linux/Ubuntu系統,一個可以上網,一個不能,讓不能上網的,讓能上網的共享網絡 步驟 1:修改 /etc/sysctl.conf sudo nano /etc/sysctl.conf 找到或添加以下行: net.ipv4.ip_forward1 按 CtrlO 保存&a…

基于Python的物聯網崗位爬取與可視化系統的設計與實現【海量數據、全網崗位可換】

文章目錄有需要本項目的代碼或文檔以及全部資源,或者部署調試可以私信博主項目介紹數據采集數據預處理系統展示總結每文一語有需要本項目的代碼或文檔以及全部資源,或者部署調試可以私信博主 項目介紹 隨著物聯網技術的迅速發展,物聯網行業…

線性回歸原理推導與應用(十):邏輯回歸多分類實戰

本篇文章將利用sklearn中內置的鳶尾花數據進行邏輯回歸建模并對鳶尾花進行分類。對于邏輯回歸和線性回歸的相關原理,可以查看之前的文章 數據導入 鳶尾花數據是機器學習里的常用數據,首先導入一些基礎庫并從sklearn中導入數據集 #導入用到的一些pytho…

Docker 部署emberstack/sftp 鏡像

Docker 部署 emberstack/sftp 鏡像 1、找到國內可用的docker源,本次測試使用docker.1ms.run 2、下載emberstack/sftp鏡像docker pull docker.1ms.run/emberstack/sftp3、安裝并啟動emberstack/sftp鏡像docker run -d -p 22:22 --name SFTP -v D:\SFTP:/home/sftpuser/sftp --pr…

【華為OD】MVP爭奪戰2(C++、Java、Python)

文章目錄題目題目描述輸入描述輸出描述示例思路核心思路:關鍵觀察:算法步驟:排序策略:特殊情況處理:代碼CJavaPython復雜度分析時間復雜度空間復雜度結果總結題目 題目描述 給定一個整型數組,請從該數組中…