使用Haproxy搭建Web群集

article/2025/8/7 11:26:21

目录

1,Haproxy简介

1,核心功能与特点

二,搭建haproxy群集

1,准备工作

2,修改haproxy的配置文件

3,准备网站

4,配置日志

5,验证

1,Haproxy简介

HAProxy 是一款高性能的 开源负载均衡器 和 反向代理工具,主要用于高可用性架构中分配流量,支持 HTTP、TCP、SSL 等多种协议。它最初由法国工程师 Willy Tarreau 开发,目前由 HAProxy Technologies 维护,广泛应用于 Web 服务、数据库、消息队列等场景。

1,核心功能与特点

  • 支持多种算法:轮询(Round Robin)、最少连接(Least Connections)、源地址哈希(Source Hash)、URI 哈希等,可根据业务需求灵活选择。

  • 动态负载调整:实时监控后端服务器状态,自动剔除故障节点,恢复后重新加入集群,确保高可用性。

  •  反向代理:接收客户端请求并转发至后端服务器集群,隐藏真实服务器地址,增强安全性。

  • 高可用性与可靠性:支持 热更新:无需停机即可更新配置或升级程序,保证服务连续性。

 应用场景

场景说明
Web 服务负载均衡分发 HTTP/HTTPS 请求至多个 Web 服务器,提升吞吐量和容错能力。
数据库读写分离将读请求分配至从库,写请求转发至主库,减轻主库压力。
微服务架构流量管理在微服务集群中作为入口,路由请求至不同服务实例,并实现熔断、限流等功能。
静态资源加速缓存静态文件(如图片、JS),直接返回给客户端,减少后端服务器响应压力。

工作原理

  1. 客户端请求:用户通过域名或 IP 访问 HAProxy 实例。
  2. 规则匹配:HAProxy 根据配置文件(haproxy.cfg)中的规则(如域名、路径、端口)匹配请求。
  3. 负载均衡算法:根据预设算法选择后端服务器(如轮询选择节点)。
  4. 健康检查:检查目标服务器是否可用,不可用则跳过并选择下一个节点。
  5. 转发请求:将请求转发至后端服务器,接收响应后返回给客户端。

