@HAProxy 介紹部署使用

文章目錄

      • **1. HAProxy 簡介**
        • **1.1 什么是 HAProxy?**
        • **1.2 核心特性**
        • **1.3 關鍵術語**
      • **2. 安裝 HAProxy**
        • **2.1 在 Ubuntu/Debian 上安裝**
        • **2.2 在 CentOS/RHEL/Rocky Linux/AlmaLinux 上安裝**
      • **3. 配置與使用**
        • **3.1 核心配置文件結構**
        • **3.2 基礎配置示例:HTTP負載均衡**
        • **3.3 進階配置:基于URL路徑的分流(ACL)**
        • **3.4 配置SSL終止**
      • **4. 日常操作與監控**
        • **4.1 服務管理**
        • **4.2 日志**
        • **4.3 使用Socket進行運行時管理**
      • **5. 故障排除**

1. HAProxy 簡介

1.1 什么是 HAProxy?

HAProxy(High Availability Proxy)是一個開源、高性能的TCP/HTTP 負載均衡器代理服務器。它被廣泛用于將網絡流量分發到多個后端服務器(如Web服務器、數據庫服務器),以此提高應用程序的可用性、可靠性和可擴展性。

1.2 核心特性
  • 高性能: 采用事件驅動、單線程模型(非阻塞I/O),即使在極高并發連接下也能保持極低的資源消耗。
  • TCP & HTTP 支持: 既可以在第4層(傳輸層,TCP)進行負載均衡,也可以在第7層(應用層,HTTP)進行更智能的流量分發。
  • 健康檢查: 持續監控后端服務器的健康狀況,自動從集群中移除故障服務器,并在其恢復后重新加入。
  • 會話保持: 支持多種方式(如Cookie插入)將特定客戶端的請求始終轉發到同一臺后端服務器。
  • SSL/TLS 終止: 可以在HAProxy處解密HTTPS流量,然后將明文的HTTP請求轉發給后端服務器,減輕后端服務器的計算壓力。
  • 精細的日志記錄: 提供詳細的日志,便于監控和故障排除。
  • 動態配置: 支持運行時通過Socket API動態更新部分配置,而無需重啟服務,避免連接中斷。
  • 高可用性: 常與Keepalived等工具結合,實現HAProxy自身的主動-被動高可用集群。
1.3 關鍵術語
  • 前端(Frontend): 定義HAProxy監聽的IP地址、端口以及如何處理傳入的客戶端請求。
  • 后端(Backend): 定義一組接收流量的后端服務器(稱為“Server”或“Backend Server”)以及使用的負載均衡算法。
  • 監聽器(Listener): 前端中具體的IP:端口綁定。
  • 服務器(Server): 后端集群中一個具體的、提供服務的實例(如 192.168.1.10:8080)。
  • 負載均衡算法: 決定如何選擇后端服務器的規則,常見的有 roundrobin(輪詢)、leastconn(最小連接數)、source(源IP哈希)等。
  • ACL(訪問控制列表): 用于對請求進行條件測試(如匹配URL路徑、主機頭),從而做出更智能的轉發決策。
  • Stick Table: 用于跟蹤和存儲客戶端會話信息,實現會話保持。

2. 安裝 HAProxy

以下是在主流Linux發行版上的安裝步驟。

2.1 在 Ubuntu/Debian 上安裝
# 1. 更新軟件包列表
sudo apt update# 2. 安裝 HAProxy
sudo apt install -y haproxy# 3. 驗證安裝版本
haproxy -v# 4. 啟動服務并設置為開機自啟 (安裝后默認未啟動)
sudo systemctl enable --now haproxy# 5. 檢查服務狀態
sudo systemctl status haproxy
2.2 在 CentOS/RHEL/Rocky Linux/AlmaLinux 上安裝

對于較老的CentOS/RHEL 7/8,默認倉庫的版本可能較舊。建議啟用EPEL倉庫。

