HAProxy使用方法以及和LVS區別

HAProxy簡介

HAProxy是法國開發者 威利塔羅(Willy Tarreau) 在2000年使用C語言開發的一個開源軟件 是一款具備高并發(萬級以上)、高性能的TCP和HTTP負載均衡器 支持基于cookie的持久性,自動故障切換,支持正則表達式及web狀態統計

LVS 與 HAProxy 的核心區別及優劣勢

工作層級與本質

LVS(Linux Virtual Server):是 Linux 內核級別的負載均衡器,僅工作在四層(傳輸層,如 TCP/UDP),基于 IP 和端口進行流量轉發,不解析應用層協議(如 HTTP)。

HAProxy:是用戶態的軟件負載均衡器,支持四層(傳輸層)和七層(應用層,如 HTTP/HTTPS),可解析應用層協議內容(如 HTTP 頭部、URL),實現更精細的轉發。

性能與適用場景

LVS 優勢
作為內核級工具,轉發效率極高(幾乎接近硬件負載均衡器),能承載百萬級并發連接,適合超大規模流量場景(如電商秒殺、大型分布式服務入口)。
缺點:功能簡單,不支持七層邏輯,配置和維護成本高(需結合其他工具完善功能)。

HAProxy 優勢
功能豐富,支持七層精細化轉發,健康檢查能力強,配置靈活,適合中高流量且需要應用層邏輯的場景(如 Web 服務、API 網關)。
缺點:用戶態軟件,轉發效率略低于 LVS(承載幾十萬并發無壓力,超大規模場景可能成為瓶頸)。

總結:LVS轉發效率更高但是沒有后端檢查需要其它工具完善功能,HAProxy轉發效率略低于LVS但有后端檢測,配置簡單。

HAProxy 的四層與七層負載詳解

?四層負載(TCP 模式)

工作原理:基于傳輸層協議(TCP/UDP)轉發,僅關注 “源 IP: 端口” 和 “目標 IP: 端口”,不解析數據包內容(如 HTTP 請求的 URL、頭部)。

轉發邏輯:類似 LVS,通過預設的 IP + 端口規則將流量轉發到后端服務器(如將訪問10.0.0.1:80的流量轉發到后端192.168.1.10:8080192.168.1.11:8080)。

適用場景:對性能要求高、無需應用層邏輯的服務,如數據庫(MySQL)、SSH、郵件服務(SMTP)等。

?七層負載(HTTP/HTTPS 模式)

工作原理:基于應用層協議(HTTP/HTTPS)轉發,會解析數據包的應用層內容(如 HTTP 的 Host、URI、Cookie、請求方法等),實現更智能的路由。

轉發邏輯:可根據應用層信息定制規則,例如:將訪問/static的靜態資源請求轉發到 CDN 或靜態服務器;將訪問/api的動態請求轉發到應用服務器;根據 HTTP 頭部的Host字段區分不同域名(如a.example.com轉發到集群 A,b.example.com轉發到集群 B)。

額外能力:支持 SSL 卸載(前端解密 HTTPS,后端用 HTTP 通信,減輕后端服務器壓力)、會話保持(通過 Cookie 或 IP 綁定固定用戶到某臺服務器)、請求改寫(Rewrite URL 或頭部)等。

適用場景:Web 服務、API 網關等需要應用層邏輯的場景,如電商網站的動靜分離、多域名路由等。

HAProxy的使用方法

HAProxy 的配置文件

haproxy.cfg由兩大部分組成,分別是:

global:全局配置段 進程及安全配置相關的參數 性能調整相關參數 Debug參數

proxies:代理配置段 defaults:為frontend, backend, listen提供默認配置

frontend:前端,相當于nginx中的server {}

backend:后端,相當于nginx中的upstream {}

listen:同時擁有前端和后端配置,配置簡單,生產推薦使用

使用listen替換 frontend和backend的配置方式,可以簡化設置,通常只用于TCP協議的應用 listen

我們每次修改完配置文件之后要重啟服務,影響比較大。我們可以借用一個工具來實現動態更新

