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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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.…