小白成長之路-haproxy負載均衡

文章目錄

  • 一、概述
      • 1、HAProxy簡介
      • 2、HAProxy特點和優點:
      • 3、HAProxy保持會話的三種解決方法
      • 4、HAProxy的balance 8種負載均衡算法
        • 1)RR(Round Robin)
        • 2)LC(Least Connections)
        • 3)SH(Source Hashing)
        • 4)uri(資源標識符)
        • 5)url\_param(資源定位符)
        • 6)rdp—cookie(name)
        • 7) source
        • 8) static-rr
      • 5、HAProxy 主要工作模式
  • 二、haproxy 負載均衡(基于nginx)
  • 三、KHN Triad
  • 總結


一、概述

1、HAProxy簡介

官網:http://www.haproxy.com

HAProxy 是法國人Willy Tarreau開發的一個開源軟件,是一款應對客戶端10000以上的同時連接的高性能的TCP和 HTTP負載均衡器。其功能是用來提供基于cookie的持久性, 基于內容的交換,過載保護的高級流量管制,自動故障切換 ,以正則表達式為基礎的標題控制運行時間,基于Web的報表,高級日志記錄以幫助排除故障的應用或網絡及其他功能。

HAProxy 提供高可用性、負載均衡以及基于TCP和HTTP的應用代理,支持虛擬主機,它是免費、快速并且可靠的一種負載均衡解決方案。適合處理高負載站點的 七層 數據請求。類似的代理服務可以屏蔽內部真實服務器,防止內部服務器遭受攻擊。

2、HAProxy特點和優點:

  1. 支持原生SSL,同時支持客戶端和服務器的SSL.
  2. 支持IPv6和UNIX套字節(sockets)
  3. 支持HTTP Keep-Alive
  4. 支持HTTP/1.1壓縮,節省寬帶
  5. 支持優化健康檢測機制(SSL、scripted TCP、check agent…)
  6. 支持7層負載均衡。
  7. 可靠性和穩定性非常好。
  8. 并發連接 40000-50000個,單位時間處理最大請求 20000個,最大數據處理10Gbps.
  9. 支持8種負載均衡算法,同時支持session保持。
  10. 支持虛擬主機。
  11. 支持連接拒絕、全透明代理。
  12. 擁有服務器狀態監控頁面。
  13. 支持ACL(access control list)。

3、HAProxy保持會話的三種解決方法

HAProxy為了讓同一客戶端訪問服務器可以保持會話。有三種解決方法:客戶端IP、Cookie以及Session。

  1. 通過 客戶端IP 進行Hash計算并保存,以此確保當相同IP訪問代理服務器可以轉發給固定的真實服務器。

  2. 依靠真實服務器發送客戶端的 Cookie信息 進行會話保持。

  3. 將保存真實服務器的 Session 以及服務器標識 ,實現會話保持。

    (HAProxy只要求后端服務器能夠在網絡聯通,也沒有像LVS那樣繁瑣的ARP配置)

4、HAProxy的balance 8種負載均衡算法

1)RR(Round Robin)

RR算法是最簡單最常用的一種算法,即輪詢調度

理解舉例:有三個節點A、B、C

第一個用戶訪問會被指派到節點A

第二個用戶訪問會被指派到節點B

第三個用戶訪問會被指派到節點C

第四個用戶訪問繼續指派到節點A,輪詢分配訪問請求實現負載均衡效果

2)LC(Least Connections)

最小連接數算法,根據后端的節點連接數大小動態分配前端請求

理解舉例: 有三個節點A、B、C,各節點的連接數分別為A:4 B:5 C:6

第一個用戶連接請求,會被指派到A上,連接數變為A:5 B:5 C:6

第二個用戶請求會繼續分配到A上,連接數變為A:6 B:5 C:6;再有新的請求會分配給B,每次將新的請求指派給連接數最小的客戶端

