LVS(Linux Virtual Server)集群技術詳解

一.集群和分布式:

集群:同一個業務系統,部署在多臺服務器上,集群中,每一臺服務器實現的功能沒有差別,數據和代碼都是一樣的
?

分布式:一個業務被拆成多個子業務,或者本身就是不同的業務,部署在多臺服務器上。分布式中,每一臺服務器實現的功能是有差別的,數據和代碼也是不一樣的,分布式每臺服務器功能加起來,才是完整的業務

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

對于大型網站,訪問用戶很多,實現一個群集,在前面部署一個負載均衡服務器,后面幾臺服務器完成同一業務。如果有用戶進行相應業務訪問時,負載均衡器根據后端哪臺服務器的負載情況,決定由給哪一臺去完成響應,并且臺服務器垮了,其它的服務器可以頂上來。分布式的每一個節點,都完成不同的業務,如果一個節點垮了,那這個業務可能就會失敗

二.LVS 介紹

定義
LVS 是基于 Linux 內核的四層(傳輸層)負載均衡解決方案,由章文嵩博士開發,用于構建高性能、高可用的服務器集群。

核心組件

  • Director(調度器):接收客戶端請求并分發到后端 Real Server。

  • Real Server(真實服務器):實際處理請求的后端服務器集群。

  • VS:Virtual Server: 虛擬服務器

  • VIP(虛擬 IP):對外提供服務的虛擬 IP 地址。

  • RIP(真實 IP):后端服務器的真實 IP 地址。

  • CIP:Client IP

VS:負責調度
RS:負責真正的服務
訪問流程:CIP VIP == DIP RIP

官網The Linux Virtual Server Project - Linux Server Cluster for Load Balancinghttp://www.linuxvirtualserver.org/?lvs集群體系結構

?LVS的三種工作模式

NAT

Ivs-nat:

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

RIP和DIP應在同一個IP網絡,且應使用私網地址;RS的網關要指向DIP

請求報文和響應報文都必須經由Director轉發,Director易于成為系統瓶頸支持端口映射,可修改請求報文的目標PORT

VS必須是Linux系統,RS可以是任意OS系統

?NAT模式的工作流程

1.客戶端發送訪問請求,請求數據包中含有請求來源(cip),訪問目標地址(VIP)訪問目標端口(9000port)

2.VS服務器接收到訪問請求做DNAT把請求數據包中的目的地由VIP換成RS的RIP和相應端口

3.RS1相應請求,發送響應數據包,包中的相應保溫為數據來源(RIP1)響應目標(CIP)相應端口(9000port)

4.VS服務器接收到響應數據包,改變包中的數據來源(RIP1-->VIP),響應目標端口(9000-->80)

5.VS服務器把修改過報文的響應數據包回傳給客戶端

6.lvs的NAT模式接收和返回客戶端數據包時都要經過lvs的調度機,所以lvs的調度機容易阻塞

圖解

客戶請求到達vip后進入PREROUTING,在沒有ipvs的時候因該進入本機INPUT,當IPVS存在后訪問請求在通過PREROUTING后被ipvs結果并作nat轉發

因為ipvs的作用點是在PREROUTING和INPUT鏈之間,所以如果在prerouting中設定規則會干擾ipvs的工作。所以在做lvs時要把iptables的火墻策略全清理掉。

DR

TUN

LVS三種工作模式對比

模式原理優點缺點
NAT修改數據包的IP/端口支持端口映射,配置簡單Director 易成瓶頸
DR(Direct Routing)僅修改 MAC 地址,不修改 IP性能極高(90% 吞吐量)要求 Real Server 與 Director 同局域網
TUN(IP 隧道)通過 IP 隧道封裝數據包可跨機房部署配置復雜,隧道開銷高


?關鍵區別

  • NAT/FullNAT:請求和響應均經過Director。

  • DR/TUN:僅請求報文經過Director,響應報文由RS直接返回客戶端。

vs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發

