LVS + Keepalived + Nginx 高可用負載均衡系統實驗

1. 項目背景

在現代 Web 應用中,高可用性和負載均衡是至關重要的需求。本項目旨在通過 LVS(Linux Virtual Server)實現流量分發,通過 Keepalived 實現高可用性,通過 Nginx 提供后端服務。該架構能夠確保在單點故障的情況下,系統仍然能夠正常運行,并且能夠均衡地分配流量到多個后端服務器。

2. 環境準備

2.1 服務器角色及 IP 規劃
服務器角色操作系統內網 IP (ens160)VIP安裝軟件
LVS 主節點CentOS 7192.168.65.131

192.168.65.100 (lvs-ens160)

192.168.65.101(keepalived-ens160)

ipvsadm, Keepalived
LVS 備節點CentOS 7192.168.65.132

192.168.65.100 (lvs-ens160)

192.168.65.101(keealived-ens160)

ipvsadm, Keepalived
后端 Web 服務器 1CentOS 7192.168.65.133192.168.65.100 (lvs-lo)Nginx
后端 Web 服務器 2CentOS 7192.168.65.134192.168.65.100 (lvs-lo)Nginx
2.2 實驗前準備
  1. 關閉 SELinux,以避免對實驗造成干擾。

    sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
    sudo reboot
  2. 開啟防火墻并放行必要的端口,確保負載均衡和高可用性功能正常工作。

3. 服務器網絡環境配置

3.1 設置靜態 IP 地址

為確保服務器在重啟后仍能保持固定的網絡配置,使用 nmcli 設置靜態 IP 地址。

LVS 主節點(192.168.65.131)
  1. 查看當前網絡連接名稱

    nmcli con show

    網絡接口名稱為 ens160

  2. 修改靜態 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.131/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加載網絡配置并重啟網絡服務

    nmcli con up ens160
LVS 備節點(192.168.65.132)
  1. 查看當前網絡連接名稱

    nmcli con show

    網絡接口名稱為 ens160

  2. 修改靜態 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.132/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加載網絡配置并重啟網絡服務

    nmcli con up ens160
后端 Web 服務器 1(192.168.65.133)
  1. 查看當前網絡連接名稱

    nmcli con show

    假設網絡接口名稱為 ens160

  2. 修改靜態 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.133/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加載網絡配置并重啟網絡服務

    nmcli con up ens160
后端 Web 服務器 2(192.168.65.134)
  1. 查看當前網絡連接名稱

    nmcli con show

    網絡接口名稱為 ens160

  2. 修改靜態 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.134/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加載網絡配置并重啟網絡服務

    nmcli con up ens160
3.2 配置主機名和主機映射

為便于在集群環境中快速識別和管理各服務器,需要為每臺服務器配置主機名。

LVS 主節點(192.168.65.131)
  1. 設置主機名

    sudo hostnamectl set-hostname lvs-master
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下內容:

    127.0.0.1   lvs-master
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
LVS 備節點(192.168.65.132)
  1. 設置主機名

    sudo hostnamectl set-hostname lvs-backup
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下內容:

    127.0.0.1   lvs-backup
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
后端 Web 服務器 1(192.168.65.133)
  1. 設置主機名

    sudo hostnamectl set-hostname webserver1
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下內容:

    127.0.0.1   webserver1
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
后端 Web 服務器 2(192.168.65.134)
  1. 設置主機名

    sudo hostnamectl set-hostname webserver2
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下內容:

    127.0.0.1   webserver2
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2

3.3 配置防火墻規則

為保障網絡安全,需要優化防火墻規則,開啟必要的服務端口,同時關閉不必要的端口。使用 firewalld 配置防火墻:

  1. 開啟 HTTP(80 端口)和 VRRP(112 端口)

    firewall-cmd --zone=public --add-port=80/tcp --permanent
    firewall-cmd --zone=public --add-port=112/udp --permanent
    firewall-cmd --reload
  2. 驗證防火墻規則

    firewall-cmd --list-all

    確保 80/tcp112/udp 端口已正確放行。

3.4 實現 SSH 免密登錄

為提高運維效率并減少人為錯誤,需要實現 SSH 免密登錄。生成 SSH 密鑰對,并將公鑰復制到所有服務器:

ssh-keygen -t rsa
ssh-copy-id lvs-backup
ssh-copy-id webserver1
ssh-copy-id webserver2

4. 軟件安裝與配置

4.1 LVS 主節點和備節點配置
4.1.1 安裝 IPVS 和 Keepalived

在 LVS 主節點和備節點上安裝必要的軟件:

yum install -y ipvsadm keepalived
4.1.2 加載 IPVS 模塊
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh

確保模塊加載成功:

lsmod | grep ip_vs

4.1.3 配置 IP 轉發

編輯 /etc/sysctl.conf 文件,添加或修改以下內容:

net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens160.send_redirects = 0

使配置生效:

sysctl -p

4.1.4 配置 VIP

在主節點上配置 VIP:

sudo nmcli con mod ens160 +ipv4.addresses 192.168.65.100/32
sudo nmcli con up ens160

4.1.5 配置 LVS 規則
  1. 清除原有 LVS 規則

    ipvsadm -C
  2. 添加虛擬服務器

    ipvsadm -A -t 192.168.65.100:80 -s rr
  3. 添加真實服務器

    ipvsadm -a -t 192.168.65.100:80 -r 192.168.65.133:80 -g -w 1
    ipvsadm -a -t 192.168.65.100:80 -r 192.168.65.134:80 -g -w 1
  4. 查看lvs規則

    ipvsadm -Ln
  5. 保存 LVS 規則

    ipvsadm -S > /etc/sysconfig/ipvsadm
4.1.6 配置 Keepalived

編輯 /etc/keepalived/keepalived.conf 文件,配置 Keepalived 以實現主備切換,確保高可用性:

主節點(192.168.65.131)

global_defs {router_id LVS_MASTER
}
vrrp_instance VI_1 {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.65.101}
}

備節點(192.168.65.132)

global_defs {router_id LVS_BACKUP
}
vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.65.101}
}
4.1.7 啟動服務

啟動并啟用 IPVS 和 Keepalived 服務,確保配置生效:

sudo systemctl enable keepalived
sudo systemctl start keepalived

主節點獲取keepalived-vip(192.168.65.101),備用節點未爭取到

4.2 后端 Web 服務器配置
4.2.1 安裝 Nginx

在后端 Web 服務器上安裝 Nginx,為用戶提供 Web 服務:

sudo yum install -y nginx
4.2.2 啟動 Nginx 并設置開機自啟
sudo systemctl start nginx
sudo systemctl enable nginx
4.2.3 修改 Nginx 默認頁面(用于區分不同服務器)

Web 服務器 1(192.168.65.133)

echo "<h1>This is Real Server 1</h1>" > /usr/share/nginx/html/index.html

Web 服務器 2(192.168.65.134)

echo "<h1>This is Real Server 2</h1>" > /usr/share/nginx/html/index.html
4.2.4 配置 VIP

在真實服務器上配置 VIP:

sudo nmcli con add type loopback con-name lo ifname lo +ip4 192.168.65.100/32
sudo nmcli con up lo

4.2.5 調整 ARP 參數

編輯 /etc/sysctl.conf 文件,添加以下內容:

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

使配置生效:

sysctl -p

5. 測試與驗證
5.1 驗證 LVS 和 Keepalived
5.1.1 正常訪問測試

驗證客戶端是否能夠通過虛擬 IP 正常訪問后端服務器:

curl 192.168.65.100

預期結果:返回 This is Real Server 1This is Real Server 2

5.1.2 主節點故障模擬

驗證在主節點故障時,備節點是否能夠正常接管虛擬 IP:

在主節點(192.168.65.131)上停止 Keepalived 服

systemctl stop keepalived

主節點失去vip??

備用節點獲取vip

5.2 驗證 Nginx

驗證后端服務器的 Nginx 服務是否正常運行:

curl http://192.168.65.133
curl http://192.168.65.134

預期結果:分別返回 This is Real Server 1This is Real Server 2

用客戶機和windows端測試:?

?

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

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

相關文章

window 顯示驅動開發-視頻內存供應和回收(一)

Windows 顯示驅動程序模型 (WDDM) 1.2 及更高版本用戶模式顯示驅動程序必須使用內存套餐和回收功能&#xff08;從Windows 8開始提供&#xff09;&#xff0c;以減少本地內存和系統內存中臨時表面所需的內存開銷。 最低 WDDM 版本&#xff1a;1.2 最低 Windows 版本&#xff…