由于實際情況下A、B、C的連接數會動態釋放,很難會出現一樣連接數的情況

此算法相比較rr算法有很大改進,是米錢用到比較多的一種算法

3)SH(Source Hashing)

基于來源訪問調度算法,用于一些有Session會話記錄在服務端的場景,可以基于來源的IP、Cookie等做集群調度

理解舉例 有三個節點A、B、C,第一個用戶第一次訪問被指派到了A,第二個用戶第一次訪問被指派到了B

當第一個用戶第二次訪問時會被繼續指派到A,第二個用戶第二次訪問時依舊會被指派到B,只要負載均衡器不重啟,第一個用戶都會被指派到A,第二個用戶訪問都會被指派到B,實現集群的調度

此調度算法好處是實現會話保持,但某些IP訪問量非常大時會引起負載不均衡,部分節點訪問量超大,影響業務使用

4)uri(資源標識符)

表示根據請求的URI,做cdn(內容分發網絡)需使用

5)url_param(資源定位符)

表示根據HTTP請求頭來鎖定每 一 次HTTP請求。

6)rdp—cookie(name)

表示根據據cookie (name)來鎖定并哈希每一次TCP請求。

7) source

表示根據請求的源IP,類似Nginx的IP hash機制。

8) static-rr

表示根據權重,輪詢

5、HAProxy 主要工作模式

tcp模式:在客戶端和服務器之間將建立一個全雙工的連接,且不會對7層的報文做任何處理的簡單模式。 通常用于SSL、SSH、SMTP等應用層。

http模式(一般使用):客戶端請求在轉發給后端服務器之前會被深度分析,所有不與RFC格式兼容的請求都會被拒絕。

二、haproxy 負載均衡(基于nginx)

1.安裝haproxy
2.配置文件

vim /etc/haproxy/haproxy.cfg
配置完后加入

listen stats #定義監控頁面    mode httpoption httplogbind *:1080                   #綁定端口1080    stats refresh 30s             #每30秒更新監控數據    stats uri /stats              #訪問監控頁面的uri    stats realm HAProxy\ Stats    #監控頁面的認證提示    stats auth admin:admin        #監控頁面的用戶名和密碼

在這里插入圖片描述
3.驗證
啟動服務
在這里插入圖片描述
在這里插入圖片描述

輪詢:
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

三、KHN Triad

使用 keepalive 監控 haproxy 實現 nginx 的 負載均衡
1.準備兩臺服務器,修改名稱為kn1,kn2并安裝安裝 keepalive 與 haproxy
2.配置文件
kn1:

vim /etc/keepalived/keepalived.conf

在這里插入圖片描述

vim /etc/haproxy/haproxy.cfg

在這里插入圖片描述

kn2:

vim /etc/keepalived/keepalived.conf

在這里插入圖片描述

vim /etc/haproxy/haproxy.cfg
在這里插入圖片描述

3.腳本編寫
kn1,kn2

cat check_khn_nginx.sh 
#! /bin/bashnumber=$(ps -C haproxy --no-headers | wc -l)
if [$number -eq 0 ];thensystemctl stop keepalivedexit 1else exit 0
fi       
kn1:cat add_dnat.sh 
#!/bin/bash
#將訪問的 192.168.100.3的流量 DNAT 到192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.100:80```bash
kn2:cat add_dnat.sh 
#!/bin/bash
#將訪問的 192.168.100.3的流量 DNAT 到192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.101:80#轉發監控頁面(1080)流量到 192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 1080 -j DNAT --to-destination 192.168.100.101:1080

#轉發監控頁面(1080)流量到 192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 1080 -j DNAT --to-destination 192.168.100.100:1080