lvs-tun:通過在原IP報文外封裝新IP頭實現轉發,支持遠距離通信

lvs-nat與lvs-fullnat:請求和響應報文都經由Director

lvs-nat:RIP的網關要指向DIP

LVS調度算法

LVS支持多種調度算法,分為靜態和動態兩類:

1. 靜態算法(不考慮RS負載)
  • RR(輪詢):均分請求到各RS。? ——適用場景:Real Server 性能均等

  • WRR(加權輪詢):根據RS性能分配權重。 ——適用場景:Real Server 配置不均

  • SH(源地址哈希):同一客戶端固定訪問同一RS(會話保持)。 ——適用場景:需要會話保持的應用

2. 動態算法(基于RS負載狀態)
  • LC(最少連接):優先選擇連接數最少的RS。 ——適用場景:長連接服務(如數據庫)

  • WLC(加權最少連接):默認算法,結合權重和連接數。 ——適用場景:Real Server 性能均等,但需動態平衡 “連接數”,避免節點過載。

  • SED/NQ:優化高權重節點的初始連接分配。 ——適用場景:Real Server 性能均等,但需?“優先讓高權重節點承接初始連接”(哪怕連接數稍多 ),或需 “初始流量傾斜”。

??

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(tcp)|u(udp)|f(防護墻標簽) \

service-address(集群地址) \

[-s scheduler(調度算法)] \

[-p [timeout]] \

[-M netmask] \

[--pepersistence_engine] \

[-b sched-flags]


?

ipvsadm -D -t|u|f service-address 刪除

ipvsadm –C 清空

ipvsadm –R 重載

ipvsadm -S [-n] 保存

?

管理集群中的real server

ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w weight](權重)

ipvsadm -d -t|u|f service-address -r server-address? 刪除RS

ipvsadm -L|l [options]? ? ? ? ? ? ? ? ? 查看rs

ipvsadm -Z [-t|u|f service-address]? ? ? ? 清楚計數器

lvs集群中的增刪改

1.管理集群服務中的增刪改

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

-A #添加

-E #修改

-t #tcp服務

-u #udp服務

-s #指定調度算法,默認為WLC

-p #設置持久連接超時,持久連接可以理解為在同一個時間段同一個來源的請求調度到同一Realserver-f #firewall mask 火墻標記,是一個數字

形式?

#增加