socat 工具

對服務器動態權重和其它狀態可以利用 socat工具進行調整,Socat 是 Linux 下的一個多功能的網絡工 具,名字來由是Socket CAT,相當于netCAT的增強版.Socat 的主要特點就是在兩個數據流之間建立雙向 通道,且支持眾多協議和鏈接方式。如 IP、TCP、 UDP、IPv6、Socket文件等

范例:利用工具socat 對服務器動態權重調整

#修改配置文件

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg stats socket /var/lib/haproxy/stats mode 600 level admin

?#查看haproxy狀態

[root@haproxy ~]# echo "show info" | socat stdio /var/lib/haproxy/stats

#查看集群狀態

[root@haproxy ~]# echo "show servers state" | socat stdio /var/lib/haproxy/stats

#查看集群權重

[root@haproxy ~]# echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stat

#設置權重

[root@haproxy ~]# echo "set weight webcluster/web1 1 " | socat stdio /var/lib/haproxy/stats

#下線后端服務器

[root@haproxy ~]# echo "disable server webcluster/web1 " | socat stdio /var/lib/haproxy/stats

#上線后端服務器

[root@haproxy ~]# echo "enable server webcluster/web1 " | socat stdio /var/lib/haproxy/stats

針對多進程處理方法

如果開啟多進程那么我們在對進程的sock文件進行操作時其對進程的操作時隨機的

如果需要指定操作進程那么需要用多soct文件方式來完成

這樣每個進程就會有單獨的sock文件來進行單獨管理

haproxy的算法

HAProxy通過固定參數 balance 指明對后端服務器的調度算法

balance參數可以配置在listen或backend選項中

HAProxy的調度算法分為靜態和動態調度算法

有些算法可以根據參數在靜態和動態算法中相互轉換。

靜態算法

靜態算法:按照事先定義好的規則輪詢公平調度,不關心后端服務器的當前負載、連接數和響應速度 等,且無法實時修改權重(只能為0和1,不支持其它值),只能靠重啟HAProxy生效。

static-rr:基于權重的輪詢調度

不支持運行時利用socat進行權重的動態調整(只支持0和1,不支持其它值) 不支持端服務器慢啟動 其后端主機數量沒有限制,相當于LVS中的 wrr

慢啟動是指在服務器剛剛啟動上不會把他所應該承擔的訪問壓力全部給它,而是先給一部分,當沒 問題后在給一部分

first:

根據服務器在列表中的位置,自上而下進行調度 其只會當第一臺服務器的連接數達到上限,新請求才會分配給下一臺服務 其會忽略服務器的權重設置 不支持用socat進行動態修改權重,可以設置0和1,可以設置其它值但無效

動態算法

基于后端服務器狀態進行調度適當調整, 新請求將優先調度至當前負載較低的服務器 權重可以在haproxy運行時動態調整無需重啟

roundrobin:

1. 基于權重的輪詢動態調度算法, 2. 支持權重的運行時調整,不同于lvs中的rr輪訓模式, 3. HAProxy中的roundrobin支持慢啟動(新加的服務器會逐漸增加轉發數), 4. 其每個后端backend中最多支持4095個real server, 5. 支持對real server權重動態調整, 6. roundrobin為默認調度算法,此算法使用廣泛

動態調整權重

[root@haproxy ~]# echo "set weight webserver_80/webserver1 2" | socat stdio /var/lib/haproxy/haproxy.sock

leastconn:

leastconn加權的最少連接的動態 支持權重的運行時調整和慢啟動,即:根據當前連接最少的后端服務器而非權重進行優先調度(新客戶 端連接) 比較適合長連接的場景使用,比如:MySQL等場景。

各算法使用場景

first static-rr roundrobin leastconn source #使用較少 #做了session共享的web集群 #數據庫 #基于客戶端公網IP的會話保持 Uri--------------->http url_param--------->http hdr 五.高級功能及配置 介紹HAProxy高級配置及實用案例 #緩存服務器,CDN服務商,藍汛、百度、阿里云、騰訊 #可以實現session保持 #基于客戶端請求報文頭部做下一步處理

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

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