什么是VR場景?VR與3D漫游到底有什么區別

在數字化時代&#xff0c;虛擬現實&#xff08;Virtual Reality, 簡稱VR&#xff09;場景與3D漫游作為兩種前沿技術&#xff0c;改變著人們的生活方式和體驗模式。通過計算機模擬真實或假想的場景&#xff0c;讓用戶仿佛身臨其境&#xff0c;并能與虛擬環境進行互動。盡管VR場景…

JAVA查漏補缺(2)

AJAX 什么是Ajax Ajax&#xff08;Asynchronous Javascript And XML&#xff09;&#xff0c;即是異步的JavaScript和XML&#xff0c;Ajax其實就是瀏覽器與服務器之間的一種異步通信方式 異步的JavaScript 它可以異步地向服務器發送請求&#xff0c;在等待響應的過程中&…

客服中心大模型應用演進路線:從傳統服務到超級智能助手的轉型

客服中心作為企業與客戶溝通的重要橋梁&#xff0c;近年來經歷了從人工服務到人工智能驅動的深刻變革。本文基于"客服中心大模型應用演進路線圖"&#xff0c;詳細解析客服中心從傳統模式向AI驅動智能服務的轉型歷程&#xff0c;剖析每個發展階段的特點、應用場景及關…

使用 OpenCV 實現“隨機鏡面墻”——多鏡片密鋪的哈哈鏡效果

1. 引言 “哈哈鏡”是一種典型的圖像變形效果&#xff0c;通過局部鏡面反射產生扭曲的視覺趣味。在計算機視覺和圖像處理領域&#xff0c;這類效果不僅有趣&#xff0c;還能用于藝術創作、交互裝置、視覺特效等場景。 傳統的“哈哈鏡”往往是針對整張圖像做某種鏡像或扭曲變換…

Python訓練營打卡——DAY33(2025.5.22)

目錄 簡單的神經網絡 一、PyTorch的安裝 二、準備工作 三、數據的準備 四、模型架構定義 五、模型訓練&#xff08;CPU版本&#xff09; 1. 定義損失函數和優化器 2. 開始循環訓練 3. 可視化結果 六、通俗解釋 1. 環境安裝&#xff08;相當于買鍋碗瓢盆&#xff09;…

目標檢測 Lite-DETR(2023)詳細解讀

文章目錄 迭代高級特征跨尺度融合高效的低層次特征跨尺度融合KDA&#xff1a;Key-aware Deformable Attention 論文翻譯&#xff1a; CVPR 2023 | Lite DETR&#xff1a;計算量減少60%&#xff01;高效交錯多尺度編碼器-CSDN博客 DINO團隊的 &#xff08;Lightweight Transfo…

ES(Elasticsearch) 基本概念(一)

Elasticsearch作為當前最流行的開源搜索和分析引擎&#xff0c;廣泛應用于日志分析、全文搜索、業務智能等領域。Elasticsearch是一個基于 Apache Lucene 構建的分布式搜索和分析引擎、可擴展數據存儲和矢量數據庫。它針對生產級工作負載的速度和相關性進行了優化。使用 Elasti…

當物聯網“芯”闖入納米世界:ESP32-S3驅動的原子力顯微鏡能走多遠?

上次咱們把OV2640攝像頭“盤”得明明白白&#xff0c;是不是感覺ESP32-S3這小東西潛力無限&#xff1f;今天&#xff0c;咱們玩個更刺激的&#xff0c;一個聽起來就讓人腎上腺素飆升的挑戰——嘗試用ESP32-S3這顆“智慧芯”&#xff0c;去捅一捅科學界的“馬蜂窩”&#xff0c;…

Excel合并單元格后,如何自動批量生成序號列

1.選擇整列 2.組合鍵&#xff1a;CtrlG 3.定位條件&#xff0c;選擇“空值” 4.在第一個框中輸入“MAX(”&#xff0c;鼠標選中A1框&#xff0c;后加“&#xff1a;”&#xff0c;鼠標選中前方“A1”&#xff0c;按“F4”絕對引用&#xff0c;補全右括號&#xff0c;后輸入“1…

TDengine 運維—容量規劃