[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr

[root@DR-server ~]# ipvsadm -A -f 66 -p 3000

#修改

[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000

#刪除

[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80[root@DR-server ~]# ipvsadm -D -f 66

2.管理集群中RealServer的曾增刪改

-a? ? ? ? ? ? ? ? ? ? ?#添加realserver

-e? ? ? ? ? ? ? ? ? ? ?#更改realserver-t #tcp協議

-u? ? ? ? ? ? ? ? ? ? ? #udp協議

-f? ? ? ? ? ? ? ? ? ? ? ?#火墻 標簽

-r? ? ? ? ? ? ? ? ? ? ? ?#realserver地址

-g? ? ? ? ? ? ? ? ? ? ? #直連路由模式

-i? ? ? ? ? ? ? ? ? ? ? ?#ipip隧道模式

-m? ? ? ? ? ? ? ? ? ? #nat模式

-w? ? ? ? ? ? ? ? ? ? #設定權重

-Z? ? ? ? ? ? ? ? ? ? ?#清空計數器

-C? ? ? ? ? ? ? ? ? ? #清空lvs策略

-L? ? ? ? ? ? ? ? ? ? ?#查看lvs策略

-n? ? ? ? ? ? ? ? ? ?#不做解析

--rate? ? ? ? ? ? ? ?#輸出速率信息

形式

ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]


?

#添加

[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m

[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2

#更改

[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1

[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1

#刪除

[root@DR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30

[root@DR-server ~]# ipvsadm -Ln

[root@DR-server ~]# ipvsadm -Ln --rate

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port ? ? ? ? ? ? ? ? CPS ? InPPS ? OutPPS ? InBPS ? OutBPS

? ?-> RemoteAddress:Port

TCP 172.25.254.100:80? ? ? ? ? ? ? ? ??0? ? ? ? ? 0? ? ? ? ? ? ? ? 0? ? ? ? ? ?0? ? ? ? ? ? 0? ?

? ?-> 192.168.0.30:80? ? ? ? ? ? ? ? ? ? ? ?0? ? ? ? ??0? ? ? ? ? ? ? ? 0? ? ? ? ? ?0? ? ? ? ? ??0

? ?-> 192.168.0.40:80? ? ? ? ? ? ? ? ? ? ? ? 0? ? ? ?? 0? ? ? ? ? ? ? ? 0? ? ? ? ?? 0? ? ? ? ? ? 0


[root@DR-server ~]# ipvsadm -C? ?——清空所有策略

[root@DR-server ~]# ipvsadm -Z -t 172.25.254.20:80

[root@DR-server ~]# ipvsadm -Ln --rate

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port ? ? ? ? ? ? ? ? CPS ? InPPS ? OutPPS ? InBPS ? OutBPS

? ?-> RemoteAddress:Port

TCP 172.25.254.20:80 ? ? ? ? ? ? ? ? ? 0? ? ? ? ? ? 0? ? ? ? ? ? ?0? ? ? ? ? ? 0? ? ? ? ? ? ?0

? -> 192.168.0.30:80? ? ? ? ? ? ? ? ? ? ? ?0? ? ? ? ? ? 0? ? ? ? ? ? ? 0? ? ? ? ? ?0? ? ? ? ? ? ?0?

? ?-> 192.168.0.40:80? ? ? ? ? ? ? ? ? ? ? 0? ? ? ? ? ? 0? ? ? ? ? ? ? ?0? ? ? ??? 0? ? ? ? ? ? ?0

?

?

?

NAT模式集群實驗:

實驗環境

主機名IPVIP角色
lvs192.168.0.100172.25.254.100調度器(VS)
RS1192.168.0.10,GW192.168.0.100null真實服務器(RS)
RS2192.168.0.20,GW192.168.0.100null真實服務器(RS)
client172.25.254.111測試機

注:

此實驗要關閉火墻然后網頁里要寫內容

systemctl disable --now firewalld.service

echo 20 > /var/www/html/index.html

實驗開始:

1.在lvs中啟用內核路由功能

]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf]# sysctl --system

2.在node1中安裝ipvsadm

]# yum install ipvsadm -y

?3.在node1中添加調度策略

# ipvsadm -A -t 172.25.254.100:80 -s rr
]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m

4.查看策略

ipvsadm -Ln

?5.保存策略

ipvsadm -Sn

?

?6.刪除所有策略

ipvsadm -C

?7.重新加載策略

]# ipvsadm -R < /etc/sysconfig/ipvsadm-config
]# ipvsadm -Ln

?8.以上操作均為臨時,如果想開機啟動,就得設置

]# systemctl enable --now ipvsadm.service

?9.測試:

for N in {1..6};do curl 172.25.254.100;done

?

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

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

相關文章

leetcode_27 移除元素

1. 題意 給定一個數組&#xff0c;把不等于val的元素全部移動到數組的前面來。 不需要考慮值為val里的元素。 2. 題解 2.1 同向雙指針 我們利用雙指針&#xff0c;慢指針指向下一個插入的位置。而快指針不斷向前找到首個不為val的值&#xff0c;找到后將快指針位置值賦給慢…

Linux-Ubuntu下的git安裝與配置

一、安裝git1.打開終端&#xff0c;運行以下命令&#xff08;需要聯網&#xff09;sudo apt-get update sudo apt-get install git2.驗證安裝安裝完成之后&#xff0c;通過運行以下命令驗證git是否已經正確安裝&#xff1a;git --version二、配置git2.1.配置用戶名及郵箱地址在…

2D和3D激光slam的點云去運動畸變