相關文章

超越“小作文”:大模型指令設計的進階之路——優化知識信噪比

文章摘要:你是否認為,給大模型的指令(Prompt)寫得越詳細越好?真的是信息越多,模型就越懂你嗎?本文將深入探討一個反直覺的觀點:初級的指令設計專注於資訊的堆砌,而高階的…

elasticsearch-集成prometheus監控(k8s)

一. 簡介: 關于elasticsearch的簡介和部署,可以參考單獨的文章elasticsearch基礎概念與集群部署-CSDN博客,這里就不細說了。這里只講講如何在k8s中部署export并基于prometheus做es的指標采集。 二. 實現方式: 首先我們需要先部署…

貪心算法(Greedy Algorithm)詳解

一、什么是貪心算法? 貪心算法是一種算法設計范式,指在解決問題時,依賴于每次選擇最優的局部解,以期最終得到全局最優解。貪心算法的關鍵特點是: 局部最優選擇:每個階段選擇當前看起來最好的選擇&#xff0…

電梯的構造|保養|維修視頻全集_電梯安全與故障救援(課程下載)

課程下載:https://download.csdn.net/download/m0_66047725/91699586 電梯原理與維修視頻教程 相關簡介: 電梯現在運用的非常廣泛,比如大型商場,建筑工地,特別是現在建造的很多高樓、商品房,基本都是安裝了電梯。電梯維保不力是導致電梯運行中安全事故頻發的主要原…

Traefik網關DNS解析超時問題優化

1、背景 在生產環境使用 Traefik 網關時出現了偶發的 DNS 解析超時導致網關與后端服務建立連接異常的情況。通過調用鏈埋點數據觀察發現,該部署環境中 Traefik 的 DNS 解析性能較差,耗時通常在 4ms 以上(正常應該是 1ms 以內) 初…

從0到1掌握 Spring Security(第三篇):三種認證方式,按配置一鍵切換

> 本文是Spring Security系列第三篇,將帶你實現內存、JDBC和自定義三種認證方式的無縫切換,只需修改配置文件即可完成認證策略變更! ## 一、為什么需要多種認證方式? 在軟件開發的不同階段,我們需要不同的認證策略: - **開發階段**:使用內存認證,快速配置測試賬號…

阿里云國際站云防火墻:如何利用阿里云云防火墻實現細粒度的訪問控制?

利用阿里云云防火墻實現細粒度的訪問控制,可以從分層策略、精確匹配、動態調整三個方面著手,讓不同業務、用戶和資源的訪問權限清晰可控。一、明確控制目標業務隔離:不同業務系統、部門或環境(生產/測試)之間互不干擾。…

rom定制系列------小米cc9機型 原生安卓15系統 雙版線刷root 定制修改功能項

小米 9 Lite/CC9 機型代碼;pyxis.搭載驍龍710處理器.適用于以下型號的小米機型:M1904F3BG, M1904F3BC. 刷寫前提; 需要當前機型已經解鎖bl的狀態下進入fast模式刷寫。此機型可以正常官方解鎖與強解bl鎖。效果都是一樣的。在fast模式下裝好聯機驅動。使用官方平臺刷…

解讀60頁全面認識大數據基礎知識培訓【附全文閱讀】

該培訓課件適用于對大數據知識感興趣的初學者、企業管理人員、相關技術從業者等。內容圍繞大數據展開,先介紹其基本概念,包括定義、數據級別、來源、類型、價值挖掘等,還闡述了 5 個 “V” 特征及與傳統數據的區別。接著講述大數據的發展演進,涵蓋國際國內發展歷程、發展階…

Prompt engineering(PE) —— prompt 優化如何進行?

從新手到高手:Prompt最佳實踐全解析 一、引言:開啟 Prompt 的神秘大門在這個人工智能飛速發展的時代,AI 已經悄然融入我們生活的方方面面。你是否有過這樣的經歷: 當你對著智能音箱詢問 “明天天氣如何” 時,它能迅速給…

