Haproxy調度算法 - 靜態算法介紹與使用

文章目錄

  • 一、概述
  • 二、socat工具
  • 三、static-rr
  • 四、first

HAProxy通過固定參數 balance 指明對后端服務器的調度算法,該參數可以配置在listen或backend選項中。
HAProxy的調度算法分為靜態和動態調度算法,但是有些算法可以根據參數在靜態和動態算法中相互轉換。
官方文檔: http://cbonte.github.io/haproxy-dconv/2.4/configuration.html#4-balance

一、概述

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

二、socat工具

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

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

[root@centos7 ~]# yum install -y socat#查看幫助
[root@centos7 ~]# socat -h
[root@centos7 ~]# echo "help" | socat stdio /var/lib/haproxy/haproxy.sock
[root@centos7 ~]#echo "show info" | socat stdio /var/lib/haproxy/haproxy.sock
[root@centos7 ~]#cat /etc/haproxy/haproxy.cfg
......
listen lhl-test-80
bind :81,:82
mode http
server web1 10.0.0.17:80 check inter 3000 fall 3 rise 5
server web2 10.0.0.27:80 check weight 3
......[root@centos7 ~]#echo "show servers state" | socat stdio /var/lib/haproxy/haproxy.sock[root@centos7 ~]#echo "get weight lhl-test-80/web2" | socat stdio /var/lib/haproxy/haproxy.sock
3 (initial 3)#修改weight,注意只針對單進程有效
[root@centos7 ~]#echo "set weight lhl-test-80/web2 2" | socat stdio /var/lib/haproxy/haproxy.sock
[root@centos7 ~]#echo "get weight lhl-test-80/web2" | socat stdio /var/lib/haproxy/haproxy.sock
2 (initial 3)#將后端服務器禁用,注意只針對單進程有效
[root@centos7 ~]#echo "disable server lhl-test-80/web2" | socat stdio /var/lib/haproxy/haproxy.sock#啟用后端服務器
[root@centos7 ~]#echo "enable server lhl-test-80/web2" | socat stdio /var/lib/haproxy/haproxy.sock#將后端服務器軟下線,即weight設為0
[root@centos7 ~]#echo "set weight lhl-test-80/web1 0" | socat stdio /var/lib/haproxy/haproxy.sock#針對haproxy的多進程,將后端服務器禁用
[root@centos7 ~]#vim /etc/haproxy/haproxy.cfg
......
stats socket /var/lib/haproxy/haproxy1.sock mode 600 level admin process 1 #綁定第
1個進程和socket文件
stats socket /var/lib/haproxy/haproxy2.sock mode 600 level admin process 2 #綁定第
2個進程和socket文件
nbproc 2
.....[root@centos7 ~]#echo "disable server lhl-test-80/web2" | socat stdio
/var/lib/haproxy/haproxy1.sock
[root@centos7 ~]#echo "disable server lhl-test-80/web2" | socat stdio
/var/lib/haproxy/haproxy2.sock[root@haproxy ~]#for i in {1..2};do echo "set weight lhl-test-80/web$i 10" | socat stdio /var/lib/haproxy/haproxy$i.sock;done
#如果靜態算法,如:static-rr,可以更改weight為0或1,但不支持動態更改weight為其它值,否則會提示下面信息
[root@centos7 ~]#echo "set weight lhl-test-80/web1 0" | socat stdio /var/lib/haproxy/haproxy.sock[root@centos7 ~]#echo "set weight lhl-test-80/web1 1" | socat stdio /var/lib/haproxy/haproxy.sock
[root@centos7 ~]#echo "set weight lhl-test-80/web1 2" | socat stdio /var/lib/haproxy/haproxy.sock
Backend is using a static LB algorithm and only accepts weights '0%' and '100%'.

例:上線和下線后端服務器腳本

[root@centos7 ~ ]#cat haproxy_host_up_down.sh
. /etc/init.d/functions
case $1 in
up)echo "set weight lhl-m42-web-80/$2 1" | socat stdio /var/lib/haproxy/haproxy.sock[ $? -eq 0 ] && action "$2 is up";;
down)echo "set weight lhl-m42-web-80/$2 0" | socat stdio /var/lib/haproxy/haproxy.sock[ $? -eq 0 ] && action "$2 is down";;
*)echo "Usage: `basename $0` up|down IP";;
esac

