Keepalived 負載均衡


Keepalived 負載均衡

Keepalived 可以與 LVS(Linux Virtual Server)結合,提供強大的四層負載均衡功能。它通過 IPVS(IP Virtual Server)內核模塊實現高性能的負載分發。

核心組件

  • Virtual Server:虛擬服務器,對外提供服務的 VIP
  • Real Server:真實服務器,實際處理請求的后端服務器
  • IPVS:Linux 內核中的負載均衡模塊
  • 健康檢查:監控后端服務器狀態

工作模式

模式說明特點適用場景
DR(Direct Routing)直接路由性能最高,要求在同一網段大流量場景
NAT(Network Address Translation)網絡地址轉換配置簡單,性能較低小規模應用
TUN(IP Tunneling)IP 隧道可跨網段,性能中等跨機房部署

完整的環境配置

這兩個服務在 Keepalived 中通過分別定義不同的 virtual_server 來區分。
由于 IPVS 是基于 <虛擬IP,端口,協議> 三元組建立映射的,因此 80 和 443 互不影響,各自的健康檢查、調度算法和會話保持配置都可以獨立設置。

global_defs {router_id LB_MASTERenable_script_security
}# HTTP 負載均衡
virtual_server 10.20.230.32 80 {delay_loop 6lb_algo wlclb_kind DRpersistence_timeout 300   # HTTP 會話保持,時間相對較短protocol TCPreal_server 192.168.1.10 80 {weight 2HTTP_GET {url {path /healthstatus_code 200}connect_timeout 3retry 3delay_before_retry 2}}real_server 192.168.1.11 80 {weight 1HTTP_GET {url {path /healthstatus_code 200}connect_timeout 3retry 3delay_before_retry 2}}
}# HTTPS 負載均衡
virtual_server 10.20.230.32 443 {delay_loop 6lb_algo wlc              # 加權最少連接算法lb_kind DRpersistence_timeout 600   # HTTPS 會話保持時間更長protocol TCP# 后端服務器1 - 高性能服務器real_server 192.168.1.10 443 {weight 3             # 更高的權重inhibit_on_failure   # 失敗時禁用SSL_GET {            # HTTPS 健康檢查url {path /healthstatus_code 200}connect_timeout 3retry 3delay_before_retry 2}}# 后端服務器2 - 普通服務器real_server 192.168.1.11 443 {weight 1inhibit_on_failureSSL_GET {url {path /healthstatus_code 200}connect_timeout 3retry 3delay_before_retry 2}}
}

高級配置技巧

會話保持配置

會話保持(Session Persistence)適用于需要 長時間維持客戶端和同一后端服務器交互 的業務場景:

  • 流媒體(視頻點播/直播):避免反復切換服務器導致播放卡頓
  • WebSocket 長連接:必須確保連接持續性
  • 在線文檔/協作系統:會話中斷會影響用戶體驗
virtual_server 192.168.1.100 80 {delay_loop 6lb_algo wlclb_kind DRprotocol TCPpersistence_timeout 1800   # 30分鐘會話保持# 基于客戶端 IP 的會話保持persistence_granularity 255.255.255.0  # 按 C 類網段real_server 192.168.1.10 80 {weight 1TCP_CHECK {connect_timeout 3}}
}

基于防火墻標記的負載均衡

這種方式提供了更靈活的流量控制能力:

# 步驟1:設置防火墻標記
# 標記 HTTP 和 HTTPS 流量
iptables -t mangle -A PREROUTING -d 10.20.230.32 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 100# 標記來自內網的流量
iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -d 10.20.230.32 -p tcp --dport 443 -j MARK --set-mark 200# 標記來自外網的流量
iptables -t mangle -A PREROUTING ! -s 192.168.0.0/16 -d 10.20.230.32 -p tcp --dport 443 -j MARK --set-mark 300# 步驟2:Keepalived 配置
# 多端口服務
virtual_server fwmark 100 {delay_loop 6lb_algo wlclb_kind DRprotocol TCPreal_server 192.168.1.10 0 {  # 端口0表示所有端口weight 2MISC_CHECK {misc_path "/usr/local/bin/check_multi_port.sh 192.168.1.10 80 443"}}real_server 192.168.1.11 0 {weight 1MISC_CHECK {misc_path "/usr/local/bin/check_multi_port.sh 192.168.1.11 80 443"}}
}# 內網服務器組
virtual_server fwmark 200 {delay_loop 6lb_algo rrlb_kind DRprotocol TCPreal_server 192.168.1.20 443 {weight 1TCP_CHECK {connect_timeout 3}}
}# 外網服務器組
virtual_server fwmark 300 {delay_loop 6lb_algo wlclb_kind DRprotocol TCPreal_server 192.168.2.10 443 {weight 2TCP_CHECK {connect_timeout 3}}
}

什么是四層負載均衡

四層負載均衡是指在 OSI 模型第四層(傳輸層) 工作的負載均衡方式。第四層包含 TCP/UDP 協議,所以四層負載均衡的調度依據主要是:

  • IP 地址(源 IP/目的 IP)
  • 端口號(源端口/目的端口)
  • TCP/UDP 會話信息

在這種模式下,負載均衡器并不關心 HTTP、HTTPS、MQTT 等應用層協議的具體內容,而是根據 五元組 (源 IP, 源端口, 目的 IP, 目的端口, 傳輸協議) 來分發流量。


四層負載均衡的工作原理

假設有一臺四層負載均衡器(LB),前面接收用戶請求,后面掛著多臺真實服務器(Real Server):

  1. 客戶端發起連接:客戶端向負載均衡器的 VIP(虛擬 IP)發起 TCP/UDP 請求。
  2. 負載均衡器選擇后端:LB 根據四層信息(IP+端口+協議),使用一定的調度算法(如輪詢 Round Robin、最少連接 Least Connection、一致性哈希等)選中一個真實服務器。
  3. 轉發數據:LB 會把客戶端的請求報文轉發給選中的后端服務器。
    • 可能是 NAT 模式:對請求包頭的目的 IP 和端口進行修改,再轉發。
    • 可能是 DSR(直接路由模式):只修改二層 MAC,不修改 IP。
    • 可能是 TProxy(透明模式):保持源 IP 不變,直發后端。
  4. 返回給客戶端
    • 如果是 NAT,返回流量需要經由 LB,由 LB 改寫后返回客戶端。
    • 如果是 DSR,后端服務器直接把結果返回給客戶端(高性能,但需要配置 VIP)。

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

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

相關文章

拷打DeepSeek實現自動生成差分電荷計算文件和后處理

差分電荷&#xff08;charge density difference&#xff09;是材料模擬中分析電子結構變化的直觀工具。 它把成鍵后的真實電荷密度減去成鍵前各碎片疊加的電荷密度&#xff0c;得到一張“電子遷移地圖” 于是可以一眼看出化學鍵形成時電子從哪里來到哪里去&#xff0c;表面吸…

AI問答-Nuxt4:什么時候發布的,有哪些特性,和Nuxt3相比 有哪些優勢 / Nuxt4 / Nuxt-v4

Nuxt 4于2025年7月至8月期間正式發布&#xff0c;作為Nuxt框架的重大版本更新&#xff0c;其核心聚焦于穩定性提升、開發者體驗優化及性能增強&#xff0c;與Nuxt 3相比&#xff0c;優勢體現在項目結構、數據獲取、類型系統、開發工具鏈等多個層面。一、Nuxt 4 發布時間線測試階…

isinstance()和insubclass()

??isinstance() 和 issubclass() 的功能與用法????1. isinstance(obj, classinfo)????功能??&#xff1a;檢查對象 obj 是否是 classinfo 類&#xff08;或其子類&#xff09;的實例。 ??返回值??&#xff1a;True 或 False。 ??用法??&#xff1a;class A…

判斷QMetaObject::invokeMethod()里的函數是否調用成功

今天&#xff0c;在Qt編程&#xff0c;碰到一個需要使用invokeMethod方式來獲取函數是否執行成功的情況。 ? ? invokeMethod()即可以同步調用&#xff0c;也可以異步調用。若調用者、被調用者&#xff0c;都在同一個線程&#xff0c;則是同步調用&#xff1b;若調用者、被調用…

【linux】特殊權限

us對文件&#xff1a;用戶執行該文件時&#xff0c;會以文件所有者的權限運行chmod us filename # 符號模式 chmod 4755 filename # 數字模式&#xff08;4表示SetUID&#xff09;典型應用&#xff1a;/usr/bin/passwd&#xff08;允許普通用戶修改自己的密碼&#xff0c;…

OpenCV:指紋識別

目錄 一、核心算法 1&#xff1a;SIFT 特征提取&#xff08;尺度不變特征變換&#xff09; 1.1 算法原理&#xff08;4 步核心流程&#xff09; 1.2 重點代碼實現與參數解析 1.3 關鍵輸出解讀 二、核心算法 2&#xff1a;FLANN 特征匹配&#xff08;快速最近鄰搜索&#x…

快速排序:高效的分治排序算法

快速排序因其平均時間復雜度$O(n\log n)$而成為廣泛應用的高效排序算法。其核心是分治法: 選擇基準 (Pivot):從待排序序列中選取一個元素(如第一個元素$arr[0]$)。 分區 (Partition):將序列重新排列,所有小于基準的元素置于其前,大于或等于的置于其后。基準元素最終位于…

網絡編程之UDP廣播與粘包問題

一&#xff0c;廣播簡介從上述講的例?中&#xff0c;不管是TCP協議還是UDP協議&#xff0c;都是”單播”, 就是”點對點”的進?通信&#xff0c;如果要對網絡里面的所有主機進?通信&#xff0c;實現”點對多”的通信&#xff0c;我們可以使用UDP中的?播通信。 理論上可以像…

教育領域大模型生成題目安全研究報告

教育領域大模型生成題目安全研究報告 一、研究背景與意義 隨著大語言模型&#xff08;LLM&#xff09;在教育領域的深度應用&#xff0c;自動生成題目已成為提升教學效率、實現個性化教學的關鍵技術手段&#xff0c;廣泛應用于課堂練習、作業布置、考試命題等場景。然而&…

Android安卓項目調試之Gradle 與 Gradle Wrapper的概念以及常用gradle命令深度詳解-優雅草卓伊凡

Android安卓項目調試之Gradle 與 Gradle Wrapper的概念以及常用gradle命令深度詳解-優雅草卓伊凡好的&#xff0c;我們來詳細梳理一下 Android 開發中 Gradle 的常用配置和調試命令。這對于每一位 Android 開發者來說都是必須掌握的核心技能。第一部分&#xff1a;Gradle 與 Gr…

Maven入門_簡介、安裝與配置

ZZHow(ZZhow1024) 參考課程&#xff1a; 【尚硅谷新版Maven教程】 [https://www.bilibili.com/video/BV1JN411G7gX] 一、Maven簡介 02_依賴管理工具 解決 jar 包的規模問題解決 jar 包的來源問題解決 jar 包的導入問題解決 jar 包之間的依賴 03_構建工具 我們沒有注意過…

Spark(1):不依賴Hadoop搭建Spark環境

不依賴Hadoop搭建Spark環境0 概述1 單機安裝Spark1.1 下載Spark預編譯包1.2 解壓和設置1.3 配置環境變量1.4 驗證安裝2 Spark運行模式2.1 Local模式&#xff08;本地模式&#xff09;2.1.1 Spark Shell2.1.1.1 Python版的Shell2.1.1.2 Scala版的Shell2.1.2 提交獨立的Spark應用…

【ThreeJs】【自帶依賴】Three.js 自帶依賴指南

&#x1f6e0;? Three.js 輔助庫生態手冊 定位&#xff1a;覆蓋 90% 開發場景的工具選型實操指南&#xff0c;區分「入門必備」和「進階擴展」。 適用人群&#xff1a;Three.js 新手&#xff08;≥ r132 版本&#xff09;、需要規范開發流程的團隊。 1. 控制器&#xff08;Co…

Mac電腦上如何打印出字體圖標

背景 我今天打開了一個之前開發的APP&#xff0c;看到項目中用到了字體圖標&#xff0c;發現有個“面條”圖標用錯了&#xff0c;想著修改一下吧。然后用輸入法打出”面條“&#xff0c;在輸入法的彈窗中就一直往下找&#xff0c;發現并沒有出現圖標。 想著打出”面條圖標“也沒…

當AI遇上數據庫:Text2Sql.Net如何讓“說人話查數據“成為現實

一句話概括&#xff1a;還在為寫復雜SQL而頭疼&#xff1f;Text2Sql.Net讓你用自然語言就能查數據庫&#xff0c;堪稱程序員的"數據庫翻譯官"&#xff01; &#x1f3af; 引言&#xff1a;從"SQL地獄"到"自然語言天堂" 想象一下這樣的場景&…

整體設計 之 緒 思維導圖引擎 之 引 認知系統 之8 之 序 認知元架構 之4 統籌:范疇/分類/目錄/條目 之2 (豆包助手 之6)

問題Q68、我們現在僅僅分析了 認知演進 的 “進”的問題&#xff0c;通過層次結構 和 統籌 的同構約束 給出了 不同對象及其對應的操作和約束。 --這句話 你能完全理解嗎&#xff08;這意味著 完整的程序細節設計&#xff09;。 還沒有分析的還有 “演” 以及組合詞 “演進” -…

開始 ComfyUI 的 AI 繪圖之旅-Qwen-Image-Edit(十二)

文章標題一、Qwen-Image-Edit1.ComfyOrg Qwen-Image-Edit 直播回放2.Qwen-Image-Edit ComfyUI 原生工作流示例2.1 工作流文件2.2 模型下載3.3 按步驟完成工作流一、Qwen-Image-Edit Qwen-Image-Edit 是 Qwen-Image 的圖像編輯版本&#xff0c;基于20B模型進一步訓練&#xff0c…

機械制造專屬ERP:降本增效與數字轉型的關鍵

轉型升級壓力下&#xff0c;ERP系統是機械企業破局的得力助手。本文深入解析ERP的核心功能、選型要點與實施價值&#xff0c;助您精準選型&#xff0c;賦能智能制造&#xff0c;全面提升競爭力。在數字化浪潮席卷之下&#xff0c;機械制造企業正面臨提質、增效、降本的關鍵轉型…

npm / yarn / pnpm 包管理器對比與最佳實踐(含國內鏡像源配置與緩存優化)

這篇不是“誰更快”的玄學討論,而是把團隊能落地的做法一次說清:如何選型、如何統一版本、如何把鏡像與緩存配好、如何在 CI 和 Monorepo 下穩住“可重復構建”。 一、結論先說在前 單倉庫 / 以穩定為先:直接用 npm(配合 npm ci) 足夠,維護成本低,生態一等一,Node 16.1…

Python項目全面打包指南:從EXE到綠色軟件包

?? Python項目全面打包指南:從EXE到綠色軟件包 文章目錄 ?? Python項目全面打包指南:從EXE到綠色軟件包 1 打包基礎概念與工具選型 1.1 核心打包概念 1.2 工具對比與選型 2 項目環境準備與依賴管理 2.1 創建和管理虛擬環境 2.2 依賴管理最佳實踐 2.3 依賴導出與規范文件處…