云服務器的優缺點都有哪些?

云服務器作為一種有著高度靈活性的服務器類型,能夠根據用戶的需求來調整資源,有著很強的優勢,但是云服務器還是有著一定的缺點的,本文就來共同探討一下云服務器的優缺點都有哪些吧!首先,云服務器能根據業務…

宋紅康 JVM 筆記 Day05|運行時數據區內部結構、JVM中的線程說明、程序計數器

一、今日視頻區間 P39-P43 二、一句話總結 運行時數據區內部結構;JVM中的線程說明;程序計數器(PC寄存器); 三、關鍵圖/命令 3.1 運行時數據區內部結構3.2 JVM中的線程說明3.3 程序計數器(PC寄存器&#xff…

Java增強for循環(小白友好版)

前言&#xff1a;為什么需要增強for循環&#xff1f;作為Java初學者&#xff0c;你或許已經學會使用傳統for循環來遍歷數組或集合&#xff1a;for (int i 0; i < array.length; i) {System.out.println(array[i]); }這種寫法需要手動維護索引變量i&#xff0c;對于集合還需…

【OLAP】trino安裝和基本使用

目錄 ?一、概述 1.1Trino不是什么 1.2Trino是什么 二、Trino特點 三、Trino架構 3.1架構和服務節點 3.2Trino數據模型 四、Trino安裝部署 4.1配置JDK 4.2單機版&#xff08;Coordinator和Worker同進程&#xff09; 4.2.1啟動服務 4.2.2下載客戶端 五、配置HTTPS&…

如何寫出更清晰易讀的布爾邏輯判斷?

列編碼技巧和規范&#xff0c;來降低邏輯的“認知負荷”。成功的實踐&#xff0c;必須系統性地涵蓋五大關鍵策略&#xff1a;采用有意義的變量名進行封裝、將復雜的判斷拆解為獨立的函數、優先使用“肯定式”而非“否定式”邏輯、利用括號明確運算的優先級、以及運用德摩根定律…

新手向:Java方向講解

從諾基亞塞班到阿里雙11&#xff0c;從安卓應用到華爾街交易&#xff0c;Java用一行System.out.println()征服了數字世界1998年&#xff0c;諾基亞在塞班系統上首次采用Java ME技術&#xff0c;讓手機具備了運行應用程序的能力&#xff0c;開啟了移動互聯網的序幕。當時的Java開…

視覺圖像界面設計【QT-creator高級編程 - 01】圖像顯如何保證跟隨主窗口變化,且保留必要的設定窗口

前言&#xff1a;問題&#xff0c;顯示圖像的時候&#xff0c;按最大窗口&#xff0c;圖片窗口不跟著變大&#xff0c;還有&#xff0c;右邊那些設置控件都沒有動解決&#xff1a;步驟1&#xff1a;1?? 讓 graphicsView 自動占滿在 Qt Creator 中選中 graphicsView_7 / 12 / …

pair之于vector、queue(vector<pair<int,int>>)

1、vector&#xff1c;pair&#xff1c;int,int&#xff1e;&#xff1e; 和 Map 的異同點map&#xff1a;會對插入的元素按鍵Key&#xff0c;自動排序&#xff0c;而且鍵Key不允許重復&#xff1b;vector&#xff1a;的這種用法不會自動排序&#xff0c;而且允許重復。2、queu…

從合規到卓越:全星QMS如何成為制造企業的質量戰略引擎

從合規到卓越&#xff1a;全星質量管理QMS軟件系統如何成為制造企業的質量戰略引擎 全星質量管理QMS軟件系統憑借其高度定制化、智能化、全流程覆蓋等核心優勢&#xff0c;已在汽車制造、電子、醫療、航空航天等多個高端制造領域實現領先性應用&#xff0c;顯著提升了企業的質…

按鍵及消抖

方法一&#xff1a;延時阻塞key.c:#include "key.h" #include "delay.h"//初始化GPIO void key_init(void) {GPIO_InitTypeDef gpio_initstruct;//打開時鐘__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA時鐘//調用GPIO初始化函數…