```bash
cat remove_dnat.sh 
#!/bin/bash
#清理DNAT規則
iptables -t nat -F

4.啟動服務并驗證
在這里插入圖片描述
在這里插入圖片描述
5.故障模擬
停用kn1的haproxy

在這里插入圖片描述
kn2變成主:
在這里插入圖片描述
依然可以訪問:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

總結

以上就是haproxy負載均衡,希望可以幫助到其他小伙伴們

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

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

相關文章

Kafka 與 RocketMQ 消息確認機制對比分析

目錄 生產者消息確認機制 Kafka 生產者 ACK 機制 RocketMQ 生產者確認機制 消費者消息確認機制 Kafka 消費者確認機制 RocketMQ 消費者確認機制 核心差異對比 選型建議 消息確認機制是分布式消息中間件的核心功能之一,它直接關系到消息傳遞的可靠性和系統性能…

C/C++---rdbuf()函數

在C中,rdbuf() 是I/O流庫中的一個核心成員函數,主要用于訪問和操作流對象的緩沖區。這個函數在底層數據處理、流重定向以及自定義流操作等場景中應用廣泛。下面將從多個方面詳細解析 rdbuf() 函數。 基本概念與函數原型 rdbuf() 是 std::basic_ios 類的成…

【LLM】從零到一構建一個小型LLM--MiniGPT

從零到一構建一個小型LLM (Small Language Model)暫時起名為MiniGPT。這個模型將專注于因果語言建模 (Causal Language Modeling),這是許多現代LLM(如GPT系列)的核心預訓練任務。模型設計: 我們設計的模型是一個僅包含解碼器 (Dec…

網絡安全威脅下的企業困境與破局技術實踐

前言:網絡安全威脅下的企業困境 在數字化轉型的浪潮中,企業對信息技術的依賴程度日益加深,但隨之而來的網絡安全威脅也愈發嚴峻。據統計,全球每年因網絡安全事件造成的經濟損失高達數萬億美元,其中中小企業更是成為了網…

[RAG system] 信息檢索器 | BM25 Vector | Pickle格式 | HybridRetriever重排序

第六章:信息檢索器 在上一章中,我們成功完成了知識庫攝入流程。這是巨大的進步~ 我們精心準備了文檔"塊"(類似獨立的索引卡),并將其存儲在兩套智能歸檔系統中:向量數據庫(用于基于含…

Android 高通平臺修改音頻參數效果文件-優化音頻效果

Android 高通平臺如何音頻效果 修改音頻參數效果文件-優化音頻效果 按如下方式修改。 開發云 - 一站式云服務平臺 diff --git a/vendor/qcom/proprietary/mm-audio/audcal/family-b/acdbdata//MTP/workspaceFile.qwsp b/vendor/qcom/proprietary/mm-audio/audcal/family-b/acdb…

Install Docker Engine on UbuntuMySQL

Install Docker Engine on Ubuntu&&MySQL安裝docker安裝mysql客戶端連接數據庫我真氣鼠了,今天得到一個血淚的教訓,以后一定看官方文檔!!!學的課用的centos,指令全是yum,我這邊不通用&a…

智能人體感應模塊HC-SR501應用指南---使用esp32

人體熱釋電探頭紅外感應模塊 人體感應開關HC-SR501藍板新款 綠板-淘寶網 HC-SR501 人體紅外感應電子模塊傳感器熱釋電探頭感應開關RD-624-tmall.com天貓 模塊信息 HC-SR501人體感應開關是一種基于紅外線技術的自動控制模塊,廣泛應用于安防、智能家居和自動控制等領…

加速度傳感器方向校準方法

保持平板平放在桌面上,將后置攝像頭保持在平板的左上后方,或者右上后方,此為機器的正方向 1、以一臺重力方向正常的機器做測試,通過DeviceInfoHw這個軟件的加速度測試功能【Accelerometer Test】我們可以知道 X方向數據測試&#…

【OpenHarmonyOS應用開發】

OpenHarmonyOS應用開發1.OpenHarmonyOS應用開發環境安裝2.初始化項目3.連接潤和軟件的開發板套件1.OpenHarmonyOS應用開發環境安裝 進入HarmonyOS下載鴻蒙應用開發工具DevEco Studio 5.0.7.200版本。 雙擊打開下載好的可執行文件,點擊下一步。 如果已經安裝過&am…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | AutoTextEffect(自動打字機)

📅 我們繼續 50 個小項目挑戰!—— AutoTextEffect組件 倉庫地址:https://github.com/SunACong/50-vue-projects 項目預覽地址:https://50-vue-projects.vercel.app/。 利用 Vue 3 的 Composition API 和一些簡單的 CSS 動畫來構…

[RAG] LLM 交互層 | 適配器模式 | 文檔解析器(`docling`庫, CNN, OCR, OpenCV)

第二章:LLM 交互層 在上一章中,我們學習了作為"項目總控"的管道協調器,它負責協調 RAG 系統中各個功能模塊。 其中最重要的協調對象之一,便是負責與大型語言模型(LLM)進行智能交互的LLM 交互層…

Golang 并發快速上手

文章目錄1. 為什么要用協程?1.1 進程與線程1.2 協程1.3 線程和協程的區別線程協程1.4 Go 協程(goroutines)和協程(coroutines)2.Go 協程基本內容2.1 channel2.2 select2.3 future 模式3. 實踐示例3.1 并發處理多個網絡…

ESP32輕松實現UDP無線通信

ESP32支持UDP通信,這是一種輕量級、高效的通信協議,適用于需要快速數據傳輸但對數據可靠性要求不高的場景。以下是關于ESP32如何實現UDP通信的詳細說明: 1. UDP協議簡介及其適用場景 UDP(用戶數據報協議)是一種無連接的…

Electron實現“僅首次運行時創建SQLite數據庫”

在桌面應用中,SQLite因其輕量、嵌入式特性成為本地存儲的熱門選擇。但若重復初始化數據庫,會導致數據覆蓋或冗余。本文將詳解如何讓Electron應用僅在首次啟動時創建SQLite數據庫,后續啟動直接連接現有庫。一、核心邏輯與實現原理 核心思路&am…

阿里開源AI大模型ThinkSound如何為視頻配上靈魂之聲

目錄 前言 一、當AI解決視頻配音的困境 二、引入“思維鏈”:讓AI像專業音效師一樣思考 三、背后的技術支撐 四、未來ThinkSound會如何改變我們的世界? 總結 🎬 攻城獅7號:個人主頁 🔥 個人專欄:《AI前沿技術要聞…

圖論(1):多叉樹

多叉樹一、基礎知識1. 圖 & 樹2. 模板2.1 建圖二、簡單循環1. 【模板】樹的路徑求和2. 道路修建(改)3. 聯合權值4. 毛毛蟲樹三、自頂向下/自底向上1. 醫療中心2. 【模板】樹的直徑3. 【模板】最大子樹和4. 信號放大器一、基礎知識 1. 圖 & 樹 …

樓宇自動化:Modbus 在暖通空調(HVAC)中的節能控制(一)

引言**在當今的建筑領域,樓宇自動化正扮演著愈發關鍵的角色,它致力于提升建筑的舒適度、安全性以及能源效率。而暖通空調(HVAC)系統作為樓宇自動化中的核心部分,其能耗在整個建筑能耗中占比相當高,據相關數…

【SpringBoot】注冊條件+自動配置原理+自定義starter

注冊條件注入到容器內實體類型對象的屬性都是null,這些對象并沒有什么實際的意義,因為實體類的對象就是來封裝對象的,結果你這些對象中什么都沒有;解決方法是1.給這些屬性賦值然后再注入bean但是這些屬性又是固定的不是很好&#…

Server reports Content-Length Mismatch 的根源與解決方案

“服務器聲明604字節,Yum卻期待28680字節”——當包管理器與倉庫服務器之間的信任崩塌時,會發生什么?問題重現 yum install package_name ... Interrupted by header callback: Server reports Content-Length: 604 but expected size is: 28…