概述 若計劃使用 TDengine 搭建一個時序數據平臺&#xff0c;須提前對計算資源、存儲資源和網絡資源進行詳細規劃&#xff0c;以確保滿足業務場景的需求。通常 TDengine 會運行多個進程&#xff0c;包括 taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。 在這些進程…

Axure設計數字鄉村可視化大屏:從布局到交互的實戰經驗分享

鄉村治理正從傳統模式向“數據驅動”轉型。數字鄉村可視化大屏作為數據展示的核心載體&#xff0c;不僅能直觀呈現鄉村發展全貌&#xff0c;還能為決策提供科學依據。本文以Axure為工具&#xff0c;結合實際案例&#xff0c;分享如何從零設計一個功能完備、交互流暢的數字鄉村大…

從零基礎到最佳實踐:Vue.js 系列(1/10):《環境搭建與基礎概念》

Vue.js 環境搭建與基礎概念 關鍵點 Vue.js 是一個簡單易用的前端框架&#xff0c;適合初學者快速上手。搭建開發環境需要安裝 Node.js 和 npm/Yarn&#xff0c;推薦使用最新 LTS 版本。Vue CLI 是官方工具&#xff0c;可快速創建項目并提供開發服務器。Vue.js 基于 MVVM 模式&…

使用docker compose部署dify(大模型開發使用平臺)

Dify是一款生成式 AI 應用中間件&#xff0c;面向有私有部署與數據合規需求的企業用戶&#xff0c;推動企業向 AI 時代轉型。平臺支持無代碼構建&#xff0c;業務人員即可快速搭建與調試 AI 應用&#xff0c;顯著降低開發門檻。 參考 https://docs.dify.ai/zh-hans/getting-s…

npm 安裝時 SSL 證書過期問題筆記

問題描述: npm error code CERT_HAS_EXPIRED npm error errno CERT_HAS_EXPIRED npm error request to https://registry.npm.taobao.org/axios failed, reason: certificate has expired 這表明當前配置的 npm 鏡像源&#xff08;淘寶鏡像 https://registry.npm.taobao.org&…

力扣HOT100之二叉樹: 236. 二叉樹的最近公共祖先

果然&#xff0c;這道題二刷還是不會做&#xff0c;回去看卡爾視頻了。結合靈神的題解&#xff0c;我對這道題有了一些新的理解。 首先這道題還是用遞歸來做&#xff0c;由于我們需要計算兩個節點的最近公共祖先&#xff0c;一定是從下往上來遍歷&#xff0c;只有先判斷左右子樹…

Word 轉 HTML API 接口

Word 轉 HTML API 接口 圖像/轉換 Word 文檔轉換為 HTML 文件轉換 / 超高精度與還原度 文件轉換 / Word。 1. 產品功能 超高精度與還原度的 HTML 文件轉換&#xff1b;支持將 Word 文檔轉換為 HTML 格式&#xff1b;支持 .doc 和 .docx 格式&#xff1b;保持原始 Word 文檔的…

idea 安裝飛算-javaAI 插件使用

文章目錄 前言idea 安裝飛算-javaAI 插件使用1. 介紹一下飛算-AI2. 安裝使用 前言 如果您覺得有用的話&#xff0c;記得給博主點個贊&#xff0c;評論&#xff0c;收藏一鍵三連啊&#xff0c;寫作不易啊^ _ ^。 ??而且聽說點贊的人每天的運氣都不會太差&#xff0c;實在白嫖的…

Bert預訓練任務-MLM/NSP

MLM MLM:Masked Language Mode:在每一個訓練序列中以15%的概率隨機地選中某個token進行MASK,當一個token被選中后&#xff0c;有以下三種處理方式&#xff1a; 80%的概率被[MASK]&#xff0c;如my dog is hairy->my dog is [MASK]10%的概率修改為隨機的其他token,如my dog …

瀏覽器原生 Web Crypto API 實現 SHA256 Hash 加密

寫在前面 在我上一篇文章 《node 后端和瀏覽器前端&#xff0c;有關 RSA 非對稱加密的完整實踐&#xff0c; 前后端匹配的代碼演示》 中&#xff0c;我們使用 瀏覽器原生 Web Crypto API 實現了 RSA 的加密算法。 但是&#xff0c;在我之前的 《我設計的一個安全的 web 系統用…