三、static-rr

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

listen web_hostbind 10.0.0.7:80,:8801-8810,10.0.0.7:9001-9010mode httplog globalbalance static-rrserver web1 10.0.0.17:80 weight 1 check inter 3000 fall 2 rise 5server web2 10.0.0.27:80 weight 2 check inter 3000 fall 2 rise 5

四、first

first:根據服務器在列表中的位置,自上而下進行調度,但是其只會當第一臺服務器的連接數達到上限,新請求才會分配給下一臺服務,因此會忽略服務器的權重設置,此方式使用較少

不支持用socat進行動態修改權重,可以設置0和1,可以設置其它值但無效

listen web_hostbind 10.0.0.7:80,:8801-8810,10.0.0.7:9001-9010mode httplog globalbalance firstserver web1 10.0.0.17:80 maxconn 2 weight 1 check inter 3000 fall 2 rise 5server web2 10.0.0.27:80 weight 1 check inter 3000 fall 2 rise 5

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

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

相關文章

模擬激光相機工作站版本6.0 5.2.32 6.0.44 6.031 5.2.20

模擬激光相機工作站版本6.0 5.2.32 6.0.44 6.031 5.2.20

AWS Blockchain Templates:快速部署企業級區塊鏈網絡的終極解決方案

無需精通底層架構,一鍵搭建Hyperledger Fabric或以太坊網絡!AWS Blockchain Templates 可幫助您快速基于不同的區塊鏈框架在 AWS 上創建和部署區塊鏈網絡。區塊鏈是一種分布式數據庫技術,用于維護不斷增長的交易記錄和智能合約集合&#xff0…

Vue 服務端渲染 Nuxt 使用詳解

Nuxt 是基于 Vue 的高層框架,專注于服務器端渲染應用開發。它封裝了繁瑣的配置和通用模式,提供了開箱即用的 SSR 功能,使開發者能夠專注于編寫業務邏輯。 1. Nuxt 的核心特性 SSR 支持:默認支持服務端渲染,提高應用性…

使用ACK Serverless容器化部署大語言模型FastChat

核心概念 阿里云ACK Serverless:是一種基于 Kubernetes 的無服務器容器服務。用戶無需管理底層節點和服務器,即可快速部署容器化應用,并根據實際使用的 CPU 和內存資源按需付費,只專注于應用本身而非基礎設施管理。 FastChat&…

最新Android Studio漢化教程--兼容插件包

[ ] 軟件版本:Android Studio Meerkat Feature Drop | 2024.3.2 Build #AI-243.25659.59.2432.13423653, built on April 30, 2025 Runtime version: 21.0.613368085-b895.109 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Toolkit: sun.awt.windows.WT…

Unity_數據持久化_IXmlSerializable接口

Unity數據持久化 三、XML數據持久化 3.5 IXmlSerializable接口 3.5.1 IXmlSerializable接口基礎概念 什么是IXmlSerializable接口: IXmlSerializable 是.NET框架提供的一個接口,允許類自定義XML序列化和反序列化的過程。當默認的XML序列化行為無法滿足需…

如何快速解決PDF解密新方法?

有時從網絡下載的PDF文檔會帶有加密限制,導致無法編輯、復制或打印。它的體積僅約10MB,無需安裝,解壓即用。遇到受限制的文件時,只需將其拖入界面,選擇是否覆蓋原文件,點擊執行,瞬間完成解密。「…

譯|數據驅動智慧供應鏈的構成要素與關聯思考

數據質量,通過識別關鍵決策和瓶頸構建信息供應鏈。該模型適用于優化庫存管理、自動化物流、預測需求、實現產品全生命周期追溯及應對突發風險。例如,通過AI機器人自動管理倉庫,或利用數字孿生模擬和優化全球采購網絡。 匯總來自三篇文章&…

OS21.【Linux】環境變量

目錄 1.與環境變量有關的實驗 A.對比命令和自制程序的運行 為什么.像ls、pwd這樣的命令運行是不需要加路徑? 執行自制程序而不加路徑的方法,看看PATH環境變量 方法1:將自制程序移動到系統的搜索路徑下 方法2:臨時修改PATH環境變量 B.查看系統中所有環境變量 解釋幾個常…

