Web 集群高可用全方案:Keepalived+LVS (DR) 負載均衡 + Apache 服務 + NFS 共享存儲搭建指南

文章目錄

  • Keepalived + LVS(DR)+ Apache + NFS
    • 項目背景
      • 業務場景與核心需求
      • 傳統架構的痛點與局限
      • 技術方案的選型邏輯
      • 項目價值與預期目標
    • 項目實踐
      • 項目環境
      • 基礎配置
      • 配置 router
      • 配置免密登錄-可選
      • 配置 nfs
      • 配置 web
      • 配置 LVS-RS
      • 配置 HA 和 LVS-DS
        • 配置 ha1
        • 配置 ha2
      • 測試
        • 功能性測試
        • 高可用測試
        • 負載均衡測試
        • 負載均衡測試

Keepalived + LVS(DR)+ Apache + NFS

項目背景

業務場景與核心需求

隨著企業數字化轉型加速,Web 服務作為業務對外輸出的核心載體,其高可用性、高并發承載能力、數據一致性成為支撐業務穩定運行的關鍵。以電商平臺、企業官網、在線教育等典型場景為例,需滿足以下核心需求:

  1. 高可用保障:Web 服務需實現 7×24 小時不間斷運行,避免因單點故障(如服務器宕機、網絡中斷)導致業務中斷,尤其在促銷活動、峰值訪問時段,服務不可用將直接造成經濟損失或用戶流失;

  2. 高并發承載:面對日益增長的用戶訪問量(如日均 PV 從 10 萬級提升至百萬級),單臺 Web 服務器的 CPU、內存、網絡帶寬易成為瓶頸,需通過負載均衡分攤請求壓力,保障頁面響應速度(目標:95% 請求響應時間<1 秒);

  3. 數據一致性:Web 服務涉及大量靜態資源(如 HTML、CSS、圖片、視頻)與動態業務數據(如用戶上傳文件、訂單記錄),多臺 Web 服務器需共享資源,避免出現 “不同服務器展示內容不一致”(如用戶在 A 服務器上傳的圖片,在 B 服務器無法訪問)的問題;

  4. 易維護與擴展性:業務增長過程中,需支持快速新增 Web 節點擴展集群能力,同時減少運維復雜度(如避免每臺服務器重復部署資源、手動同步配置)。

傳統架構的痛點與局限

在采用《Keepalived + LVS(DR)+ Apache + NFS》方案前,多數企業曾使用 “單 Web 服務器” 或 “簡單負載均衡” 架構,面臨以下難以突破的局限:

  1. 單點故障風險高
  • 傳統 “單臺 Apache 服務器 + 本地存儲” 架構中,服務器硬件故障(如硬盤損壞、電源故障)或軟件異常(如 Apache 進程崩潰)將直接導致服務完全不可用,MTTR(平均恢復時間)依賴人工干預,通常超過 30 分鐘,遠無法滿足業務連續性要求;

  • 即使采用 “2 臺 Apache 服務器 + 簡單 DNS 輪詢”,若其中一臺服務器宕機,DNS 緩存可能導致部分用戶仍被解析至故障節點,且 DNS 輪詢無法感知服務器負載狀態,易出現 “故障節點持續接收請求” 或 “高負載節點被分配更多請求” 的問題。

  1. 并發承載能力不足
  • 單臺 Apache 服務器受限于 CPU 核心數(如 4 核 8G 服務器僅能穩定承載約 2000-3000 并發連接),當訪問量峰值超過閾值時,會出現請求排隊、頁面超時、503 錯誤等問題;

  • 若僅通過 “增加服務器數量” 擴展,缺乏高效的負載均衡機制,無法將請求合理分配至各節點,導致資源浪費(部分服務器空閑)與性能瓶頸(部分服務器過載)并存。

  1. 數據共享與一致性難題
  • 多臺 Apache 服務器采用 “本地存儲靜態資源” 時,需通過腳本定期同步資源(如 rsync),但同步延遲易導致 “用戶訪問不同節點看到不同版本內容”(如首頁圖片更新后,部分節點仍展示舊圖);

  • 動態數據(如用戶上傳的頭像、訂單附件)若存儲在本地,將無法在多節點間共享,導致 “用戶在 A 節點上傳文件后,切換至 B 節點無法查看” 的業務異常。

  1. 運維效率低下
  • 每臺 Web 服務器需單獨部署 Apache 配置、靜態資源、業務代碼,新增節點時運維人員需重復操作,耗時且易出錯(如配置文件漏改、資源版本不一致);

  • 缺乏統一的資源管理機制,當靜態資源更新(如 CSS 樣式調整、圖片替換)時,需逐臺服務器修改,運維成本隨節點數量增加呈線性上升。

