負載均衡群集---Haproxy

目錄

一、HAproxy

一、概念

二、核心作用

三、主要功能特性

四、應用場景

五、優勢與特點

二、 案例分析

1. 案例概述

2. 案例前置知識點

(1)HTTP 請求

(2)負載均衡常用調度算法

(3)常見的 web 群集調度器

三、實驗案例(HAproxy 搭建Web群集)


一、HAproxy

一、概念

HAProxy?是一款?開源、高性能的負載均衡與反向代理工具,基于?C 語言?開發,支持?四層(傳輸層)?和?七層(應用層)?流量處理,廣泛用于高并發場景下的服務調度、流量分發和系統高可用性保障。

  • 核心定位:介于客戶端和后端服務器之間的中間層,將客戶端請求均勻分配到多個后端服務器,同時監控服務器狀態,確保請求高效、可靠地處理。
  • 官網:www.haproxy.org
二、核心作用
  1. 負載均衡(Load Balancing)
    • 將客戶端請求按預設算法(如輪詢、最少連接、源 IP 哈希等)分發到多個后端服務器,避免單點壓力過大,提升系統吞吐量。
  2. 高可用性(High Availability)
    • 通過?健康檢查(如定期發送心跳包)實時監測后端服務器狀態,自動隔離故障節點,待節點恢復后重新納入負載均衡池,保障服務連續性。
  3. 會話保持(Session Persistence)
    • 基于?Cookie、源 IP 或請求頭?等信息,將同一用戶的請求固定路由到同一后端服務器,確保會話狀態一致(如登錄用戶的請求始終由同一服務器處理)。
  4. 協議處理與轉發
    • 四層代理:處理 TCP/UDP 流量,基于 IP + 端口轉發(如數據庫、Redis 服務)。
    • 七層代理:解析 HTTP/HTTPS 協議,基于 URL、Header、Cookie 等應用層信息精細化路由(如 Web 服務、API 網關)。
  5. 流量優化與安全
    • 支持 HTTP 壓縮、SSL 卸載(HTTPS 解密)、請求緩存,減少服務器負載;
    • 提供基本的 ACL(訪問控制列表),阻擋惡意流量(如限制特定 IP 訪問)。
三、主要功能特性
特性說明
多模式支持- TCP 模式(四層):適用于任意基于連接的協議(如 MySQL、MQ);
- HTTP 模式(七層):支持 HTTP/HTTPS 協議解析與處理。
負載均衡算法支持輪詢(Round Robin)、最少連接(Least Connections)、源 IP 哈希(Source Hash)、URI 哈希等多種算法。
健康檢查機制支持 HTTP/HTTPS、TCP、ICMP 等協議的健康檢查,可自定義檢查頻率、超時時間。
動態配置與熱更新支持通過配置文件或 API 動態調整后端服務器列表,無需重啟服務即可生效。
監控與統計內置?stats 頁面,實時展示請求量、錯誤率、服務器狀態等指標,便于運維監控。
連接管理優化支持連接復用(Keep-Alive)、連接隊列管理,減少 TCP 三次握手開銷,提升并發性能。
四、應用場景
  1. Web 服務負載均衡
    • 作為 Web 服務器(如 Nginx、Tomcat)的前端代理,按 URL 路徑、用戶地域等規則分流請求。
  2. API 網關與微服務架構
    • 在微服務架構中,對 API 請求進行路由、流量控制和熔斷處理,保障服務穩定性。
  3. TCP 協議服務代理
    • 為數據庫(如 MySQL、PostgreSQL)、消息隊列(如 Kafka、RabbitMQ)提供四層負載均衡,提升連接效率。
  4. 混合架構中的中間層
    • 常與?LVS(四層負載均衡)?結合使用:LVS 作為流量入口進行初步分發,HAProxy 作為二級代理進行七層精細化處理。
五、優勢與特點
  • 高性能:單臺服務器可支持數萬并發連接,吞吐量接近硬件負載均衡器(如 F5)。
  • 輕量級與靈活性:配置簡單,支持復雜路由邏輯,適合中小規模集群和復雜業務場景。
  • 穩定性:在金融、電商等對可用性要求高的行業中廣泛使用(如 GitHub、Spotify 等)。
  • 開源免費:社區活躍,文檔豐富,支持二次開發。

典型架構 :

