当前位置: 首页 > article >正文

Haproxy入门学习二

一、Haproxy的算法

        1.haproxy通过固定参数balance指明对后端服务器的调度算法,其中balance参数可以配置在listen或backend选项中

        2.haproxy的调度算法分为静态和动态调度算法,其中有些算法可以根据参数在静态和动态算法中相互转换

        3.静态算法:

                按照事先定义好的规则轮询公平调度不关心后端服务器的当前负载、连接数和响应速度等并且不可以实时修改权重,只能靠重启haproxy生效

                static-rr:基于权重的轮询调度

                        不支持运行时利用socat进行权重的动态调整

                        不支持服务器慢启动

                        其后端主机数量没有限制,相当于lvs中的wrr

                慢启动是指在服务器刚刚启动上不会把它所应该承担的访问压力全部给它,即先给一部分后再给一部分

                listen webserver_80

                        bind  172.25.254.100:80

                        mode  http

                        balance  static-rr

                        server  webserver1  192.168.0.101:80  weight  2 check  inter  3s  fall  3  rise  5

                        server  webserver2  192.168.0.102:80   weight  2 check inter  3s  fall  3  rise  5

                first:根据服务器在列表中的位置自上而下进行调度

                        其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务器

                        其会忽略服务器的权重设置

                        不支持用socat进行动态修改权重 

                listen webserver_80

                        bind  172.25.254.100:80

                        mode  http

                        balance  first

                        server  webserver1  192.168.0.101:80  maxconn  3 check  inter  3s  fall  3  rise  5

                        server  webserver2  192.168.0.102:80  check inter  3s  fall  3  rise  5

        4.动态算法

                基于后端服务器的状态进行适当的调整

                新请求将优先调度至当前负载较低的服务器

                权重可以在haproxy运行时动态调整

                        roundrobin:

                                基于权重的轮询动态调度算法

                                支持权重的运行时调整

                                haproxy中roundrobin支持慢启动

                                每个后端对多支持4095个real server

                                该调度算法为默认调度算法                   

                                listen webserver_80

                                        bind  172.25.254.100:80

                                        mode  http

                                        balance  roundrobin

                                        server  webserver1  192.168.0.101:80  weight  1 check  inter  3s  fall  3  rise  5

                                        server  webserver2  192.168.0.102:80   weight  1 check inter  3s  fall  3  rise  5

                        动态调整权重

                        

                        leastconn:加权最少连接的动态

                                支持权重的运行时调整和慢启动,根据当前最少的后端服务器而非权重进行优先调度并且支持长连接的使用场景使用

                                listen webserver_80

                                        bind  172.25.254.100:80

                                        mode  http

                                        balance  leastconn

                                        server  webserver1  192.168.0.101:80  weight  1 check  inter  3s  fall  3  rise  5

                                        server  webserver2  192.168.0.102:80   weight  1 check inter  3s  fall  3  rise  5

                4.其他算法

                        source(源地址hash并将请求转发到后端服务器,之后同一个源地址请求将被转发到同一个后端web服务器)

                        map-base取模法:对source地址进行hash计算再基于服务器总权重取模,缺点是当服务器的总权重发生变化时有服务器上线或下线都会因总权重发生变化而导致调度结果的整体改变

                        一致性hash:当服务器的总权重发生变化时对调度结果的影响时局部的,不会引起大的变动

                        uri:基于对用户请求的url的左半部分或整个uri做hash,再将hash结果对总权重进行取模后根据最终结果将请求转发到后端指定的服务器

                        url_param:对用户请求的url中的params部分中的一个参数key对应的value值做hash计算,并由总权重相除以后派发给某个服务器,后端搜索同一个数据会被调度到同一个服务器

                        hdr:针对用户http头部请求中的指定信息做hash,一般由name指定的http首部将会被取出来做hash运算,如果无有效值,则默认使用轮询调度

                上述这些算法的动态和静态取决于hash_type是否为consistent


http://www.kler.cn/a/525639.html

相关文章:

  • SSM-MyBatis-总结
  • C++ ——— 仿函数
  • 2025春招 SpringCloud 面试题汇总
  • 如何解决跨浏览器兼容性问题
  • java多线程学习笔记
  • 【某大厂一面】数组和链表区别
  • DeepSeek 模型全览:探索不同类别的模型
  • 字符串,集合
  • MySQL数据库(二)
  • redis数据安全与性能保障
  • .gitignore 文件的使用
  • Windows平台免费艺术签名设计工具:一键生成书法级个性签名
  • AIGC时代的Vue或React前端开发
  • 搜索与图论复习1
  • Hive详细讲解-概述与环境搭建
  • 代码随想录算法训练营第三十九天-动态规划-213. 打家劫舍 II
  • Unity实现按键设置功能代码
  • 分享|通过Self-Instruct框架将语言模型与自生成指令对齐
  • 为大模型提供webui界面的利器:Open WebUI 完全本地离线部署deepseek r1
  • 【memgpt】letta 课程6:代理RAG和外部内存
  • 130周四复盘(162)研究神作
  • Qt u盘自动升级软件
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》036-案例:实现支持搜索和筛选的用户列表
  • 【某大厂一面】JDK1.8中对HashMap数据结构进行了哪些优化
  • 手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion(代码)
  • Kafka常见问题之 org.apache.kafka.common.errors.RecordTooLargeException