技術方案的選型邏輯

針對上述痛點,需構建一套 “高可用負載均衡 + 共享存儲 + Web 服務集群” 的一體化架構,而《Keepalived + LVS(DR)+ Apache + NFS》組合正是基于以下核心訴求選型:

  1. 解決高可用與負載均衡
  • LVS(Direct Routing 模式)作為四層負載均衡器,具備超高并發承載能力(單機可支撐 10 萬 + 并發連接),通過 DR 模式避免 “請求回程流量” 占用帶寬,保障轉發效率;

  • Keepalived 通過 VRRP 協議實現 LVS 主備高可用,主節點故障時,備節點可在 1-3 秒內自動接管虛擬 IP(VIP),實現 “無感知切換”,徹底消除負載均衡層單點故障。

  1. 保障 Web 服務穩定性
  • Apache 作為成熟的 Web 服務器,兼容性強、配置靈活,可穩定運行 PHP、Python 等動態業務代碼,同時通過模塊(如 mod_cache、mod_gzip)優化靜態資源訪問性能;

  • 多臺 Apache 組成集群,通過 LVS 分攤請求壓力,單節點故障時,LVS 自動將請求轉發至其他健康節點,保障服務連續性。

  1. 實現數據一致性與共享
  • NFS(網絡文件系統)作為共享存儲,將所有 Web 服務器的靜態資源(如 /images、/css 目錄)與動態上傳目錄(如 /uploads)掛載至 NFS 服務器,實現 “多節點訪問同一存儲資源”,徹底解決數據同步問題;

  • NFS 支持權限控制與讀寫分離(可選配置),可保障資源訪問安全性與存儲性能。

  1. 降低運維復雜度
  • 架構模塊化設計,各組件職責清晰(LVS 負責轉發、Apache 負責服務、NFS 負責存儲),便于故障定位與單獨擴展;

  • 新增 Web 節點時,僅需安裝 Apache 并掛載 NFS 目錄,無需重復部署資源,運維效率提升 80% 以上。

項目價值與預期目標

通過部署《Keepalived + LVS(DR)+ Apache + NFS》架構,預期實現以下業務與技術價值:

  1. 業務連續性:Web 服務可用性從 99.9% 提升至 99.99%(年均 downtime 從 8.76 小時降至 52.56 分鐘),核心業務場景(如電商促銷、在線考試)無服務中斷風險;

  2. 性能提升:并發承載能力從單臺服務器 3000 并發提升至集群 10 萬 + 并發,頁面響應時間穩定在 500ms 以內,用戶體驗顯著優化;

  3. 運維效率:資源部署與更新效率提升 80%,新增節點時間從 2 小時縮短至 15 分鐘,減少重復人工操作;

  4. 擴展性:支持 Web 節點與 NFS 存儲獨立擴展(如新增 Apache 節點提升并發、擴容 NFS 存儲容量),滿足業務 3-5 年增長需求。

項目實踐

項目環境

在這里插入圖片描述

主機名IP 地址VIP 地址服務器角色
client2.laoma.cloud10.1.1.21客戶端
client1.laoma.cloud10.1.8.21客戶端
router.laoma.cloud10.1.1.20, 10.1.8.20路由器
ha1.laoma.cloud10.1.8.1410.1.8.100HA 和 LVS 服務器
ha2.laoma.cloud10.1.8.1510.1.8.100HA 和 LVS 服務器
web1.laoma.cloud10.1.8.11, 10.1.2.1110.1.8.100Web 服務器
web2.laoma.cloud10.1.8.12, 10.1.2.1210.1.8.100Web 服務器
web3.laoma.cloud10.1.8.13, 10.1.2.1310.1.8.100Web 服務器
nfs.laoma.cloud10.1.2.100存儲服務器

網絡說明:

  1. 所有主機:第一塊網卡名為 ens33,第二塊網卡名為 ens192
  2. 默認第一塊網卡模式為nat,第二塊網卡模式為hostonly
  3. 網關設置:10.1.1.0/24 網段網關為10.1.1.20,10.1.8.0/24 網段網關為10.1.8.20

基礎配置

  • 主機名

  • IP 地址

  • 網關

    ## 網關配置命令參考## 10.1.1.0/24 網段網關為10.1.1.20
    nmcli connection modify ens33 ipv4.gateway 10.1.8.20
    nmcli connection up ens33## 10.1.8.0/24 網段網關為10.1.8.20
    nmcli connection modify ens33 ipv4.gateway 10.1.1.20
    nmcli connection up ens33
    