客戶端 <----> HAProxy(負載均衡與代理) <----> 后端服務器集群(Web/API/數據庫)↑└── 健康檢查 & 動態調度

二、 案例分析

1. 案例概述

HAproxy 是目前比較流行的群集調度工具,同類群集調度有很多,如LVS和Nginx.

LVS性能最好,但部署復雜;Nginx的upstream 模塊支持群集功能但對群集節點健康檢查功能不強,高并發性能沒有HAproxy好。

2. 案例前置知識點

(1)HTTP 請求

通過 URL 訪問網站使用協議是HTTP協議,稱為HTTP請求。

請求方式常見為GET和POST方式。當訪問時,會根據請求URL返回狀態碼。

關鍵步驟

  1. 客戶端發送 HTTP 請求(方法 + URL + Headers + Body)

  2. 負載均衡器根據調度算法選擇后端節點

  3. Web 服務器解析請求,訪問緩存/數據庫

  4. 生成響應(狀態碼 + Headers + HTML/JSON)

(2)負載均衡常用調度算法

算法原理適用場景案例選擇
輪詢 (RR)按序分配請求服務器性能均衡靜態資源分發
加權輪詢 (WRR)根據權重分配請求服務器性能差異大Web 服務器集群
最小連接 (LC)優先選擇當前連接數最少的節點長連接服務(如數據庫)Redis 訪問
IP 哈希 (SH)相同 IP 固定分配到同一節點需要會話保持的場景用戶購物車

(3)常見的 web 群集調度器

類型代表工具工作層級案例應用特點
四層調度器LVS傳輸層入口流量分發高性能,支持百萬并發
七層調度器Nginx應用層HTTP/HTTPS 請求處理支持 URL 重寫、SSL 卸載
云原生調度Kubernetes Ingress應用層容器化環境自動擴縮容,服務發現

三、實驗案例(HAproxy 搭建Web群集)

境:Web:102 103 ? 代理服務器:101

部署 :

#web部署
102 103:
dnf -y install httpd
systemctl stop firewalld
systemctl distable firewalld
setenforce 0101:
echo "test2">/var/www/html/index.html
102:
echo "test3">/var/www/html/index.htmlsystemctl restart httpd
systemctl enable httpd
#HA代理部署
-測試網站 curl 192.168.10.102/103
-安裝haproxy
dnf -y install haproxy#日志文件  /var/log/messages-配置文件
vim /etc/haproxy/haproxy.cfg
====================================
globallog         127.0.0.1 local2chroot      /var/lib/haproxy   //禁錮目錄pidfile     /var/run/haproxy.pid    //pid文件,運行時生成user        haproxy    //用戶group       haproxy     //用戶組daemon       //守護進程maxconn     4000   //最大連接數defaults     //默認模式,決定haproxy工作在哪一層mode                    httplog                     global   //日志記錄為全局模式option                  httplog   //開啟 HTTP 格式的日志記錄option                  dontlognull   //不記錄空值相關的日志retries                 3     //默認重試次數timeout http-request    5s   // HTTP 請求超時時間timeout queue           1m     //等待時間timeout connect         5s     //規定連接建立的超時時間timeout client          1m		//客戶端連接的超時時間timeout server          1m		//服務器端連接的超時時間timeout http-keep-alive 5s   	//持久連接超時時間timeout check           5s    //檢查的超時時間maxconn                 3000   //最大并發連接數#刪除defaults下面內容
配置新內容------
listen myweb   bind 0.0.0.0:80   //監聽所有網卡的80端口(haproxy 的端口取決于監聽的服務端口是多少它就是多少)option httpchk GET /index.html  //通過發送請求到服務器來進行健康檢查balance roundrobin //負載均衡算法 為 輪詢算法server inst1 192.168.10.102:80 check inter 2000 fall 3   //用于服務器相關配置或監測server inst2 192.168.10.103:80 check inter 2000 fall 3 #啟動服務
systemctl start haproxy
#HA proxy 日志(默認在系統syslog日志中,不方便,單獨定義出來)
配置文件
vim /etc/haproxy/haproxy.cfg
globallog     127.0.0.1 local2log   	127.0.0.1 local3配置Rsyslog服務
vim /etc/rsyslog.d/haproxy.conf     //添加一個日志服務的配置文件
$ModLoad imudp
$UDPServerRun 514
local3.*/var/log/haproxy.log
&~      //標注參數的結束重啟
systemctl restart haproxy
systemctl restart rsyslog測試日志信息
cat  /var/log/haproxy.log
tail -f /var/log/haproxy.log   (自動生成,重新訪問網站會生成)會顯示日志信息

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

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

