LVS + Keepalived 高可用負載均衡集群

目錄

一、核心組件與作用

1. LVS(Linux Virtual Server)

2. Keepalived

二、DR 模式下的 LVS + Keepalived 工作原理

1. 整體架構

2. 數據包流向(DR 模式)

三、部署步驟(DR 模式)

3.1 環境規劃

3.2 主 / 備 LVS 節點配置(以主節點為例)

(1)基礎環境準備

(2)配置 VIP(主 / 備節點均需配置)

(3)配置 Keepalived(主節點)

(4)優化內核參數(主 / 備節點均需配置)

(5)啟動服務

3.3 后端 RS 配置(RS1 和 RS2 均需配置)

(1)綁定 VIP 到 lo 接口

(2)優化 ARP 策略(避免 MAC 沖突)

(3)部署 Web 服務

四、測試與驗證

五、核心優勢與注意事項

優勢

注意事項

六、與其他方案對比(LVS+Keepalived vs Nginx/HAProxy)

三種模式的選擇依據


一、核心組件與作用

1. LVS(Linux Virtual Server)

  • 定位:內核級四層負載均衡器,通過虛擬 IP(VIP)將客戶端請求分發到后端真實服務器(Real Server,RS)。
  • 核心功能
    • 基于不同模式(DR/NAT/TUN)實現流量轉發,其中?DR 模式因高性能成為主流選擇。
    • 支持多種調度算法(如輪詢 rr、加權輪詢 wrr 等),實現請求的均衡分發。
  • 優勢:工作在內核態,轉發效率極高,適合高并發場景(百萬級并發支撐)。

2. Keepalived

  • 定位:基于 VRRP 協議的高可用工具,為 LVS 提供故障轉移和健康檢查能力。
  • 核心功能
    • VIP 漂移:監控 LVS 主節點狀態,故障時自動將 VIP 切換到備用節點,避免單點故障。
    • 健康檢查:檢測后端 RS 狀態,自動剔除故障節點,確保請求僅分發到正常服務。
    • 集群管理:直接集成 LVS 配置,統一管理負載均衡規則。

二、DR 模式下的 LVS + Keepalived 工作原理

1. 整體架構

  • 角色分工
    • 主 LVS 節點(MASTER):承載 VIP,處理并分發客戶端請求,發送 VRRP 心跳給備節點。
    • 備 LVS 節點(BACKUP):監聽主節點心跳,主節點故障時接管 VIP,繼續提供負載均衡。
    • 后端 RS:部署 Web 等服務,通過 lo 接口綁定 VIP,直接響應客戶端(不經過 LVS)。
  • VIP 流轉:正常時 VIP 在主 LVS 節點,主節點故障后 VIP 自動漂移到備節點。

2. 數據包流向(DR 模式)

  1. 客戶端 → 主 LVS 節點:客戶端請求發送到 VIP,數據包到達主 LVS 內核空間。
  2. LVS → 后端 RS:LVS 僅修改數據包的目標 MAC 地址(改為目標 RS 的 MAC),IP 地址不變(源 CIP,目標 VIP),通過二層網絡發送到 RS。
  3. RS → 客戶端:RS 通過 lo 接口的 VIP 處理請求,響應數據包直接發送給客戶端(源 VIP,目標 CIP),不經過 LVS。

三、部署步驟(DR 模式)

3.1 環境規劃

角色IP 地址核心配置
主 LVS(MASTER)192.168.10.80綁定 VIP 192.168.10.180
備 LVS(BACKUP)192.168.10.23備用節點,主節點故障時接管 VIP
后端 RS1192.168.10.16部署 Web 服務,lo 接口綁定 VIP
后端 RS2192.168.10.17部署 Web 服務,lo 接口綁定 VIP
客戶端192.168.10.100訪問 VIP 192.168.10.180

3.2 主 / 備 LVS 節點配置(以主節點為例)