配置 router

## 開啟路由
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
## 或者
## sed -i "s/ip_forward=0/ip_forward=1/g" /etc/sysctl.conf
sysctl -p

配置免密登錄-可選

[root@client ~]## 
echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config
ssh-keygen -t rsa -f .ssh/id_rsa -N ''
for host in server server{1..5}; do ssh-copy-id root@$host; done
for host in server server{1..5}; do scp /etc/ssh/ssh_config root@$host:/etc/ssh/ssh_config; done
for host in server server{1..5}; do ssh root@$host hostname; done## 同步/etc/hosts文件
for host in server server{1..5}; do scp /etc/hosts root@$host:/etc/hosts; done

配置 nfs

## 安裝軟件
yum install -y nfs-utils## 準備共享目錄和文件
mkdir /var/www/html/ -p
echo Welcome to www.laoma.cloud > /var/www/html/index.html## 配置共享
echo '/var/www 10.1.2.0/24(rw,sync)' >> /etc/exports## 啟用并啟動服務
systemctl enable nfs-server.service --now

配置 web

[root@web1-3 ~]### 部署 web
yum install -y httpd
echo Welcome to $(hostname) > /var/www/html/index.html 
systemctl enable httpd.service --now## 訪問后端 web
[root@client1 ~]## curl 10.1.8.11
Welcome to web1.laoma.cloud
[root@client1 ~]## curl 10.1.8.12
Welcome to web2.laoma.cloud
[root@client1 ~]## curl 10.1.8.13
Welcome to web3.laoma.cloud## 配置NFS掛載
[root@web1-3 ~]#
yum install -y nfs-utils
echo '10.1.2.100:/var/www /var/www/html nfs defaults 0 0' >> /etc/fstab
systemctl daemon-reload
mount -a
df /var/www/html

配置 LVS-RS

所有后端主機都要做相同配置。

[root@web1-3 ~]### 增加虛擬網卡
nmcli connection add type dummy ifname dummy con-name dummy ipv4.method manual ipv4.addresses 10.1.8.100/32
nmcli connection up dummy## 配置arp參數,關閉arp對dummy網卡的解析
cat >> /etc/sysctl.conf << EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.dummy.arp_ignore = 1
net.ipv4.conf.dummy.arp_announce = 2
EOF
sysctl -p

配置 HA 和 LVS-DS