在使用激光雷達設備采集點云的時候&#xff0c;我們都知道&#xff0c;激光雷達是邊運動邊采集的&#xff0c;每一個點云采集時的激光雷達的中心和姿態都是不一樣的&#xff0c;如果不加以矯正&#xff0c;那么這一幀數據就會出現問題&#xff0c;比如采集一個平面的結構的時候…

Java 熱門面試題 200 道(Markdown表格版)【簡化版】

Java 熱門面試題 200 道(Markdown表格版)【簡化版】 Java與數據庫核心面試題摘要 本文精選200道Java與數據庫高頻面試題,重點涵蓋: Java集合: HashMap原理(數組+鏈表/紅黑樹)、ConcurrentHashMap分段鎖優化、紅黑樹改進目的(解決哈希沖突性能問題) MySQL索引: 最左前…

OpenCV探索之旅:多尺度視覺與形狀的靈魂--圖像金字塔與輪廓分析

在我們學會用Canny算法勾勒處世界的輪廓之后&#xff0c;一個更深層次的問題擺在了面前&#xff1a;這些由像素組成的線條&#xff0c;如何才能被賦予“生命”&#xff0c;成為我們能夠理解和分析的“形狀”&#xff1f;如果一個物體在圖像中時大時小&#xff0c;我們又該如何穩…

Redis作緩存時存在的問題及其解決方案

Redis最常用的一個場景就是作為緩存&#xff0c;本文主要探討Redis作為緩存&#xff0c;在實踐中可能會有哪些問題&#xff1f;比如一致性, 穿擊, 穿透, 雪崩, 污染等。 為什么要理解Redis緩存問題 在高并發的業務場景下&#xff0c;數據庫大多數情況都是用戶并發訪問最薄弱的…

day17 力扣654.最大二叉樹 力扣617.合并二叉樹 力扣700.二叉搜索樹中的搜索 力扣98.驗證二叉搜索樹

最大二叉樹給定一個不重復的整數數組 nums 。 最大二叉樹 可以用下面的算法從 nums 遞歸地構建:創建一個根節點&#xff0c;其值為 nums 中的最大值。遞歸地在最大值 左邊 的 子數組前綴上 構建左子樹。遞歸地在最大值 右邊 的 子數組后綴上 構建右子樹。返回 nums 構建的 最大…

天地圖前端實現geoJson與wkt格式互轉

geoJson與wkt都是WebGIS開發中經常用到的格式&#xff0c;天地圖行政區劃邊界接口返回的是wkt格式數據&#xff0c;需要轉換一下。 安裝插件&#xff1a;terraformer/wkt npm install terraformer/wkt 兩個函數&#xff1a; .wktToGeoJSON(WKT) ? object.geojsonToWKT(Geo…

(1-7-3)數據庫的基本查詢

目錄 1. 數據庫的基本查詢 1.1 簡單的記錄查詢 1.2 使用列別名 2. 數據分頁查詢 &#xff08;1&#xff09;查詢前五行數據 &#xff08;2&#xff09;查詢 11 ~ 15 行數據 3. 結果集排序 3.1 單關鍵字排序 &#xff08;1&#xff09;升序排列 &#xff08;2&#…

寶塔配置pgsql可以遠程訪問及pdo_pgsql擴展的安裝

本地navicat premium 17.0 可以遠程訪問pgsql v16.1寶塔的軟件商店里&#xff0c;找到pgsql管理器&#xff1b;在pgsql管理器里找到客戶端認證&#xff1a;第二步&#xff1a;配置修改&#xff0c;CtrlF 查找listen_addresses關鍵字&#xff1b;第三步&#xff1a;在navicat里配…

SQL進階:自連接的用法

目錄 一、可重排列、排列、組合 1、創建表 2、錄入數據 3、獲取可重排列的商品名稱&#xff08;有序&#xff09; 4、獲取排列的商品名稱&#xff08;有序&#xff09; 5、獲取組合的商品名稱&#xff08;無序&#xff09; 6、獲取3個元素的組合商品名稱&#xff08;無序…

