用Nginx實現負載均衡與高可用架構(整合Keepalived)

前言

在分布式架構中,負載均衡高可用是保障系統穩定性的兩大核心能力。本文將深入講解如何通過Nginx實現七層負載均衡,并結合Keepalived構建無單點故障的高可用架構。文末附完整配置模板!


一、Nginx負載均衡實現方案

1. 核心原理

Nginx通過反向代理將客戶端請求分發到多個后端服務器,基于Upstream模塊實現流量調度,支持多種負載算法。

2. 基礎配置模板
http {upstream backend {# 默認輪詢算法server 192.168.1.101:80 weight=5;  # 權重配置server 192.168.1.102:80 max_fails=3 fail_timeout=30s; # 健康檢查server 192.168.1.103:80 backup;    # 備用節點}server {listen 80;location / {proxy_pass http://backend;}}
}
3. 負載均衡算法對比
算法配置指令適用場景特點
輪詢(默認)默認通用場景簡單公平,支持權重
最少連接least_conn長連接服務(如數據庫)動態分配,資源利用率高
IP哈希ip_hash會話保持需求固定用戶->服務器映射
一致性哈希hash $key緩存服務器集群減少緩存擊穿
4. 高級功能實現
  • 健康檢查(被動模式):
    server 192.168.1.102 max_fails=3 fail_timeout=30s;
    
  • 流量分割(灰度發布):
    upstream backend {server 192.168.1.101 weight=90;  # 90%流量到新版本server 192.168.1.102 weight=10;  # 10%流量到舊版本
    }
    

二、Nginx高可用架構(Keepalived方案)

1. 架構原理

通過VRRP協議實現虛擬IP(VIP)漂移,主備節點自動切換,保障服務不間斷。

2. 環境準備
  • 兩臺Nginx服務器(主:192.168.1.101,備:192.168.1.102)
  • 虛擬IP:192.168.1.100(對外暴露的統一入口)
3. Keepalived配置詳解

主節點配置(/etc/keepalived/keepalived.conf):

global_defs {router_id nginx_master  # 標識節點名稱
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"  # 健康檢查腳本interval 2weight -20   # 檢測失敗時降低優先級
}vrrp_instance VI_1 {state MASTER            # 初始狀態interface eth0          # 物理網卡名稱virtual_router_id 51    # 集群ID(必須一致)priority 100            # 初始優先級(主>備)advert_int 1            # 心跳間隔authentication {        # 認證配置auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100/24    # 虛擬IP}track_script {          # 綁定健康檢查chk_nginx}
}

備節點配置(僅不同部分):

state BACKUP     # 設置為備用
priority 90      # 優先級低于主節點
4. 健康檢查腳本

創建 /etc/keepalived/check_nginx.sh

#!/bin/bash
# 檢測Nginx進程是否存在
if ! pgrep -x "nginx" > /dev/null; thensystemctl restart nginx || exit 1  # 嘗試重啟,失敗則返回1
fi
# 可選:HTTP狀態檢測
curl -s http://localhost/health > /dev/null || exit 1

賦予執行權限:

chmod +x /etc/keepalived/check_nginx.sh
5. 啟動與驗證
systemctl start keepalived   # 啟動服務
systemctl enable keepalived  # 設置開機自啟

查看VIP綁定:

ip addr show eth0 | grep 192.168.1.100

三、高級優化方案

1. 雙主模式(Active-Active)
# 節點1額外配置
vrrp_instance VI_2 {state MASTERvirtual_router_id 52priority 100virtual_ipaddress { 192.168.1.101/24 }
}# 節點2額外配置
vrrp_instance VI_2 {state BACKUPvirtual_router_id 52priority 90virtual_ipaddress { 192.168.1.101/24 }
}
2. 結合DNS輪詢
  • 將多個VIP綁定到同一個域名
  • 實現多級負載均衡(DNS層+Nginx層)
3. 監控告警集成
  • Prometheus監控指標:
    # 安裝nginx_exporter
    location /stub_status {stub_status;allow 127.0.0.1;deny all;
    }
    

四、常見問題與解決方案

問題現象排查步驟解決方案
VIP不漂移1. 檢查防火墻是否允許VRRP協議
2. 查看keepalived日志
開放IP協議號112
腦裂(雙主)1. 檢查網絡連通性
2. 確認virtual_router_id唯一
配置不同的router_id
健康檢查誤判1. 檢查腳本執行權限
2. 增加curl超時設置
優化檢測邏輯

總結

通過Nginx實現負載均衡可提升系統吞吐量,而結合Keepalived的高可用方案能確保服務零中斷。實際部署時需注意:

  1. 根據業務場景選擇合適的負載算法
  2. VIP需與物理網絡在同一子網
  3. 生產環境建議使用雙主+健康檢查增強模式

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

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

相關文章

springBoot與ElementUI配合上傳文件

以下是使用Vue CLI創建的Vue項目,結合Element UI來實現文件上傳功能的完整示例。 步驟 創建Vue項目:確保你已經安裝了Vue CLI,若未安裝,可使用以下命令安裝: npm install -g vue/cli然后創建一個新的Vue項目&#x…

黑盒測試的測試用例構成的八點要素

測試用例: 是為測試項目而設計的執行文檔 作用: 防止漏測實施測試的標準 編寫格式: 用例編號:項目 模塊 編號用例標題:預期結果(測試點)模塊/項目:所屬項目或模塊優先級:表示用例的重要程度或者影響力P0~p4(P0最高)前置條件:要執行此條用例&#xf…

藍橋刷題note11(好數)

1,好數 一個整數如果按從低位到高位的順序,奇數位 (個位、百位、萬位 ?? ) 上的數字是奇數,偶數位 (十位、千位、十萬位 ?? ) 上的數字是偶數,我們就稱之為 “好數”。 給定一個正整數 NN,請計算從 1 到 NN 一共…

Keil編譯生成的axf文件的介紹

在 Keil 開發環境(如 Keil MDK)中,.axf 文件是一種 可執行文件格式,主要用于 ARM 處理器的嵌入式開發。它的作用類似于 ELF(Executable and Linkable Format)格式,包含了可執行代碼、調試信息、…

C#:第一性原理拆解屬性(property)

目錄 第一步:從最基本的需求出發 第二步:引入控制需求 第三步:優化訪問方式 第四步:剖析屬性的本質 第五步:進一步簡化和演化 第六步:總結屬性的第一性原理 我們用第一性原理(First Prin…

-PHP 應用文件上傳函數缺陷條件競爭二次渲染黑白名單JS 繞過

#學習前必讀: 1 、課前一定要明白: 無文件解析安全問題上,格式解析是一對一的(不能 jpg 解析 php ) 換句話來說有解析錯誤配置或后綴解析漏洞時才能實現格式差異解析 2 、文件上傳安全指的是攻擊者通過利用上傳…

C++的模板(十四):更多的自動內存管理

在前文《C的模板(八):子系統》class DMM,給出了一個自動動態內存管理的例子。https://blog.csdn.net/aaasssdddd96/article/details/139921880 它使用了一個list容器,把兩個類型兼容的指針存放在一起。在new的時候,隨即就把得到的…

Windows下VSCode的安裝

前言 VSCode的安裝看起來平平無奇,但也不是輕輕松松的。筆者將最新的Windows下安裝VSCode,以及運行最簡單的C程序的過程記錄下來,供后續的自己和大家參考。 一、官網下載安裝包 Visual Studio Code - Code Editing. Redefined 二、安裝 直接…

Matlab教程004:Matlab矩陣的拼接重構重排以及矩陣的運算

文章目錄 1.4.3 矩陣的拼接重構重排1.4.3.1 橫向拼接1.4.3.2 縱向拼接1.4.3.3 矩陣的重構重排 1.4.4 矩陣的運算1.4.4.1 算數運算1.4.4.2 矩陣加減1.4.4.3 矩陣乘法1.4.4.4 矩陣轉置 1.4.3 矩陣的拼接重構重排 1.4.3.1 橫向拼接 A和B的行數相同,那么使用[A,B]、[A …

Python小練習系列 Vol.3:生成有效括號組合(回溯 + DFS)

🧠 Python小練習系列 Vol.3:生成有效括號組合(回溯 DFS) 👋 本期我們來刷一道 LeetCode 熱門經典題,借此掌握回溯算法的精髓 —— 生成有效括號組合,是學習遞歸 & DFS 的黃金題型&#xff…

實戰經驗深度解析 | 博睿數據制造行業精選案例集發布!

近年來,我國制造業加速邁向高端化、智能化、綠色化,為經濟高質量發展注入新動能。放眼全球,制造業正加速數字化、智能化轉型,5G、人工智能、邊緣計算等技術與生產全流程深度融合,有力推動柔性化生產與產業鏈協同創新發…

[創業之路-344]:戰略的本質是選擇、聚焦, 是成本/效率/低毛利優先,還是差易化/效益/高毛利優先?無論是成本優先,還是差易化戰略,產品聚焦是前提。

前言: 一、戰略的本質是選擇、聚焦 關于戰略的本質,觸及了商業競爭的核心矛盾:選擇成本優先(效率/低毛利)還是差異化(效益/高毛利),本質上是對企業戰略方向的終極拷問。 1、戰略選…

項目代碼第10講【數據庫運維知識——如何優化數據庫查詢效率?】:各種日志查看;主從復制;分庫分表(MyCat);讀寫分離;區別數據分區、分表、分庫

01. 運維-課程介紹_嗶哩嗶哩_bilibili 一、各種日志查看 二、主從復制 三、分庫分表(MyCat) 四、讀寫分離 五、區別數據分區、分表、分庫 1、數據庫分區 上圖中的ibd文件,是分區表的數據文件,可以分布在不同的物理設備上&…

OpenCV圖像拼接(10)用于實現圖像拼接過程中的時間流逝(timelapse)效果的一個類cv::detail::Timelapser

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 cv::detail::Timelapser 是 OpenCV 庫中用于實現圖像拼接過程中的時間流逝(timelapse)效果的一個類。它通常用于將一系列…

Transformer 通關秘籍2:利用 BERT 將文本 token 化

前面兩節分別通過兩個代碼示例展示了模型將文本轉換為 token 之后是什么樣的,希望你可以對此有一個感性的認識。 本節來簡要介紹一下將一個連續的文本轉換為 token 序列的大致過程,這個過程被稱為分詞,也叫 tokenization。 在你沒了解這方面…

Optional的stream方法,flatMap, filter應用

Java 8引入的Optional和Stream徹底改變了我們處理空值和集合操作的方式。本文將深入探討如何將二者結合使用,通過四個核心場景提升代碼的健壯性和簡潔性。 一、Optional構成的Stream:空值自動過濾 當處理Optional集合時,我們常需要過濾掉空…

參加李繼剛線下活動啟發:未來提示詞還會存在嗎?

上周六,我參加了李繼剛老師組織的線下活動。 現場干貨滿滿,尤其是關于 AI 時代提示詞的價值、與 AI 溝通的藝術等話題,李老師的分享如同醍醐灌頂,讓我對 AI 人機協作有了更深的理解。 將幾點核心收獲整理出來,與大家…

Python基礎知識第二天:從格式化到流程控制

Python基礎知識第二天:從格式化到流程控制 大家好!今天我們來梳理Python的一些重要基礎知識,包括格式化輸出、輸入函數、運算符以及流程控制語句。 1. 格式化輸出 Python提供了多種格式化輸出的方式: # %d, %f, %s 格式化name &q…

GDB: coredump

前言:一句話如下使用 gdb [exec_file] [core_file] # or gdb -c [core_file] [exec_file] #-c指定轉儲的core文件 gdb -c core.5213 spp_uc_frequent_contact_ol_worker # 進入后輸入bt查看調用棧 bt #顯示所有幀棧 bt 10 #顯示前面10個幀棧(感覺沒啥用) bt …

21_js正則_表單驗證

目錄 正則 一、 正則的概念 二、創建正則方式 2.1 構造函數去創建正則 2.2 字面量去創建正則 2,3 test方法 三、正則修飾符 四、 正則的方法 lastIndex test方法 exec 五、字符串方法 replace match search split 六、正則表達式的構成 元字符-- 定位符 元字…