從原理到實踐:LVS+Keepalived構建高可用負載均衡集群

從原理到實踐:LVS+Keepalived構建高可用負載均衡集群

文章目錄

  • 從原理到實踐:LVS+Keepalived構建高可用負載均衡集群
    • 一、為什么需要LVS+Keepalived?
    • 二、核心原理:Keepalived與VRRP協議
      • 1. VRRP的核心思想
      • 2. Keepalived的三大功能
    • 三、LVS+Keepalived集群拓撲設計
    • 四、實戰部署:LVS+Keepalived集群搭建
      • 階段1:環境準備
      • 階段2:配置主從調度器(核心步驟)
        • 1. 主調度器配置(192.168.10.73)
        • 2. 從調度器配置(192.168.10.74)
        • 3. 啟動Keepalived服務
      • 階段3:配置Web節點(DR模式必需)
    • 五、集群測試與驗證
      • 1. 負載均衡測試
      • 2. 高可用(故障切換)測試
        • (1)主調度器故障測試
        • (2)Web節點故障測試
      • 3. 日志查看
    • 六、常見問題與解決方案
    • 七、總結

在企業級應用部署中,“單點故障”是懸在運維人員頭頂的“達摩克利斯之劍”——單臺服務器一旦宕機,服務中斷、業務停滯、用戶流失等問題便會接踵而至。為解決這一痛點,LVS(Linux Virtual Server)與Keepalived的組合成為了構建高可用負載均衡集群的經典方案。本文將從原理剖析入手,一步步帶大家掌握LVS+Keepalived集群的部署與實戰技巧。

一、為什么需要LVS+Keepalived?

在傳統的單服務器或單純LVS部署中,存在兩大核心隱患:

  1. 單點故障風險:無論是單獨的Web服務器,還是LVS調度器,一旦出現硬件故障或軟件崩潰,整個服務鏈路便會中斷。
  2. 負載與可用性失衡:單純的LVS能實現負載均衡,但調度器本身沒有冗余機制;單純的雙機熱備能解決單點問題,卻無法分擔訪問壓力。

而LVS+Keepalived的組合恰好彌補了這些不足:

  • LVS:作為四層負載均衡器,負責將客戶端請求高效分發到后端服務器池,支撐高并發訪問。
  • Keepalived:基于VRRP協議實現調度器的熱備冗余,同時提供節點健康檢查,確保集群“零中斷”運行。

二、核心原理:Keepalived與VRRP協議

想要用好LVS+Keepalived,首先要理解其核心——VRRP(虛擬路由冗余協議) ,這是Keepalived實現高可用的底層邏輯。

1. VRRP的核心思想

VRRP將多臺服務器(或路由器)組成一個“熱備組”,通過一個虛擬IP(VIP) 對外提供服務。熱備組內有明確的角色分工:

  • 主節點(MASTER):優先級最高的節點,負責處理客戶端請求,同時定期向備節點發送“心跳”消息。
  • 備節點(BACKUP):處于待命狀態,持續監聽主節點的心跳;一旦檢測到主節點失效,立即通過優先級選舉接替VIP,成為新的主節點。

這種“虛擬IP漂移”機制,能在主節點故障時實現毫秒級切換,對客戶端完全透明。

2. Keepalived的三大功能

Keepalived并非只為LVS設計,但其與LVS的適配性堪稱完美,核心功能可概括為三點:

  1. 故障自動切換(Failover):基于VRRP實現主備調度器的無縫切換,避免調度器單點故障。
  2. 節點健康檢查(Health Checking):定期檢測后端真實服務器(如Web節點)的狀態,自動剔除故障節點,待節點恢復后再重新加入集群。
  3. LVS集群管理:可直接調用ipvsadm工具配置LVS虛擬服務器、管理后端節點,無需手動執行復雜命令。

三、LVS+Keepalived集群拓撲設計

一個標準的LVS+Keepalived集群至少包含以下角色(以Web服務為例),拓撲結構如下:

[Internet] → [外網交換機] → [主調度器(MASTER)/從調度器(BACKUP)] → [內網交換機]↓[Web服務器池(節點1~節點N)] ← [NFS共享存儲]