(1)基礎環境準備
# 關閉防火墻和 SELinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config# 安裝工具
yum -y install ipvsadm keepalived
modprobe ip_vs  # 加載 LVS 內核模塊
(2)配置 VIP(主 / 備節點均需配置)
# 創建虛擬網卡配置文件
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0# 編輯配置(子網掩碼必須為 255.255.255.255)
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
IPV6INIT=no# 啟動虛擬網卡
ifup ens33:0
(3)配置 Keepalived(主節點)
vim /etc/keepalived/keepalived.conf
global_defs {router_id LVS_01  # 主節點標識,備節點改為 LVS_02
}# VRRP 實例(控制 VIP 漂移)
vrrp_instance VI_1 {state MASTER       # 備節點改為 BACKUPinterface ens33    # 綁定 VIP 的物理網卡virtual_router_id 10  # 主備節點需一致priority 100       # 主節點優先級高于備節點(備節點設為 90)advert_int 1       # 心跳間隔 1 秒authentication {auth_type PASSauth_pass abc123  # 主備節點認證密碼需一致}virtual_ipaddress {192.168.10.180  # VIP 地址}
}# LVS 負載均衡配置
virtual_server 192.168.10.180 80 {delay_loop 6       # 健康檢查間隔 6 秒lb_algo rr         # 調度算法:輪詢lb_kind DR         # 模式:DRpersistence_timeout 50  # 會話保持超時 50 秒(同一客戶端 50 秒內固定訪問同一 RS)protocol TCP# 后端 RS1 配置real_server 192.168.10.16 80 {weight 1      # 權重(越高分配越多請求)TCP_CHECK {   # TCP 健康檢查connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}# 后端 RS2 配置real_server 192.168.10.17 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
(4)優化內核參數(主 / 備節點均需配置)

send_redirects:控制當前服務器是否發送 ICMP 重定向報文。

  • 取值?1(默認):允許發送 ICMP 重定向報文。
  • 取值?0:禁止發送 ICMP 重定向報文。

關閉 ICMP 重定向的核心目的是?避免客戶端繞開負載均衡器直接訪問后端服務器,具體原因如下:

  1. DR 模式的特殊網絡路徑

    • 負載均衡器(Director)通過修改 MAC 地址將請求轉發給后端服務器。
    • 后端服務器處理后,直接通過自己的物理網卡向客戶端發送響應(源 IP 是 VIP)。

    此時,服務器(后端或 Director)可能會認為 “客戶端到 VIP 的最優路徑是直接訪問后端服務器”,從而發送 ICMP 重定向報文給客戶端,導致客戶端后續請求直接發給后端服務器(繞過 Director),破壞負載均衡策略。

  2. 防止路由混亂
    LVS 集群中,VIP 同時存在于 Director 和后端服務器(DR 模式),網絡拓撲相對特殊。ICMP 重定向可能會讓客戶端或中間設備(如交換機)學習到錯誤的路由規則,導致請求分發異常。

vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0  控制 ICMP 重定向
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p  # 生效配置
(5)啟動服務

ip_vs?是 Linux 內核中實現 LVS(Linux Virtual Server,Linux 虛擬服務器)的核心模塊,全稱為?IP Virtual Server。它是由章文嵩博士主導開發的內核級負載均衡組件,通過在 Linux 內核中直接處理網絡數據包,實現了高性能、高可用的 Layer 4(傳輸層)負載均衡。

ip_vs 的核心作用

?ip_vs?運行在 Linux 內核的網絡協議棧中,主要負責:

  1. 接收客戶端請求:監聽虛擬 IP(VIP)上的服務端口(如 80、443)。
  2. 負載均衡調度:根據配置的算法(如輪詢、權重、IP 哈希等),從后端真實服務器(Real Server)池中選擇合適的節點。
  3. 轉發數據包:根據 LVS 的工作模式(NAT/DR/TUN),對數據包進行地址轉換、MAC 地址修改或隧道封裝,將請求轉發到選定的后端服務器。
  4. 維護連接狀態:跟蹤客戶端與后端服務器的連接,確保同一客戶端的請求能被正確轉發(如 IP 哈希算法)。

ip_vs 的工作原理

  1. 內核態處理ip_vs?直接在內核態工作,避免了用戶態與內核態之間的數據拷貝,因此性能遠高于基于用戶態的負載均衡工具(如 Nginx 作為四層負載均衡時)。
  2. 依賴 IPVS 管理工具ip_vs?本身是內核模塊,需要通過用戶態工具(如?ipvsadm?或?keepalived)進行配置(如定義 VIP、后端服務器、負載策略等)。
  3. 支持多種轉發模式:如前文提到的 NAT、DR、TUN 三種模式,通過不同的數據包處理方式適配不同的網絡場景。

ip_vs 與 LVS 的關系

  • LVS 是整體架構:包含內核中的?ip_vs?模塊(負責實際轉發)和用戶態管理工具(如?ipvsadm,負責配置規則)。
  • ip_vs 是 LVS 的核心:沒有?ip_vs?模塊,LVS 就無法實現負載均衡功能;用戶態工具僅用于配置和管理?ip_vs?的規則。

使用場景

ip_vs?適用于需要高性能四層負載均衡的場景,例如:

  • 大規模 Web 服務集群的入口流量分發。
  • 數據庫讀寫分離的連接轉發。
  • 高并發 TCP/UDP 服務的負載均衡(如游戲服務器、視頻流服務)。
systemctl start keepalived
systemctl enable keepalivedipvsadm -ln  # 驗證 LVS 規則(顯示 RR 算法和 DR 模式)
#清除規則
ipvsadm -C
#添加虛擬服務器(VIP),使用輪詢算法(rr)
ipvsadm -A -t 192.168.10.180:80 -s rr
#添加后端真實服務器(DR 模式)
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
#保存規則到配置文件
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

3.3 后端 RS 配置(RS1 和 RS2 均需配置)

(1)綁定 VIP 到 lo 接口
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180  # 與 LVS 的 VIP 一致
NETMASK=255.255.255.255
IPV6INIT=no# 啟動接口并添加路由
ifup lo:0
route add -host 192.168.10.180 dev lo:0  # 確保 VIP 路由指向 lo 接口
(2)優化 ARP 策略(避免 MAC 沖突)

各參數含義

1.?arp_ignore:控制是否響應 ARP 請求

  • 作用:決定當服務器收到一個 ARP 請求(詢問某個 IP 對應的 MAC 地址)時,是否返回自己的 MAC 地址。
  • 取值含義
    • 0(默認):只要本地配置了該 IP,就響應 ARP 請求(返回自己的 MAC)。
    • 1:僅當 ARP 請求的目標 IP 配置在接收請求的網絡接口上時,才響應;如果 IP 配置在非接收接口(如 lo 回環接口),則不響應。

2.?arp_announce:控制發送 ARP 通告時的源 IP 選擇

  • 作用:當服務器主動發送 ARP 通告(告知網絡中其他設備 “我擁有某個 IP”)時,決定使用哪個 IP 作為源 IP。
  • 取值含義
    • 0(默認):允許使用任意網絡接口上的 IP 作為源 IP 發送 ARP 通告。
    • 1:盡量使用與目標 IP 同網段的本地 IP 作為源 IP。
    • 2:強制使用發送接口上的 IP 作為源 IP,不允許使用其他接口(如 lo)上的 IP。
vim /etc/sysctl.conf
# 禁止 RS 響應非本地物理 IP 的 ARP 請求
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
(3)部署 Web 服務
yum -y install httpd
systemctl start httpd && systemctl enable httpd# RS1 頁面內容
echo 'this is kgc web!' > /var/www/html/index.html
# RS2 頁面內容
echo 'this is benet web!' > /var/www/html/index.html

四、測試與驗證

  1. 負載均衡測試:客戶端訪問?http://192.168.10.180,刷新頁面(間隔超過 50 秒),應輪詢顯示 RS1 和 RS2 的頁面。
  2. 高可用測試
    • 停止主 LVS 節點的 Keepalived:systemctl stop keepalived
    • 在備節點執行?ip addr,確認 VIP 已漂移到備節點。
    • 客戶端繼續訪問 VIP,服務正常(由備節點分發請求)。
    • 重啟主節點 Keepalived,VIP 自動回歸(默認搶占模式)。

五、核心優勢與注意事項

優勢

  • 高性能:DR 模式下 LVS 僅修改 MAC 地址,轉發效率極高,適合高并發。
  • 高可用:Keepalived 實現 VIP 漂移,避免 LVS 節點單點故障。
  • 靈活性:支持多種調度算法,可根據 RS 性能調整權重。

注意事項

  • 網絡要求:LVS 節點與 RS 必須在同一物理網段(DR 模式限制)。
  • ARP 策略:RS 必須配置?arp_ignore?和?arp_announce,否則會導致 VIP 沖突。
  • 會話保持persistence_timeout?需根據業務場景調整(如靜態頁面可設為 0)。
  • 腦裂防護:通過雙心跳線、仲裁 IP(如網關)避免主備節點同時爭搶 VIP。

六、與其他方案對比(LVS+Keepalived vs Nginx/HAProxy)

特性LVS + KeepalivedNginxHAProxy
工作層級四層(內核態)四層 + 七層(應用態)四層 + 七層(應用態)
性能最高(百萬級并發)高(十萬級并發)高(接近 Nginx)
健康檢查依賴 Keepalived 腳本 / TCP 檢查簡單 HTTP/TCP 檢查強大(支持多種協議)
適用場景超大規模集群、高并發中小型集群、需七層轉發(如 URL 路由)高可用集群、復雜健康檢查需求

三種模式的選擇依據

模式核心適用場景與 Keepalived 結合的優勢典型業務場景
DR同網段、高并發、高性能要求性能最優,適合大規模集群,Keepalived 保障 VIP 高可用電商、門戶等高流量網站
NAT跨網段、小規模集群、需隱藏后端 IP部署靈活,適合簡單網絡,Keepalived 簡化故障轉移小型應用、內部服務
TUN跨地域、分布式部署,需避免 NAT 瓶頸支持廣域網負載均衡,Keepalived 確保隧道節點高可用跨數據中心集群、分布式服務

通過 LVS + Keepalived 的組合,可構建兼具高性能和高可用性的負載均衡架構,是企業級核心服務的理想選擇。

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

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

相關文章

知識沉淀過于碎片化如何形成體系化框架

要將過于碎片化的知識沉淀轉變為體系化的框架,必須采取一套自上而下設計與自下而上歸集相結合的系統性方法,其核心路徑在于首先進行戰略性診斷與頂層藍圖設計、其次構建統一且可擴展的知識架構(分類與標簽體系)、然后實施系統性的…

XLua教程之C#調用Lua

上一篇文章 XLua教程之入門篇-CSDN博客 在C#腳本中訪問lua全局數據,特別是table以及function,代價比較大,建議盡量少做相關操作。 LuaEnv.Global.Get 用于獲取一個全局變量,但是無法獲取局部變量(用local修飾) 全局基本類型變量…

C++ 標準庫中的哈希函數:從std::hash到自定義哈希器

C 標準庫中的哈希函數:從 std::hash 到自定義哈希器 1. 引言 在上一篇中,我們介紹了哈希表為什么能夠實現 O(1) 查找。 核心秘密在于:哈希函數。 在 C 標準庫中,哈希表容器(如 unordered_map、unordered_set&#xff0…

在圖形 / 游戲開發中,為何 Pixels Per Unit(PPU)數值越小,物體在屏幕上顯示的尺寸越大?

1. 什么是 PPU? PPU(Pixels Per Unit)指的是 多少像素對應游戲世界中的一個單位(Unit)。 在 Unity 等游戲引擎中,1 Unit 通常被視為世界空間的基本長度,比如 1 米。2. PPU 與物體大小的關系PPU …

【ZYNQ開發篇】Petalinux和電腦端的靜態ip地址配置

使用Petalinux工具為ZYNQ板卡搭建嵌入式Linux操作系統,成功搭建后,用戶通常會使用客戶端軟件對ZYNQ板卡上的Linux系統進行訪問,軟件需要知道ZYNQ板卡的ip地址才能進行訪問,如果ip地址是動態變化的,軟件每次訪問都要重新…

AVL樹知識總結

AVL樹概念性質一顆AVL樹或是空樹,或者具有一下性質的二叉搜索樹:左右都是AVL樹,左右子樹高度差的絕對值不超過1AVL樹有n個結果,高度保持在O(logN) 搜索時間復雜度O(logN)模擬實現插入定義&#…

返利app的跨域問題解決方案:CORS與反向代理在前后端分離架構中的應用

返利app的跨域問題解決方案:CORS與反向代理在前后端分離架構中的應用 大家好,我是阿可,微賺淘客系統及省賺客APP創始人,是個冬天不穿秋褲,天冷也要風度的程序猿! 在返利APP的前后端分離架構中,跨…

【dl】python基礎 深度學習中需要用到的python基礎

直接在jupyter寫筆記然后導出md格式真的太好用了本文筆記來自小破站視頻BV1K14y1c75ePython 基礎 1. 變量 1.1 三種基本變量類型 # 字符串 str str_v "123"# 數字 int或float num_v 11 float_v 12.0# 布爾型 bool bool_v True1.1.1 字符串 f字符串:在…

Vue FullPage.js 完整使用指南:Vue 3 官方全屏滾動解決方案

概述 vue-fullpage.js 是 FullPage.js 的官方 Vue.js 3 包裝器,為 Vue 3 應用提供了強大的全屏滾動功能。該插件基于成熟的 FullPage.js 庫,支持多種滾動效果和豐富的配置選項,特別適用于企業級數據大屏、產品展示、單頁應用等場景。 官方信…

軟件工程實踐一:Git 使用教程(含分支與 Gitee)

文章目錄目標一、快速上手1. Windows 安裝 Git2. 初始化 / 克隆二、核心概念速覽三、常用命令清單1) 查看狀態與差異2) 添加與提交3) 歷史與回溯4) 撤銷與恢復(Git 2.23 推薦新命令)5) 忽略文件四、分支與合并(Branch & Merge&#xff09…

css`min()` 、`max()`、 `clamp()`

min() 用來計算多個數值中最小的那個,非常適合做自適應。 width: min(50vw, 500px) 50vw 表示 視口寬度的 50% 500px 表示 500px min(50vw, 500px) 表示會取兩者中 最小的那個 作為最終的寬度,。 使用場景 限制某個元素寬度不超過某個值; 響…

【WRF-VPRM 預處理器】HEG 安裝(服務器)-MRT工具替代

目錄 HEG 安裝 驗證 HEG 安裝與否 設置環境變量(建議) 命令行接口(Command Line Interface) hegtool 工具 hegtool 用法 Header File 格式 功能1:`gdtif` 工具 – MISR 數據處理 `gdtif` 使用方式 參數文件格式(Parameter File Format) 功能2:`resample` 工具 – 重采樣…

PyTorch 神經網絡

神經網絡是一種模仿人腦神經元鏈接的計算模型, 由多層節點組成, 用于學習數據之間的復雜模式和關系。神經網絡通過調整神經元之間的連接權重來優化預測結果,這個過程可以涉及到向前傳播,損失計算,反向傳播和參數更新。…

詳細解析蘋果iOS應用上架到App Store的完整步驟與指南

📱蘋果商店上架全流程詳解 👩?💻想要將你的App上架到蘋果商店?跟隨這份指南,一步步操作吧! 1?? 申請開發者賬號:訪問蘋果開發者網站,注冊并支付99美元年費,獲取開發者…

三維GIS開發實戰!Cesium + CZML 實現火箭飛行與分離的 3D 動態模擬

CZML是一種基于JSON的數據格式,專門用于在Cesium中描述3D場景和時間動態數據。本文將詳細介紹了CZML的特點(JSON格式、時間動態性、層次結構等)和基本組件,并給出了一個火箭發射的實例。通過搭建Cesium開發環境(使用vi…

Spring Boot 深入剖析:BootstrapRegistry 與 BeanDefinitionRegistry 的對比

在 Spring Boot 的啟動過程中,BootstrapRegistry 和 BeanDefinitionRegistry 是兩個名為“Registry”卻扮演著截然不同角色的核心接口。理解它們的差異是深入掌握 Spring Boot 啟動機制和進行高級定制開發的關鍵。BootstrapRegistry public static ConfigurableAppl…

貪心算法應用:速率單調調度(RMS)問題詳解

Java中的貪心算法應用:速率單調調度(RMS)問題詳解 1. 速率單調調度(RMS)概述 速率單調調度(Rate Monotonic Scheduling, RMS)是一種廣泛應用于實時系統中的靜態優先級調度算法,屬于貪心算法在任務調度領域的經典應用。 1.1 基本概念 RMS基于以下原則&…

Cesium4--地形(OSGB到3DTiles)

1 OSBG OSGB(OpenSceneGraph Binary)是基于 OpenSceneGraph(OSG) 三維渲染引擎的二進制三維場景數據格式,廣泛用于存儲和傳輸傾斜攝影測量、BIM、點云等大規模三維模型,尤其在國產地理信息與智慧城市項目中…

多語言共享販賣機投資理財共享售賣機投資理財系統

多語言共享販賣機投資理財/共享售賣機分紅/充電寶/充電樁投資理財系統 采用thinkphp內核開發,支持注冊贈金、多級分銷,功能很基礎 修復后臺用戶列表管理 可自定義理財商品 多種語言還可以添加任意語言 源碼開源 多級分銷 注冊贈金等

[Windows] PDF 專業壓縮工具 v3.0

[Windows] PDF 專業壓縮工具 v3.0 鏈接:https://pan.xunlei.com/s/VOZwtC_5lCF-UF6gkoHuxWMoA1?pwdchg8# PDF 壓縮工具 3.0 新版功能特點 - 不受頁數限制! 一、核心壓縮功能 1.多模式智能壓縮 支持 4 種壓縮模式:平衡模式&#xff08…