Spark集群優化配置指南

Spark集群優化配置指南 &#x1f4cb; 概述 本文檔記錄了5節點Spark集群的性能優化配置&#xff0c;主要解決Thrift Server內存不足(OOM)問題和CPU資源利用率低的問題。 文檔內容 Spark架構原理: Driver與Executor的關系和工作機制Driver內存配置詳解: 三個關鍵內存參數的作用和…

Layui —— select

前言&#xff1a;記錄在修改bug時遇到的一些奇怪問題。遇到的奇怪問題1&#xff1a;項目中引入了 layui&#xff0c;而且也使用了 layui.use 按需導入了需要的組件&#xff0c;但是在頁面每次剛初始化的時候去使用layui&#xff0c;控制臺都會報 組件未定義的問題&#xff08;正…

代碼隨想錄day32dp1

文章目錄509. 斐波那契數70. 爬樓梯746. 使用最小花費爬樓梯確定dp數組&#xff08;dp table&#xff09;以及下標的含義 確定遞推公式 dp數組如何初始化 確定遍歷順序 舉例推導dp數組509. 斐波那契數 題目鏈接 文章講解 class Solution { public:int fib(int n) {// 1. 確定…

RedisJSON 技術揭秘`JSON.ARRTRIM`用窗口裁剪,讓數組保持“剛剛好”

1、指令速查 JSON.ARRTRIM <key> <path> <start> <stop>key&#xff1a;Redis 鍵名path&#xff1a;JSONPath&#xff0c;默認 $ 根&#xff1b;可用 .[*]/.. 多路徑匹配start / stop&#xff1a;要保留的 [start, stop] 閉區間索引 支持負值&#xff…

fpga調試經驗

fpga調試經驗 調測場景&#xff1a; 外接adc傳感器芯片&#xff0c;采集壓力&#xff0c;溫度等模擬量&#xff0c;fpga通過spi/i2c接口與adc傳感器芯片通信 問題1&#xff1a;adc芯片在穩定環境中&#xff0c;輸出數字量不穩定。 結論&#xff1a;adc輸入電壓由fpga板供應&…

cefSharp.WinForms.NETCore 138.xx (cef138/Chromium 138.0.7204.97) 升級測試體驗

一、版本說明及變化 該版本支持cef138.0.x系列,cefsharp138.0.170 無重大更新;該版本暫不支持h264,請關注后續 關注欄目,關注我,學習cefsharp少走彎路 不迷路! CefSharp 設置緩存的注意事項參考 說明:欄目是訂閱文章,無附件,如需要單獨獲取(看底部介紹說明) 該版本1…

chatgpt是怎么誕生的,詳解GPT1到GPT4的演化之路及相關背景知識

人工智能革命正在發生&#xff0c;我們是何其幸運的一代&#xff0c;能親眼見證人類/機器智能的大爆發。 僅僅作為這場革命的看客顯然是有些遺憾的&#xff0c;如何進一步了解它&#xff1f; 本文將討論chatgpt的誕生過程&#xff0c;串聯起OpenAI發表的一系列重要論文&#…

[筆記] 動態 SQL 查詢技術解析:構建靈活高效的企業級數據訪問層

文章目錄一. 應用場景二. 使用示例示例1示例2示例3三. 實現1. 動態表查詢構建器&#xff0c;模仿MyBatis-Plus2. mapper3. mapper.xml功能概述參數說明四. 動態 SQL 的優化與風險防控在企業級應用開發中&#xff0c;數據查詢場景往往呈現出復雜多變的特點 —— 從簡單的單表篩選…

.net天擎分鐘降水數據統計

1.需求&#xff1a;計算滑動時間下的1小時、3小時、6小時、12小時、24小時降水數據&#xff0c;統計這個時間下的分鐘級降水數據2.分析第一版本&#xff1a;降水分鐘級數據保存時間不長&#xff0c;保存太多意義不大&#xff0c;以更新的形式來保存這些統計數據效果會比較好&am…