各組件說明:

  • 調度器(2臺):主調度器(如192.168.10.73)、從調度器(如192.168.10.74),共享VIP(如192.168.10.72)。
  • Web節點(N臺):運行Web服務,通過NFS共享存儲保證內容一致性(如節點IP:192.168.10.77~80)。
  • NFS服務器(1臺):存儲Web站點文件,避免各節點內容不一致問題(如IP:192.168.10.250)。

四、實戰部署:LVS+Keepalived集群搭建

以下部署基于CentOS 7系統,假設已配置好基礎網絡、關閉防火墻(或開放必要端口)及SELinux。

階段1:環境準備

  1. 安裝依賴工具:所有節點均需安裝基礎工具,調度器額外安裝ipvsadm和Keepalived。

    # 所有節點安裝基礎工具
    yum install -y net-tools vim# 主從調度器安裝ipvsadm和Keepalived
    yum install -y ipvsadm keepalived
    
  2. 配置NFS共享(僅NFS服務器操作):

    # 安裝NFS服務
    yum install -y nfs-utils rpcbind# 創建共享目錄并授權
    mkdir -p /var/www/html
    chmod 777 /var/www/html# 配置exports文件
    echo "/var/www/html 192.168.10.0/24(rw,sync,no_root_squash)" >> /etc/exports# 啟動服務并設置開機自啟
    systemctl start rpcbind nfs
    systemctl enable rpcbind nfs
    
  3. 掛載NFS到Web節點(所有Web節點操作):

    # 創建Web目錄并掛載NFS
    mkdir -p /var/www/html
    mount -t nfs 192.168.10.250:/var/www/html /var/www/html# 設置開機自動掛載
    echo "192.168.10.250:/var/www/html /var/www/html nfs defaults 0 0" >> /etc/fstab
    
  4. 部署Web服務(所有Web節點操作):

    # 安裝Apache
    yum install -y httpd# 為每個節點創建差異化測試頁面(便于后續驗證負載均衡)
    echo "Web Node 1 (192.168.10.77)" > /var/www/html/index.html  # 節點1
    echo "Web Node 2 (192.168.10.78)" > /var/www/html/index.html  # 節點2
    # 其余節點同理# 啟動Apache并設置開機自啟
    systemctl start httpd
    systemctl enable httpd
    

階段2:配置主從調度器(核心步驟)

Keepalived的配置核心是/etc/keepalived/keepalived.conf,主從調度器的配置差異僅在于router_idstatepriority三個參數。

1. 主調度器配置(192.168.10.73)

編輯主配置文件:

vim /etc/keepalived/keepalived.conf

配置內容如下:

! Configuration File for keepalived# 全局參數配置
global_defs {router_id HA_MASTER  # 主調度器標識(唯一)
}# VRRP熱備實例配置
vrrp_instance VI_1 {state MASTER  # 角色:主節點interface ens33  # 承載VIP的物理網卡(根據實際網卡名修改)virtual_router_id 1  # 虛擬路由ID(主從必須一致,范圍0-255)priority 100  # 優先級(主節點需高于備節點,如100)advert_int 1  # 心跳間隔(1秒)# 認證配置(主從必須一致)authentication {auth_type PASSauth_pass 123456}# 虛擬IP(VIP)virtual_ipaddress {192.168.10.72/24  # 集群對外服務的VIP}
}# LVS虛擬服務器配置(關聯后端Web節點)
virtual_server 192.168.10.72 80 {delay_loop 6  # 健康檢查間隔(6秒)lb_algo rr  # 負載均衡算法(rr:輪詢;wrr:加權輪詢;lc:最小連接)lb_kind DR  # LVS工作模式(DR:直接路由模式,性能最優)persistence_timeout 50  # 會話保持時間(50秒內同一客戶端請求定向到同一節點)protocol TCP  # 協議類型# 后端Web節點1配置real_server 192.168.10.77 80 {weight 1  # 權重(數值越大,分配到的請求越多)# 健康檢查方式(TCP_CHECK:端口檢查)TCP_CHECK {connect_timeout 3  # 連接超時時間(3秒)retry 3  # 重試次數delay_before_retry 3  # 重試間隔}}# 后端Web節點2配置(其余節點同理)real_server 192.168.10.78 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
2. 從調度器配置(192.168.10.74)

從調度器配置與主調度器基本一致,僅需修改3處參數:

global_defs {router_id HA_BACKUP  # 從調度器標識(唯一)
}vrrp_instance VI_1 {state BACKUP  # 角色:備節點interface ens33virtual_router_id 1priority 90  # 優先級(低于主節點,如90)advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.10.72/24}
}# LVS虛擬服務器配置與主調度器完全一致,此處省略
3. 啟動Keepalived服務

主從調度器均執行以下命令:

# 啟動服務
systemctl start keepalived
# 設置開機自啟
systemctl enable keepalived
# 查看服務狀態
systemctl status keepalived

階段3:配置Web節點(DR模式必需)

LVS-DR模式下,Web節點需要綁定VIP到回環網卡,并調整ARP響應參數,避免IP沖突:

  1. 創建配置腳本:
    vim /usr/local/sbin/lvs_dr_real.sh
    
  2. 腳本內容如下:
    #!/bin/bash
    VIP=192.168.10.72
    # 綁定VIP到回環網卡
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
    # 添加路由(避免VIP數據包通過物理網卡發送)
    route add -host $VIP dev lo:0
    # 關閉ARP響應(防止節點響應VIP的ARP請求)
    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    
  3. 執行腳本并設置開機自啟:
    # 賦予執行權限
    chmod +x /usr/local/sbin/lvs_dr_real.sh
    # 執行腳本
    sh /usr/local/sbin/lvs_dr_real.sh
    # 添加到rc.local實現開機自啟
    echo "/usr/local/sbin/lvs_dr_real.sh" >> /etc/rc.local
    chmod +x /etc/rc.local
    

五、集群測試與驗證

部署完成后,需從高可用負載均衡兩個維度進行測試,確保集群功能正常。

1. 負載均衡測試

在客戶端瀏覽器中多次訪問http://192.168.10.72(VIP),觀察頁面內容是否在“Web Node 1”“Web Node 2”等節點間輪詢切換——若切換,則說明LVS負載均衡生效。

也可通過調度器執行ipvsadm -lnc命令,查看連接記錄,驗證請求是否分發到各后端節點:

ipvsadm -lnc  # 查看當前連接狀態

2. 高可用(故障切換)測試

(1)主調度器故障測試
  1. 在主調度器上禁用網卡(模擬故障):
    ifdown ens33
    
  2. 在從調度器上執行ip addr命令,查看是否已綁定VIP(192.168.10.72)——若綁定,則說明故障切換成功。
  3. 客戶端繼續訪問http://192.168.10.72,確認服務是否正常可用。
  4. 恢復主調度器網卡:
    ifup ens33
    
    由于主調度器優先級更高,會重新搶占VIP,從調度器將釋放VIP。
(2)Web節點故障測試
  1. 停止某臺Web節點的Apache服務(模擬故障):
    systemctl stop httpd
    
  2. 在調度器上執行ipvsadm -ln命令,查看該節點是否已被標記為“Inactive”——若標記,則說明健康檢查生效,故障節點已被剔除。
  3. 客戶端訪問VIP,確認請求是否不再分發到故障節點。
  4. 恢復Apache服務:
    systemctl start httpd
    
    調度器會自動檢測到節點恢復,將其重新加入集群。

3. 日志查看

Keepalived的故障切換日志默認記錄在/var/log/messages中,可通過以下命令查看切換過程:

tail -f /var/log/messages | grep Keepalived  # 實時查看Keepalived日志

六、常見問題與解決方案

  1. VIP無法漂移

    • 檢查主從調度器的virtual_router_idauth_pass是否一致。
    • 確認主調度器優先級是否高于從調度器。
    • 檢查防火墻是否阻止VRRP協議(VRRP使用224.0.0.18多播地址,需開放)。
  2. Web節點無法訪問VIP

    • 確認Web節點的lvs_dr_real.sh腳本是否執行成功,lo:0接口是否綁定VIP。
    • 檢查arp_ignorearp_announce參數是否設置正確。
  3. 負載均衡失效

    • 確認LVS工作模式(DR)與Web節點配置是否匹配。
    • 檢查ipvsadm規則是否正確(可通過ipvsadm -ln查看)。

七、總結

LVS+Keepalived集群通過“LVS負載均衡+Keepalived高可用”的雙重保障,完美解決了企業級應用的單點故障和高并發壓力問題。其核心在于VRRP協議的虛擬IP漂移機制,以及Keepalived的健康檢查能力。

在實際部署中,需注意主從調度器的配置一致性、Web節點的ARP參數調整、日志的實時監控等細節——這些細節直接決定了集群的穩定性。掌握這套方案,能為企業業務的持續運行提供堅實的技術支撐。

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

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

相關文章

iOS混淆工具實戰 在線教育直播類 App 的課程與互動安全防護

近年來,在線教育直播類 App 已成為學生與培訓機構的重要工具。無論是 K12 教育、職業培訓,還是興趣學習,App 中承載的課程視頻、題庫與互動邏輯都是極高價值的內容資產。 然而,教育直播應用同樣面臨多重安全風險:課程視…

第2節-過濾表中的行-BETWEEN

摘要: 在本教程中,您將學習如何在 WHERE 子句中使用 PostgreSQL 的 BETWEEN 運算符來檢查某個值是否在兩個值之間。 PostgreSQL BETWEEN 運算符 BETWEEN運算符是一種比較運算符,如果某個值介于兩個值之間,則返回true。 以下是 BETWEEN 運算符…

Windows 11 手動下載安裝配置 uv、配置國內源

Windows 11 手動下載安裝配置 uv、配置國內源 本文對應的講解視頻鏈接:https://www.bilibili.com/video/BV1WnYTzZEpW 文章目錄Windows 11 手動下載安裝配置 uv、配置國內源1. 下載、安裝、配置 uv2. 參考信息重要聲明: uv 的安裝有很多種方式&#xff…

平板熱點頻繁斷連?三步徹底解決

平板反復斷開熱點連接是一個非常常見且令人煩惱的問題。這通常不是單一原因造成的,而是多種因素疊加的結果。 我們可以從熱點發射設備(手機等)、平板本身、以及環境因素三個方面來排查和解決。 一、 熱點發射端(通常是手機&#x…

Qt文件操作的學習(三)

一、實現簡易文本編輯器 主要用到帶菜單欄的窗口,而非單一窗口。QT已經寫好相關操作,就不在重新造輪子了功能設計:新建文本文檔,打開文件,保存文件,另存為 這次不同于之前直接可以在控件上面右擊槽了&…

ArcGIS學習-20 實戰-縣域水文分析

水文分析任務提取區域內水流方向、匯流累積量、河網、流域、子流域前置操作環境更改加載數據檢查投影坐標系河網分析洼地填充限制默認為空,認為所有洼地都是需要填充的,這里更正一下Fill_DEM需要加上后綴.tif流向分析得到流量分析得到這里的黑色代表非河…

本地 Docker 環境 Solr 配置 SSL 證書

一、簡介 在本地開發環境中為 Solr 配置 SSL 證書,是提升開發與測試一致性的關鍵步驟。尤其是在涉及安全傳輸需求的場景中,本地環境的 HTTPS 配置能有效避免因環境差異導致的問題。本文將詳細介紹如何利用 Docker 容器,快速為 Solr 服務配置自簽名 SSL 證書,實現本地 HTTP…

MacOS 運行CosyVoice

CosyVoic主要特點:1、支持中文、英文、上海話、天津話、四川話等方言。語音非常自然。2、支持3秒語音零樣本克隆,效果非常好。3、克隆時間比較長(取決于GPU性能,使用H20以滿足低延遲輸出),L4 克隆默認文本需…

我不是掛王-用python實現燕雙鷹小游戲3

在前兩個版本的更新后,越來越多內容,操作和運行也不方便,優化第三版本窗口可視化界面 本次版本更新使得可讀性和可操作性大幅度增加,前面2版本可分別參考 我不是掛王-用python實現燕雙鷹小游戲 和 我不是掛王-用python實現燕雙鷹小游戲2 一.燕雙鷹窗口可視化(燕雙鷹3.0) 新燕雙…

裝飾(Decorator)模式可以在不修改對象外觀和功能的情況下添加或者刪除對象功能

試題(35)、(36)某系統中的文本顯示類(TextView)和圖片顯示類(PictureView)都繼承了組件類(Component),分別顯示文本和圖片內容,現需要…

深度學習基礎概念【持續更新】

1. 梯度消失如果網絡中某一層的激活函數(如 sigmoid 或 tanh)在輸入較大的情況下有很小的梯度(比如接近零),那么當這些小的梯度通過多層反向傳播時,它們會逐漸變得更小。這意味著在深層網絡的前面幾層&…

上下文工程:AI應用成功的關鍵架構與實踐指南

在AI應用開發中,模型能力只決定性能上限,而上下文質量決定性能下限——上下文工程正是確保AI系統理解用戶意圖、生成準確響應的核心工程技術,已成為區分普通AI應用與卓越AI應用的關鍵因素。一、上下文工程:AI應用的新核心競爭力 1…

數據傳輸優化-異步不阻塞處理增強首屏體驗

背景:主 project 頁面中會將視頻存儲到云端后獲得 ID ,然后用 ID 調用 后端API POST到數據庫后拿到掛載頁面URL,接著傳入視頻分享組件(由于視頻分享子組件的目標是分享視頻掛載頁面,所以前置步驟不能少)con…

【芯片設計-信號完整性 SI 學習 1.0 -- SI 介紹】

文章目錄一、SoC 設計驗證階段的 SI 測試主要工作舉例二、芯片 Bringup 階段的 SI 測試主要工作舉例三、SI-PI 聯合仿真主要內容舉例四、整體總結一、SoC 設計驗證階段的 SI 測試 在 前硅階段(pre-silicon),設計團隊需要確保 SoC 與外設接口…

C語言鏈表設計及應用

鏈表鏈表節點設計鏈表項目鏈表中的傳址調用檢查申請空間鏈表尾插鏈表頭插鏈表尾部刪除鏈表頭部刪除鏈表的查找指定位置之前插入指定位置之后插入數據刪除指定位置(節點)數據刪除指定位置(節點)之后的數據鏈表的銷毀前面學習了順序…

使用 YAML 自動化 Azure DevOps 管道

1. 在 Azure DevOps 中設置 YAML 管道 開始之前,您需要擁有一個 Azure DevOps 帳戶和一個 git 倉庫。 要創建 YAML 管道, 1. 導航至 Azure DevOps → 選擇您的項目 2. 前往“管道”→ 點擊“新建管道” 3. 選擇您的倉庫(Azure Repos、GitHub 等) 4. 選擇“Starter Pipelin…

基于Spring Boot的幼兒園管理系統

基于Spring Boot的幼兒園管理系統 源碼獲取:https://mbd.pub/o/bread/YZWXlZtsbQ 引言 在數字化轉型的浪潮中,教育行業的信息化建設顯得尤為重要。幼兒園作為基礎教育的重要環節,其管理系統的現代化水平直接關系到教育質量和運營效率。本文…

【NVIDIA-B200】 ‘CUDA driver version is insufficient for CUDA runtime version‘

目錄 一、錯誤核心原因 二、排查步驟 1. 檢查當前驅動版本 2. 檢查 CUDA 運行時版本 3. 驗證驅動與 CUDA 的兼容性 三、解決方法 1. 確保驅動正確加載 2. 重新安裝匹配的驅動與 CUDA 3. 驗證環境正確性 四、關鍵注意事項 報錯日志: bash nccl.sh ------------5.安…

Android中如何實現自動化測試

目錄 前言: 一、方法介紹 1、UI Automator 3、shell腳本 二、shell腳本實現自動化測試原理和步驟 1、 原理 2、步驟 三、shell自動化測試實例 前言: 在開發項目的過程中,我們將某個階段的需求完成并且提測,通常,在測試工程師更細致的測…

綠聯科技全球化突圍:業財一體化如何打通全球電商全鏈路數字化

綠聯科技專注數碼配件20年,產品覆蓋全球100多個國家,年銷售額突破30億。作為"連接"領域的專家,綠聯深知連接的真諦不僅在于硬件產品,更在于數據的全球化連接。在全球電商競爭日益激烈的今天,綠聯率先探索業財…