相關文章

html5視頻播放器和微信小程序如何實現視頻的自動播放功能

在HTML5中實現視頻自動播放需設置autoplay和muted屬性&#xff08;瀏覽器策略要求靜音才能自動播放&#xff09;&#xff0c;并可添加loop循環播放、playsinline同層播放等優化屬性。微信小程序通過<video>組件的autoplay屬性實現自動播放&#xff0c;同時支持全屏按鈕、…

OpenHarmony定制系統組合按鍵(一)

一、開發環境 系統版本&#xff1a;OpenHarmony 4.0.10.13 設備平臺&#xff1a;rk3568 SDK版本&#xff1a;fullSDK 4.0.10.13 DevEco Studio版本&#xff1a;4.1.0.400 二、需求背景 定制OpenHarmony 系統組合按鍵功能&#xff0c;例如仿Android Power VOL_Up組合鍵實現截…

相機定屏問題分析四:【cameraserver 最大request buffer超標】后置視頻模式預覽定屏閃退至桌面

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了:相機定屏問題分析三:【配流ConfigStream失敗】外屏打開相機視頻照片人像來回切換后,相機頁面卡死,點擊沒反應9055522 這一篇我們開始講: 相機定屏問題分析四:【cameraserver 最大request buffer超…

從 PyTorch 到 TensorFlow Lite:模型訓練與推理

一、方案介紹 研發階段&#xff1a;利用 PyTorch 的動態圖特性進行快速原型驗證&#xff0c;快速迭代模型設計。 靈活性與易用性&#xff1a;PyTorch 是一個非常靈活且易于使用的深度學習框架&#xff0c;特別適合研究和實驗。其動態計算圖特性使得模型的構建和調試變得更加直…

4.2.5 Spark SQL 分區自動推斷

在本節實戰中&#xff0c;我們學習了Spark SQL的分區自動推斷功能&#xff0c;這是一種提升查詢性能的有效手段。通過創建具有不同分區的目錄結構&#xff0c;并在這些目錄中放置JSON文件&#xff0c;我們模擬了一個分區表的環境。使用Spark SQL讀取這些數據時&#xff0c;Spar…

數據結構:導論

目錄 什么是“第一性原理”&#xff1f; 什么是“數據結構”&#xff1f; 數據結構解決的根本問題是什么&#xff1f; 數據結構的兩大分類 數據結構的基本操作 數據結構與算法的關系 學習數據結構的底層目標 什么是“第一性原理”&#xff1f; 在正式進入數據結構之前&…

汽車制造場景下Profibus轉Profinet網關核心功能與應用解析

在當今工業自動化的浪潮中&#xff0c;各種通訊協議層出不窮&#xff0c;而其中PROFIBUS與PROFINET作為兩種主流的工業通信標準&#xff0c;它們之間的轉換需求日益增長。特別是對于那些希望實現老舊設備與現代化網絡無縫對接的企業來說&#xff0c;一個高效、穩定的網關產品顯…

qt ubuntu 20.04 交叉編譯

一、交叉編譯環境搭建 1.下載交叉編譯工具鏈&#xff1a;https://developer.arm.com/downloads/-/gnu-a 可以根據自己需要下載對應版本&#xff0c;當前最新版本是10.3, 筆者使用10.3編譯后的glibc.so版本太高&#xff08;glibc_2.3.3, glibc_2.3.4, glibc_2.3.5&#xff09;…

在Babylon.js中創建3D文字:簡單而強大的方法

引言 在3D場景中添加文字是許多WebGL項目的常見需求。Babylon.js提供了多種創建3D文字的方法&#xff0c;其中使用TextBlock結合平面網格是一種簡單而高效的方式。本文將介紹如何使用Babylon.js的GUI系統在3D空間中創建美觀的文字效果。 方法概述 Babylon.js的GUI系統允許我…

油桃TV v20250519 一款電視端應用網站聚合TV播放器 支持安卓4.1