2,haproxy的算法分类

  • 轮询(Round Robin):按顺序依次将请求分配给后端服务器,

  •  最少连接(Least Connections):动态将请求分配给当前连接数最少的服务器,平衡负载压力。

  •  源地址哈希(Source IP Hash):根据客户端 IP 地址计算哈希值,将同一客户端的请求固定分配到同一服务器。

  •  URI 哈希(URI Hash):根据请求的 URI(如 https://example.com/api/users)计算哈希值,相同 URI 总是路由到同一服务器。

  • URI 路径哈希(URI Path Hash):仅根据 URI 的路径部分(如 /api/users)计算哈希,忽略查询参数。

  • 权重轮询(Weighted Round Robin):为每个服务器分配权重(如 server web1 192.168.1.10:80 weight 3),按权重比例分发请求。

  • 权重最少连接(Weighted Least Connections):结合权重与连接数,优先分配请求给 “权重 / 连接数” 比值最高的服务器。

HAProxy 的算法选择需结合业务特性、服务器配置和性能需求综合考虑。大多数场景下,roundrobin(轮询)或 leastconn(最少连接)即可满足需求;而对会话保持或缓存优化有特殊要求时,source 或 uri 算法更为合适。合理配置算法能显著提升系统吞吐量和稳定性。

二,搭建haproxy群集

1,准备工作

192.168.10.101haproxy
192.168.10.102服务器01
192.168.10.103服务器02

2,修改haproxy的配置文件

globallog         127.0.0.1 local2chroot      /var/lib/haproxypidfile     /var/run/haproxy.piduser        haproxygroup       haproxydaemonmaxconn     4000defaultsmode                    httplog                     globaloption                  httplogoption                  dontlognullretries                 3timeout http-request    5stimeout queue           1mtimeout connect         5stimeout client          1mtimeout server          1mtimeout http-keep-alive 5stimeout check           5smaxconn                 3000listen hawebbind 0.0.0.0:80balance roundrobinoption httpchk GET /index.htmlserver web1 192.168.10.102:80 check inter 2000 fall 3server web2 192.168.10.103:80 check inter 2000 fall 3

3,准备网站

systemctl stop firewalld 
setenforce 0##准备两台服务器网站
vim /var/www/html/index.html
serever1 102vim /var/www/html/index.html
serever1 103

4,配置日志

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
global                                  #全局log         127.0.0.1 local2        #日志/日志设备log         127.0.0.1 local3	#添加新的日志设备 vim /etc/rsyslog.d/haproxy.conf	#日志路径
$ModLoad imudp
$UDPServerRun 514
local3.* /var/log/haproxy.log
&~  systemctl restart haproxy
systemctl restart rsyslog

5,验证

[root@server1 ~]# curl 192.168.10.101
server1 102
[root@server1 ~]# curl 192.168.10.101
server2 103##查看日志
[root@haproxy /]# cat /var/log/haproxy.log 
May 30 11:36:55 localhost haproxy[5008]: 192.168.10.1:62311 [30/May/2025:11:36:55.457] haweb haweb/web1 0/0/0/0/0 200 238 - - ---- 1/1/0/0/0 0/0 "GET /index.html HTTP/1.1"
May 30 11:36:55 localhost haproxy[5008]: 192.168.10.1:62311 [30/May/2025:11:36:55.609] haweb haweb/web2 0/0/1/0/1 200 238 - - ---- 1/1/0/0/0 0/0 "GET /index.html HTTP/1.1"
May 30 11:36:55 localhost haproxy[5008]: 192.168.10.1:62311 [30/May/2025:11:36:55.756] haweb haweb/web1 0/0/0/1/1 200 238 - - ---- 1/1/0/0/0 0/0 "GET /index.html HTTP/1.1"
May 30 11:36:55 localhost haproxy[5008]: 192.168.10.1:62311 [30/May/2025:11:36:55.901] haweb haweb/web2 0/0/0/1/1 200 238 - - ---- 1/1/0/0/0 0/0 "GET /index.html HTTP/1.1"
May 30 11:36:56 localhost haproxy[5008]: 192.168.10.1:62311 [30/May/2025:11:36:56.034] haweb haweb/web1 0/0/0/0/0 200 238 - - ---- 1/1/0/0/0 0/0 "GET /index.html HTTP/1.1"
May 30 11:47:01 localhost haproxy[5008]: 192.168.10.102:51498 [30/May/2025:11:47:01.945] haweb haweb/web2 0/0/0/1/1 200 238 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1"


http://www.hkcw.cn/article/nCiajkwiMs.shtml

相关文章

Elasticsearch的写入流程介绍

Elasticsearch 的写入流程是一个涉及 分布式协调、分片路由、数据同步和副本更新 的复杂过程,其设计目标是确保数据一致性、可靠性和高性能。以下是写入流程的详细解析: 一、写入流程总览 二、详细步骤解析 1. 客户端请求路由 请求入口:客户端(如 Java 客户端、REST API)…

记录一次apisix上cros配置跨域失败的问题

安全要求不允许跨域请求,但是业务侧由于涉及多个域名,并且需要共享cookie,所以需要配置跨域。 在apisix上配置了cors如下。 结果安全漏扫还是识别到了跨域请求的漏洞。 调试了cors.lua的插件脚本,发现apisix上是如果不在allowOri…

VSCode无法转到定义python源码(ctrl加单击不跳转)

已经尝试的方案: 1.确保对应python环境正确激活 在 VSCode 中,打开命令面板(CtrlShiftP),输入并选择 Python: Select Interpreter,然后从列表中选择正确的 Python 解释器。 2.重新卸载Python插件再重新安装…

会议室钥匙总丢失?换预约功能的智能门锁更安全

在企业日常运营中,会议室作为重要的沟通与协作场所,其管理效率与安全性直接影响着企业的运作顺畅度。然而,传统会议室管理方式中钥匙丢失、管理不便等问题频发,给企业带来了不少困扰。近期,某企业引入了启辰智慧预约系…

漫画Android:事件分发的过程是怎样的?

当用户触摸屏幕时,硬件层会捕获触摸信号,并将其转化为内核事件。 Android系统会通过InputManagerService和WindowManagerService等服务将这些事件包装成MotionEvent对象,并将其传递给Activity的dispatchTouchEvent()方法中,Activi…

【算法提升】分组 day_tow

1.分组 1.1 解析 个人认为这题最难的点在于如何想到使用二分的算法来解题。 正向求解:就是去看每一组中需要分多少个人,但是这样求解代码我根本写不出来。 所以根据正难则反的思想,我们可以从最终结果去倒推。 枚举最终的分配结果中&#xff…

【笔记】Suna 部署之 Supabase 数据库 schema 暴露操作

#工作记录 一、前置信息 在 Suna 部署过程中,Supabase 数据库设置已完成(✅ Supabase database setup completed ),但需要手动在 Supabase 平台暴露basejump模式(schema)。 Suna 部署过程中,S…

【Linux 学习计划】-- 进程状态 | 进程运行、阻塞和挂起的本质 | 并行、并发与进程切换 | 进程优先级

目录 进程状态 五状态进程模型 运行、就绪状态的本质 阻塞状态的本质 挂起状态 并行与并发 进程切换 进程优先级 结语 进程状态 进程状态的本质是什么? 首先我们知道,在操作系统中,进程是需要被管理起来的,具体则是用一…

自证式推理训练:大模型告别第三方打分的新纪元

1. 传统验证体系的困境与技术跃迁的必然性 1.1 传统验证器的局限性 现有强化学习框架依赖显式验证器对答案进行二值化判定,这种模式在数学、代码等可验证领域表现优异。某厂内部数据显示,传统R1-Zero方法在代码生成任务中准确率达92%,但切换…

《操作系统真相还原》——加载器

显存 将上一章的中断输出,变为显存输出 加载器 使用mbr引导程序从磁盘中加载loader程序。 MBR %include "boot.inc" SECTION MBR vstart0x7c00 mov ax,cs mov ds,axmov es,axmov ss,axmov fs,axmov sp,0x7c00mov ax,0xb800mov gs,ax;cl…

Spring Boot 应用中实现配置文件敏感信息加密解密方案

Spring Boot 应用中实现配置文件敏感信息加密解密方案 背景与挑战 🚩一、设计目标 🎯二、整体启动流程 🔄三、方案实现详解 ⚙️3.1 配置解密入口:EnvironmentPostProcessor3.2 通用解密工具类:EncryptionTool 四、快速…

前端实现图片压缩:基于 HTML5 File API 与 Canvas 的完整方案

在 Web 开发中,处理用户上传的图片时,前端压缩可以有效减少服务器压力并提升上传效率。本文将详细讲解如何通过<input type="file">实现图片上传,结合 Canvas 实现图片压缩,并实时展示压缩前后的图片预览和文件大小对比。 一、核心功能架构 我们将实现以…

用wireshark抓了个TCP通讯的包

昨儿个整理了下怎么用wireshark抓包&#xff0c;链接在这里&#xff1a;捋捋wireshark 今天打算抓个TCP通讯的包试试&#xff0c;整体来说比较有收获&#xff0c;给大家汇报一下。 首先就是如何搞到可以用来演示TCP通讯的客户端、服务端&#xff0c;问了下deepseek&#xff0c;…

AWS WAF设置IP白名单

目标 设置一个组白名单IP地址&#xff0c;当发现是这些IP地址发过来的请求后&#xff0c;WAF自动放行。 创建IP集 打开WAF页面&#xff0c;开始IP集创建如下图&#xff1a; 设置ip集&#xff0c;如下图&#xff1a; aws waf acl配置白名单 找到Web ACL&#xff0c;开始在…

随笔20250530 C# 整合 IC卡读写技术解析与实现

以下是一个完整、最简化的 FeliCa 读取整合示例&#xff08;无需 SDK&#xff0c;基于 PCSC NuGet 包&#xff09;&#xff0c;你可以直接运行这个控制台程序&#xff0c;验证能否识别 RC-S300 并读取卡片 UID&#xff1a; &#x1f9ea; 示例说明 &#x1f4e6; 使用 NuGet 包…

day024-网络基础-TCP与UDP、DNS

文章目录 1. 李导推荐书籍2. OSI七层模型2.1 传输层2.2 网络层2.2.1 问&#xff1a;两端处于不同局域网的设备怎么网络通信&#xff1f; 2.3 数据链路层2.4 物理层2.5 图解OSI七层模型 3. 数据传输模式3.1 全双工3.2 半双工3.3 单工 4. TCP 3次握手4.1 抓包 5. TCP 4次挥手5.1 …

AI赋能开源:如何借助MCP快速解锁开源项目并提交你的首个PR

引子 很多同学都梦想为开源项目贡献力量&#xff0c;然而现实往往是——面对庞大复杂的项目&#xff0c;从入门到提交第一个有实质性代码的PR&#xff0c;时间跨度可能长达数年。传统路径通常是先从文档贡献开始&#xff0c;逐步深入理解项目架构&#xff0c;最终才能进行代码…

智能问数技术路径对比:NL2SQL vs NL2Semantic2SQL

在人工智能浪潮席卷数据分析领域的当下&#xff0c;“智能问数”凭借其自然语言交互的便捷性&#xff0c;迅速成为企业提升数据民主化与决策效率的焦点。大语言模型&#xff08;LLM&#xff09;展现出的强大语言理解和生成能力&#xff0c;无疑为这一愿景启动了引擎。 然而&am…

QT-Creator安装教程(windows)

目录 1&#xff0c;下载 1.1 镜像源下载 1.2 运行下载的exe文件 1.2.1 QT5 版本安装 1.2.2 QT6 版本安装 1.2.3 如何在安装完成之后&#xff0c;继续添加扩展包 1&#xff0c;下载 1.1 镜像源下载 地址&#xff1a;Index of /qtproject/ 根据电脑系统选择下载linux、macO…

Warm-Flow发布1.7.3 端午节(设计器流和流程图大升级)

Warm-Flow发布1.7.3 端午节&#xff08;设计器流和流程图大升级&#xff09; 更新内容项目介绍功能思维导图演示地址官网Warm-Flow视频 更新内容 [feat] 新版流程图通过前端渲染[perf] 美化流程设计器ui[feat] 办理人权限处理器&#xff0c;新增办理人转换接口&#xff0c;比如…