# CentOS/RHEL 7/8/9 (啟用EPEL)
sudo yum install -y epel-release# 或者 Rocky Linux/AlmaLinux 9
sudo dnf install -y epel-release# 安裝 HAProxy
sudo yum install -y haproxy  # CentOS 7/8
# 或者
sudo dnf install -y haproxy  # CentOS/Rocky/AlmaLinux 9# 啟動并啟用服務
sudo systemctl enable --now haproxy
sudo systemctl status haproxy

注意: 如果需要最新版本,通常需要從官方源碼編譯或使用第三方倉庫(如Software Collections)。


3. 配置與使用

3.1 核心配置文件結構

HAProxy的主配置文件通常是 /etc/haproxy/haproxy.cfg。它主要分為以下幾個部分:

  • global: 全局設置,如進程、安全、性能調優參數。
  • defaults: 為后續的 frontendbackend 塊提供默認值。
  • frontend: 定義如何接收客戶端請求。
  • backend: 定義將請求轉發到哪些服務器。
  • listen:frontendbackend 功能結合在一起的簡化配置塊。
3.2 基礎配置示例:HTTP負載均衡

讓我們配置一個最簡單的HTTP負載均衡器,將80端口的流量輪詢分發到兩個Web服務器。

  1. 備份原始配置

    sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
    
  2. 編輯配置文件

    sudo vim /etc/haproxy/haproxy.cfg
    
  3. 清空文件并寫入以下內容

    globallog /dev/log local0   # 使用本地syslog的local0設備記錄日志maxconn 4000          # 每個進程的最大連接數user haproxy          # 運行進程的用戶和組group haproxydaemon                # 以守護進程方式運行defaultsmode http             # 默認模式為HTTPlog global            # 繼承global中的日志設置option httplog        # 記錄詳細的HTTP日志option dontlognull    # 不記錄空連接timeout connect 5000ms # 連接后端服務器的超時時間timeout client 50000ms # 客戶端不活動超時時間timeout server 50000ms # 后端服務器響應超時時間# 定義一個前端,監聽80端口
    frontend http_frontbind *:80             # 監聽所有IPv4地址的80端口default_backend http_back # 默認將所有流量轉發到‘http_back’后端# 定義后端服務器組
    backend http_backbalance roundrobin    # 使用輪詢算法server web1 192.168.1.10:80 check  # 'check'啟用健康檢查server web2 192.168.1.11:80 check# 可選:狀態監控頁面
    listen statsbind *:8404           # 監聽8404端口用于狀態頁面stats uri /haproxy?stats  # 訪問狀態頁面的URIstats realm Haproxy\ Statistics  # 認證域提示stats auth admin:password  # 認證用戶名和密碼stats admin if TRUE    # 如果通過認證,允許管理操作(如禁用服務器)
    
  4. 語法檢查
    HAProxy非常嚴格,配置錯誤會導致啟動失敗。務必在重啟前檢查語法。

    sudo haproxy -f /etc/haproxy/haproxy.cfg -c
    

    輸出 Configuration file is valid 表示成功。

  5. 重啟HAProxy服務

    sudo systemctl restart haproxy
    
  6. 驗證

    • 訪問你的服務器IP(http://your-haproxy-ip),流量會被分發到web1和web2。
    • 訪問狀態頁面(http://your-haproxy-ip:8404/haproxy?stats),用配置的用戶名(admin)和密碼(password)登錄,查看后端服務器狀態和統計信息。
3.3 進階配置:基于URL路徑的分流(ACL)

假設你想將 /api 的請求發送到一組API服務器,其他請求發送到Web服務器。

frontend http_front 部分中添加ACL規則:

frontend http_frontbind *:80# 定義一個ACL規則,匹配路徑以/api開頭acl is_api path_beg /api# 如果匹配is_api規則,使用api_back后端use_backend api_back if is_api# 默認使用web_back后端default_backend web_backbackend web_backbalance roundrobinserver web1 192.168.1.10:80 checkserver web2 192.168.1.11:80 checkbackend api_backbalance roundrobinserver api1 192.168.1.20:8080 checkserver api2 192.168.1.21:8080 check

重載配置(不中斷服務)

sudo systemctl reload haproxy
# 或者
sudo haproxy -f /etc/haproxy/haproxy.cfg -sf $(pidof haproxy)
3.4 配置SSL終止
  1. 將你的SSL證書(PEM格式)合并。 通常需要將證書文件、中間證書和私鑰合并到一個.pem文件中。

    cat yourdomain.crt yourdomain.key > /etc/haproxy/yourdomain.pem
    chmod 600 /etc/haproxy/yourdomain.pem
    chown haproxy:haproxy /etc/haproxy/yourdomain.pem
    
  2. 修改前端配置

    frontend https_frontbind *:443 ssl crt /etc/haproxy/yourdomain.pem# 可選:強制重定向HTTP到HTTPS# redirect scheme https code 301 if !{ ssl_fc }default_backend http_back
    

4. 日常操作與監控

4.1 服務管理
# 啟動
sudo systemctl start haproxy
# 停止
sudo systemctl stop haproxy
# 重啟 (會中斷連接)
sudo systemctl restart haproxy
# 重載配置 (平滑重啟,不中斷連接)
sudo systemctl reload haproxy
# 查看狀態
sudo systemctl status haproxy
4.2 日志

HAProxy日志默認不輸出到文件。需要配置rsyslog。

  1. 編輯 /etc/rsyslog.d/99-haproxy.conf
    local0.* /var/log/haproxy.log
    
  2. 重啟rsyslog和haproxy
    sudo systemctl restart rsyslog
    sudo systemctl restart haproxy
    
  3. 查看日志
    tail -f /var/log/haproxy.log
    
4.3 使用Socket進行運行時管理

配置文件中的 stats socket 選項啟用了強大的運行時管理功能。

  1. global 部分添加:

    global...stats socket /run/haproxy/admin.sock mode 660 level admin
    
  2. 使用 socathaproxy-apt 工具管理

    # 查看幫助
    echo "help" | sudo socat stdio /run/haproxy/admin.sock
    # 禁用后端服務器
    echo "disable server http_back/web1" | sudo socat stdio /run/haproxy/admin.sock
    # 啟用后端服務器
    echo "enable server http_back/web1" | sudo socat stdio /run/haproxy/admin.sock
    # 顯示狀態信息
    echo "show info" | sudo socat stdio /run/haproxy/admin.sock
    echo "show stat" | sudo socat stdio /run/haproxy/admin.sock
    

5. 故障排除

  1. 配置文件語法檢查: sudo haproxy -f /etc/haproxy/haproxy.cfg -c
  2. 查看系統日志: journalctl -u haproxy
  3. 查看HAProxy日志: tail -f /var/log/haproxy.log
  4. 檢查端口監聽狀態: ss -tlnp | grep haproxy
  5. 檢查防火墻規則: sudo iptables -L -nsudo firewall-cmd --list-all

HAProxy是一個強大而靈活的工具,是構建現代、高可用性應用架構的基石。本SOP提供了從入門到進階的指導。要掌握HAProxy,請務必閱讀其官方文檔(https://www.haproxy.org/),其中包含了所有配置指令的詳細說明和更多高級用例。

安全提示: 在生產環境中,請務必使用強密碼保護狀態頁面,并謹慎管理Socket接口的訪問權限。

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

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

相關文章

Two-Twer模型做歌曲智能推薦與規則算法對比的優缺點分析

基于規則與機器學習驅動的音樂推薦:核心差異分析1.推薦精度2. 個性化能力3. 模型適應性(潛在特征關聯發現)4. 可擴展性與復雜性成本5. 冷啟動/數據稀疏階段表現6. 聽感匹配與主觀反饋1.推薦精度 規則推薦: 依賴預設的 if-then 邏…

【完整源碼+數據集+部署教程】停車位狀態檢測系統源碼和數據集:改進yolo11-DCNV2-Dynamic

背景意義 隨著城市化進程的加快,城市交通擁堵問題日益嚴重,停車難成為了許多城市居民面臨的普遍問題。有效的停車管理不僅可以提高城市交通的流動性,還能減少因尋找停車位而造成的時間浪費和環境污染。因此,開發一個高效的停車位狀…

《Password Guessing Using Random Forest》論文解讀

論文填補了傳統統計方法(如 PCFG、Markov)與深度學習方法(如 LSTM、GAN)之間的研究空白,提出基于隨機森林的口令猜測框架 RFGuess,覆蓋三種核心猜測場景,為口令安全研究提供了全新技術路線。一、…

項目一系列-第9章 集成AI千帆大模型

第9章 集成AI千帆大模型 學習目標 能夠說清楚健康評估模塊在項目中的作用能夠掌握千帆大模型的開通和對接能夠掌握健康評估模塊中的prompt提示詞編寫能夠自主完成健康評估模塊的接口開發 分析設計 需求說明 健康評估是指老人辦理入住前需上傳體檢報告,由AI自動…

vben admin5組件文檔(豆包版)---VbenTree

VbenTree 用法說明 VbenTree 是 Vben5 中基于 radix-vue 實現的樹形組件,支持單選、多選、展開/折疊、權限控制等功能。以下是其核心用法說明: 1. 基礎引入 import { VbenTree } from vben-core/shadcn-ui;2. 核心屬性(Props)屬性…

postman常用快捷鍵

作為一名IT程序猿,不懂一些工具的快捷方式,應該會被鄙視的吧。收集了一些Postman的快捷方式,大家一起動手操作~ 1小時postman接口測試從入門到精通教程簡單操作 操作mac系統windows系統 打開新標簽 ?TCtrl T關閉標簽?WCtrl W強制關閉標簽…

【物聯網】什么是 DHT11(數字溫濕度傳感器)?

正面照片(藍色傳感器朝上,針腳朝下) 絲印標注非常清晰: 左邊 → S 👉 信號 (DATA) 中間 → 👉 VCC (電源,3.3V 或 5V) 右邊 → - 👉 GND (地) ? 正確接法(Arduino Nano…

光譜相機在霧霾監測中有何優勢?

光譜相機在霧霾監測中的優勢主要體現在多維度數據采集和環境適應性方面,結合最新技術進展分析如下:一、核心優勢?穿透性監測能力? 短波紅外(SWIR)波段可穿透霧霾顆粒,結合可見光成像實現霧霾濃度與能見度的同步監測&…

【c++】超好玩游戲

#include <iostream> #include <vector> #include <conio.h> #include <windows.h> #include <time.h>using namespace std;// 游戲常量 const int WIDTH 40; const int HEIGHT 20; const int PADDLE_WIDTH 5;// 方向枚舉 enum Direction { S…

GitHub 熱榜項目 - 日榜(2025-08-27)

GitHub 熱榜項目 - 日榜(2025-08-27) 生成于&#xff1a;2025-08-27 統計摘要 共發現熱門項目&#xff1a;15 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜呈現出三大技術趨勢&#xff1a;1. AI生產力工具持續升溫&#xff1a;系統提示詞泄露庫、DeepCode…

基于Springboot + vue3實現的學校學報出版發行管理系統

項目描述本系統包含管理員和用戶兩個角色。管理員角色&#xff1a;用戶管理&#xff1a;管理系統中所有用戶的信息&#xff0c;包括添加、刪除和修改用戶。稿件分類管理&#xff1a;管理稿件分類信息&#xff0c;包括新增、查看、修改和刪除稿件分類。新聞資訊管理&#xff1a;…

【Keil5教程及技巧】耗時一周精心整理萬字全網最全Keil5(MDK-ARM)功能詳細介紹【建議收藏-細細品嘗】

&#x1f48c; 所屬專欄&#xff1a;【單片機開發軟件技巧】 &#x1f600; 作??者&#xff1a; 于曉超 &#x1f680; 個人簡介&#xff1a;嵌入式工程師&#xff0c;專注嵌入式領域基礎和實戰分享 &#xff0c;歡迎咨詢&#xff01; &#x1f496; 歡迎大家&#xff1…

國家育兒補貼政策遭利用,黑產組織借機竊取敏感數據

組織概況與作案手法近期網絡安全領域出現了一個高度組織化的犯罪集團UTG-Q-1000&#xff0c;該組織通過利用中國國家育兒補貼政策實施大規模金融詐騙和數據竊取活動。這個結構嚴密的犯罪網絡下設多個專業部門&#xff0c;包括財務組、新聞與色情組、設計與制造組以及黑市交易組…

Python Imaging Library (PIL) 全面指南:PIL高級圖像處理-分割與顏色空間轉換

高級圖像處理&#xff1a;PIL中的圖像分割與顏色空間轉換 學習目標 本課程將深入探討PIL&#xff08;Python Imaging Library&#xff09;中的一些高級功能&#xff0c;包括圖像分割和顏色空間轉換。通過本課程的學習&#xff0c;學員將能夠掌握如何使用PIL進行更復雜的圖像處理…

圖解 OAuth,為什么這樣設計?

OAuth 于 2007 年首次推出。它最初由 Twitter 創建&#xff0c;因為 Twitter 希望能夠允許第三方應用代表用戶發布推文。想象一下&#xff0c;如果今天設計類似的應用&#xff0c;你會怎么做&#xff1f;一種方法是直接要求用戶輸入用戶名和密碼。因此&#xff0c;你創建一個非…

WeakAuras Lua Script ICC (BarneyICC) Simplified Chinese [Mini]

WeakAuras Lua Script ICC &#xff08;BarneyICC&#xff09; Simplified Chinese [Mini] ICC 迷你版本會打了只需要團隊框體高亮提示即可&#xff0c;因為有DBM&#xff0c;就不需要那么多了 !WA:2!S3xc4XrXzI6wkSjzcVSyb4aoKWGaC04ijMdPrsoit0OdRXwxmsYgmWoNTup4rZ0UNr2sKL…

mcp學習

mcp學習 預算&#xff1a;5塊(半頓拼好飯嗚嗚嗚) 出問題試著開啟或者關閉代理。 文章目錄mcp學習1. 基本原理2. 環境配置1. cherryStudiodeepseekpython2. Clinedeepseek3. 常用mcp服務1. mcp-server-fetch2. mcp-playwright3. baidu-map4. filesystem5. mcp-mysql-server參考…

Rust:所有權

Rust&#xff1a;所有權拷貝 & 移動堆棧拷貝移動克隆所有權變量的初始權限指針的雙重權限權限的動態變化引用賦值重新借用函數調用時的權限移動拷貝借用不可變借用可變借用復合類型的權限結構體元組數組傳統語言的內存管理要么依賴程序員手動管理&#xff08;C/C&#xff0…

Elasticsearch數據遷移快照方案初探(二):快照創建與多節點存儲問題解決

快照倉庫創建成功 經過前面的配置修改&#xff0c;我們成功創建了快照倉庫&#xff1a; curl -X PUT "https://[ES_HOST]:9200/_snapshot/backup_repo" \-H "Content-Type: application/json" \-u "[USERNAME]:[PASSWORD]" \-k \-d {"type&…

DeepSeek大模型風靡云平臺,百度智能云、阿里云、騰訊云等多個平臺宣布上線DeepSeek模型

近日&#xff0c;百度智能云、華為云、阿里云、騰訊云、360數字安全、云軸科技等多個平臺紛紛宣布上線DeepSeek大模型&#xff0c;這一消息無疑為AI開發者和企業用戶帶來了全新的機遇和選擇。本文將探討DeepSeek大模型上線的背景、意義以及未來的發展趨勢。 首先&#xff0c;我…