油桃TV v20250519 一款電視端應用網站聚合TV播放器 支持安卓4.1 應用簡介&#xff1a; 油桃TV是一款開源電視端應用網站聚合瀏覽器&#xff0c;它把大家常見需求的一些網站都整合到了這個應用上&#xff0c;并進行了電視端…

Perl單元測試實戰指南:從Test::Class入門到精通的完整方案

閱讀原文 前言:為什么Perl開發者需要重視單元測試? "這段代碼昨天還能運行,今天就出問題了!"——這可能是每位Perl開發者都經歷過的噩夢。在沒有充分測試覆蓋的情況下,即使是微小的改動也可能導致系統崩潰。單元測試正是解決這一痛點的最佳實踐,它能幫助我們在…

OpenCv高階(十三)——人臉檢測

文章目錄 前言一、人臉檢測—haar特征二、人臉檢測---級聯分類器1、級聯分類器2、如何訓練級聯分類器3、已存在的級聯分類器 三、代碼分析1、人臉檢測的簡單使用2、人臉微笑檢測&#xff08;1&#xff09; 初始化視頻源&#xff08;2&#xff09;主循環處理每一幀&#xff08;3…

無線通信模塊簡介

QuecPython 是運行在無線通信模塊上的開發框架。對于首次接觸物聯網開發的用戶而言&#xff0c;無線通信模塊可能是一個相對陌生的概念。本文主要針對無線通信和蜂窩網絡本身&#xff0c;以及模塊的概念、特性和開發方式進行簡要的介紹。 無線通信和蜂窩網絡 物聯網對無線通信…

Unity 中實現首尾無限循環的 ListView

之前已經實現過&#xff1a; Unity 中實現可復用的 ListView-CSDN博客文章瀏覽閱讀5.6k次&#xff0c;點贊2次&#xff0c;收藏27次。源碼已放入我的 github&#xff0c;地址&#xff1a;Unity-ListView前言實現一個列表組件&#xff0c;表現方面最核心的部分就是重寫布局&…

【C++】 類和對象(上)

1.類的定義 1.1類的定義格式 ? class為定義類的關鍵字&#xff0c;后跟一個類的名字&#xff0c;{}中為類的主體&#xff0c;注意類定義結束時后?分號不能省 略。類體中內容稱為類的成員&#xff1a;類中的變量稱為類的屬性或成員變量;類中的函數稱為類的?法或 者成員函數。…

Transformer架構詳解:從Attention到ChatGPT

Transformer架構詳解&#xff1a;從Attention到ChatGPT 系統化學習人工智能網站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目錄 Transformer架構詳解&#xff1a;從Attention到ChatGPT摘要引言一、Attention機制&#xff1a;Transformer的…

Rock9.x(Linux)安裝Redis7

&#x1f49a;提醒&#xff1a;1&#xff09;注意權限問題 &#x1f49a; 查是否已經安裝了gcc gcc 是C語言編譯器&#xff0c;Redis是用C語言開發的&#xff0c;我們需要編譯它。 gcc --version如果沒有安裝gcc&#xff0c;那么我們手動安裝 安裝GCC sudo dnf -y install…

EasyExcel使用導出模版后設置 CellStyle失效問題解決

EasyExcel使用導出模版后在CellWriteHandler的afterCellDispose方法設置 CellStyle失效問題解決方法 問題描述&#xff1a;excel 模版塞入數據后&#xff0c;需要設置單元格的個性化設置時失效&#xff0c;本文以設置數據格式為例&#xff08;設置列的數據展示時需要加上千分位…

【Day41】

DAY 41 簡單CNN 知識回顧 數據增強卷積神經網絡定義的寫法batch歸一化&#xff1a;調整一個批次的分布&#xff0c;常用與圖像數據特征圖&#xff1a;只有卷積操作輸出的才叫特征圖調度器&#xff1a;直接修改基礎學習率 卷積操作常見流程如下&#xff1a; 1. 輸入 → 卷積層 →…

Express教程【002】:Express監聽GET和POST請求

文章目錄 2、監聽post和get請求2.1 監聽GET請求2.2 監聽POST請求 2、監聽post和get請求 創建02-app.js文件。 2.1 監聽GET請求 1??通過app.get()方法&#xff0c;可以監聽客戶端的GET請求&#xff0c;具體的語法格式如下&#xff1a; // 1、導入express const express req…