加密流量論文復現:《Detecting DNS over HTTPS based data exfiltration》(上)

本文將以我個人的理解去閱讀該篇流量加密論文,并在下一篇盡力對其中的實驗部分進行復現。話不多說,先從論文開始著手。 內容介紹 傳統的DNS(Domain Name System)協議是以明文傳輸的。DNS作為互聯網的基礎設施,最初設計時主要考慮的是功能和效…

Apache RocketMQ 中Message (消息)的核心概念

好的,我們來深入理解一下 Apache RocketMQ 中 Message (消息) 這個核心概念。這份文檔詳細闡述了消息的定義、在模型中的位置、內部屬性、約束和使用建議。 你可以將 Message 看作是 RocketMQ 系統中數據傳輸和處理的最小原子單位。它承載了業務數據,并附…

C 語言問題

1. C語言中 union 與 struct 的區別類型structunion內存分配機制編譯器為每個成員?獨立分配內存空間,總內存大小 所有成員大小之和(考慮內存對齊)所有成員?共享同一段內存空間,總內存大小 ?最大成員的大小?數據存儲特性1. 所…

[ LeetCode優選算法專題一雙指針-----盛最多的水]

1.題目鏈接 LeetCode盛最多的水 2.題目描述 3.題目解析 問題本質分析 "盛最多水的容器" 問題可以抽象為:在坐標軸上有 n 條垂直線段,第 i 條線段的兩個端點分別是 (i, 0) 和 (i, height [i])。找到兩條線段,使得它們與 x 軸共同…

舊筆記本電腦如何安裝飛牛OS

01引言隨著電子產品的更新換代,我們有很多的電子產品已經滿足不了現在的工作需求和日常娛樂了,比如:用了很久厚重筆記本電腦放在現在辦公也是有點吃力了,我們現在換新了舊的還不想放在那里吃灰,怎么辦呢?我…

某金服Java面試終極指南:25題完整解析與場景化方案

涵蓋分布式鎖、緩存、事務、高并發等金融系統核心考點,附解決方案與抗風險設計一、分布式鎖深度解決方案 1. Redis分布式鎖完整實現 // 原子加鎖 防死鎖 String uuid UUID.randomUUID().toString(); Boolean locked redisTemplate.opsForValue().setIfAbsent(&qu…

MATLAB 2025a的下載以及安裝,安裝X310的測試附加功能(附加安裝包)

首先將安裝包下載到本地中之后解壓該文件夾,打開文件發現有兩個文件,其中crach文件夾中是破解matlab所用到的文件。而另一個壓縮包就是需要安裝的文件,要先解壓在安裝。在安裝之前將網絡斷開,不然可能破解不成功,先進入…

Scala實用編程(附電子書資料)

概述 Scala 是一種多范式編程語言,結合了面向對象編程(OOP)和函數式編程(FP)的特性電子書資料:https://pan.quark.cn/s/88737d4a680d Scala 的核心特點多范式融合 既支持面向對象編程(類、繼承、…

數據結構(8)雙向鏈表

目錄 一、概念與結構 二、雙向鏈表的實現 1、初始化 2、尾插 3、頭插 4、尾刪 5、頭刪 6、在指定位置之后插入結點 7、刪除指定位置的結點 三、完整參考代碼 一、概念與結構 這里的雙向鏈表是指帶頭的的雙向循環鏈表,這里的“帶頭”和之前所說的“頭結…

【DeepSeek-R1 】分詞系統架構解析

文章目錄 ??前言 ?? 1. SentencePiece Unigram 的核心原理 1.1 算法基礎框架 1.2 核心數學原理 1.3 與BPE/WordPiece的對比 ?? 2. DeepSeek-R1 分詞器實現細節 2.1 詞表結構設計 2.2 關鍵特性實現 ?? 3. 性能優化關鍵技術 3.1 加速策略對比 3.2 編碼過程偽代碼 ?? 4.…

Linux自主實現shell

以下是在Linux操作系統 centos7版本下實現的shell &#xff0c;該shell具備bash的基礎功能&#xff0c;無上下鍵輸入歷史命令功能&#xff0c;刪除字符或命令時按住Ctrl Back #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.…