配置 ha1
yum install -y keepalived ipvsadm
cp /etc/keepalived/keepalived.conf{,.bak}
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id ha1
}vrrp_instance web {state MASTERinterface ens33virtual_router_id 51priority 110advert_int 1authentication {auth_type PASSauth_pass laoma@123}virtual_ipaddress {10.1.8.100/24}
}virtual_server 10.1.8.100 80 {delay_loop 6lb_algo rrlb_kind DRprotocol TCPreal_server 10.1.8.11 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 10.1.8.12 80 {weight 2TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 10.1.8.13 80 {weight 2TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
systemctl enable keepalived.service --now
配置 ha2
yum install -y keepalived ipvsadm
cp /etc/keepalived/keepalived.conf{,.bak}
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id ha2
}vrrp_instance web {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass laoma@123}virtual_ipaddress {10.1.8.100/24}
}virtual_server 10.1.8.100 80 {delay_loop 6lb_algo rrlb_kind DRprotocol TCPreal_server 10.1.8.11 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 10.1.8.12 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 10.1.8.13 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
systemctl enable keepalived.service --now

測試

功能性測試
[root@client1 ~]## while true ;do curl -s http://10.1.8.100;sleep 1;done
Welcome to www.laoma.cloud
......[root@client2 ~]## while true ;do curl -s http://10.1.8.100;sleep 1;done
Welcome to www.laoma.cloud
......
高可用測試

持續監控集群可用性。

[root@client2 ~]## while true ;do curl -s http://10.1.8.100;sleep 1;done
......

測試1:停止 ha1 上 keepalived 服務。

[root@ha1 ~]## systemctl stop keepalived.service

結果:客戶端無感知故障,正常訪問集群。

測試2:恢復 ha1 上 keepalived 服務。

[root@ha1 ~]## systemctl start keepalived.service

結果:客戶端無感知故障,正常訪問集群。

負載均衡測試

測試1:停止 web2 上 httpd 服務,監控客戶端訪問情況。

[root@web2 ~]## systemctl stop httpd.httpd 

結果:大概 15 秒,LVS 將 web2 從后端虛擬主機中剔除。

測試2:啟動 web2 上 httpd 服務,監控客戶端訪問情況。

[root@web2 ~]## systemctl start httpd.service

結果**:客戶端無感知故障,正常訪問集群。

測試2:恢復 ha1 上 keepalived 服務。

[root@ha1 ~]## systemctl start keepalived.service

結果:客戶端無感知故障,正常訪問集群。

負載均衡測試

測試1:停止 web2 上 httpd 服務,監控客戶端訪問情況。

[root@web2 ~]## systemctl stop httpd.httpd 

結果:大概 15 秒,LVS 將 web2 從后端虛擬主機中剔除。

測試2:啟動 web2 上 httpd 服務,監控客戶端訪問情況。

[root@web2 ~]## systemctl start httpd.service

結果:大概 5 秒,LVS將web2加入后端虛擬主機中。

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

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

相關文章

Prometheus監控預警系統深度解析:架構、優劣、成本與競品

目錄 一、Prometheus是什么&#xff1f;核心定位與架構 二、競品分析&#xff08;Prometheus vs. Zabbix vs. Nagios vs. Commercial SaaS&#xff09; 三、部署成本分析 四、服務器資源消耗分析 五、給您的最終建議 一、Prometheus是什么&#xff1f;核心定位與架構 Prom…

Nginx反向代理及配置

Nginx反向代理 二級域名系統 顧名思義&#xff0c;我們有很多的這個不同的二級域名的用戶來訪問我們&#xff0c;比如說微博。它有一個主域名weibo.com。如果我叫一鳴,申請了一個微博&#xff0c;然后我就可以在微博這個主系統上申請一個二級域名來訪問我微博的主頁&#xff0…

嵌入式系統通信總線全景探秘:從板內到云端

引言 在嵌入式系統設計中&#xff0c;選擇合適的通信總線是決定系統性能、成本和可靠性的關鍵因素。從簡單的芯片間通信到復雜的工業網絡&#xff0c;不同的總線技術各司其職&#xff0c;形成了嵌入式世界的"交通網絡"。本文將深入探討五種經典且重要的通信技術&…

2022版Unity創建時沒有2D燈光(2D Light),沒有Global LIght2D怎么辦?

簡單來說就是你的渲染管線沒有升級到URP管線&#xff0c;所以才沒有這些2D燈光 如果你的創建燈光和我一樣&#xff0c;沒有紅線劃掉的部分&#xff0c;說明你和我的問題一樣&#xff0c;看下面的教程可以解決。 1. 確保Unity版本 確保你的Unity版本至少為2019.4或更高版本&…

技術小白如何快速的了解opentenbase?--把握四大特色

1.基本介紹 作為一名計算機專業相關背景的學生&#xff0c;我們或多或者接觸過一些數據庫&#xff0c;對于數據庫肯定是有所了解的&#xff1b; 你可能學習的是和微軟的sql server這樣的數據庫&#xff1b; 你可能接觸的更多的是企業級項目開發里面使用的這個mysql數據庫&#…

企業微信AI落地:如何選擇企業微信服務商?

現在企業用企業微信做客戶運營&#xff0c;最怕的不是“沒AI工具”&#xff0c;而是“AI用不起來”——要么功能不貼業務場景&#xff0c;員工嫌麻煩不用&#xff1b;要么回復不專業&#xff0c;客戶體驗差&#xff1b;要么數據不同步&#xff0c;管理者看不到效果。其實解決這…

【學Python自動化】 11 標準庫簡介 —— 第二部分

一、格式化輸出 reprlib 模塊 提供定制版 repr()&#xff0c;縮略顯示大型或深層嵌套對象import reprlib reprlib.repr(set(supercalifragilisticexpialidocious)) # "{a, c, d, e, f, g, ...}"pprint 模塊 美化輸出&#xff0c;添加換行和縮進顯示復雜數據結構impor…

【Kubernetes】知識點2

15. 什么是Pod的根容器&#xff1f;答&#xff1a;Pod 的根容器是每個 Pod 中默認存在的一個特殊容器pause容器&#xff0c;有時也稱為infra容器&#xff0c;它是Pod 啟動時創建的第一個容器&#xff0c;也是整個 Pod中所有容器的 “父容器”。其核心作用是為 Pod 內的所有容器…

視頻增強AI哪個效果好?實戰對比幫你找到最適合的工具

hitpaw 牛小影hitpaw 牛小影在處理低質量視頻時&#xff0c;我們經常會遇到畫面模糊、噪點過多、分辨率不足等問題&#xff0c;比如老舊視頻資料修復、監控錄像清晰化、手機拍攝視頻畫質提升等。這時候&#xff0c;一款好用的視頻增強AI軟件就成了剛需。下面就為大家盤點幾款效…

C#工作流示例(WorkflowCore)

using Microsoft.Extensions.DependencyInjection; using WorkflowCore.Interface; using WorkflowCore.Models;namespace LeaveRequestWorkflow {// 請假申請單public class LeaveBill{/// <summary>/// 申請人/// </summary>public string EmployeeName { get; s…

兩個子進程之間使用命名pipe

兩個子進程間可以使用命名管道&#xff0c;非常簡單。管道如果文件一樣存在硬盤中&#xff0c;使用ls可以查看&#xff0c;管道文件0字節。使用fork函數分別創建兩個子進程。 一個負責讀數據&#xff0c;一個負責寫數據。 #define _GNU_SOURCE #include <stdio.h> #inclu…

第一講、Kafka 初識與環境搭建

一、Kafka 是什么&#xff1f; Apache Kafka 是一個分布式的消息隊列&#xff08;Message Queue&#xff09;與流處理平臺。 它最早由 LinkedIn 開發&#xff0c;后來捐贈給 Apache 基金會&#xff0c;現已廣泛應用于日志收集、實時數據管道和大數據處理。 Kafka 的特點&…

Conda相關的用法

1、背景 此文主要記錄conda的一些用法&#xff0c;大部分命令來自ai搜索以及自己的理解。 2、安裝conda 2.1 選擇 conda 版本 2.1.1 Anaconda 含有 Conda 大量科學計算包&#xff08;NumPy、Pandas、Matplotlib 等&#xff09;適合數據科學、機器學習初學者下載地址&…

數據庫選擇有講究?SQLite、PostgreSQL還是MySQL?

不同規模的項目&#xff0c;數據庫選擇有講究。大家好&#xff0c;我是技術支持彼得&#xff0c;每天兩眼一睜就是為客戶解決問題。在日常使用我們的視頻平臺時&#xff0c;很多用戶會問到數據庫選擇的問題。今天就來詳細說說EasyGBS、EasyNVR和EasyCVR三大平臺該如何選擇數據庫…

在VMware的Win10虛擬機中安裝使用ENSP

VMware安裝Windows10 安裝ENSP及相關軟件 把安裝ENSP所使用的相關復制到已安裝好的Windows10虛擬機中&#xff0c;如下圖所示。 安裝VirtualBox 安裝時請確保路徑為英文目錄&#xff0c;并在出現"安裝設備軟件"或"Oracle USB設備"提示時選擇安裝選項。具…

Go 語言面試題詳解之接口 (Interface) 詳解一文吃透

自古流傳著一個傳言...在 Go 語言面試的時候必有人會問接口&#xff08;interface&#xff09;的實現原理。這又是為什么&#xff1f;為何對接口如此執著&#xff1f;實際上&#xff0c;Go 語言的接口設計在整體扮演著非常重要的角色&#xff0c;沒有他&#xff0c;很多程序估計…

ansible循環+判斷(with,loop,when,if,for)

一、文檔核心定位 本文檔聚焦Ansible自動化運維中的兩大核心功能——循環與判斷&#xff0c;通過“功能說明完整Playbook代碼”的形式&#xff0c;覆蓋循環迭代場景&#xff08;列表、字典、文件等&#xff09;、數據處理過濾器&#xff08;字符串、數字、加密等&#xff09;、…

在linux下使用MySQL常用的命令集合

1. 數據庫查看和選擇-- 查看所有數據庫 SHOW DATABASES;-- 選擇使用某個數據庫&#xff08;需要修改&#xff1a;your_database_name&#xff09; USE your_database_name;-- 查看當前正在使用的數據庫 SELECT DATABASE();說明&#xff1a;your_database_name 替換為你要操作的…

mysy2使用

參考鏈接 https://blog.csdn.net/qq_36525177/article/details/115279468 介紹 要把linux程序在windows上編譯&#xff0c;且最好兼容posix標準&#xff0c;就用msys2。 使用 1、先下載安裝&#xff0c;我裝在D:\mysy2 2、打開vscode&#xff0c;不要切換目錄&#xff0c;…

【Protues仿真】基于AT89C52單片機的溫濕度測量

目錄 0案例視頻效果展示 1DHT11溫度濕度傳感器 1.1傳感器簡介 1.2引腳定義&#xff08;從左到右&#xff0c;面對網格面&#xff09; 1.3時序 & 校驗&#xff08;原理速覽&#xff09; 1.4常見故障排查 2 DHT11溫度濕度傳感器數據 2.1 DHT11溫度濕度傳感器數據格式…