负载均衡器-Haproxy
1|0一、Haproxy介绍
- Haproxy是一种高性能的TCP/HTTP负载均衡器(tcp和http的反向代理),它支持丰富的负载均衡算法和会话保持功能。Haproxy可以进行健康检查和故障转移,并提供实时监控和日志记录功能。它适用于处理大量的并发连接和高可用性要求的应用场景,不像nginx可以作web服务器
- 这是官网地址
1|11.1 常见的负载均衡器
- LVS(Linux Virtual Server)、nginx和Haproxy都是常见的负载均衡器软件,它们的主要作用都是分发网络流量,提高网络性能和可靠性
- 硬件也有:硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,比如:梭子鱼、绿盟等
1|21.2 三者的优缺点
1.2.1 LVS
-
LVS是一种基于Linux内核的负载均衡器,具有高性能和可扩展性。它通过将流量分发到多个服务器来实现负载均衡。LVS可以根据不同的调度算法(如轮询、源IP哈希)来分发请求,同时支持对后端服务器的健康检查。LVS适合于大规模网络环境和高并发负载。
-
优点
- 缺点
1.2.2 Nginx
-
Nginx是一种轻量级的反向代理服务器,也可以用作负载均衡器。Nginx具有高性能、低内存消耗和高并发处理能力。它支持多种负载均衡算法,并且具有灵活的配置选项。Nginx还集成了其他功能,如静态文件服务和缓存加速,使其成为一个全能的Web服务器。Nginx适合用于静态内容的分发以及高并发的Web应用场景。
-
优点
-
nginx有四种负载均衡方式:
- 轮询
- 最小连接数
- ip_hash(用于会话保持,使某一ip最近一段时间的访问全部分配到同一个服务器,现在很多保持会话的方式已经不需要定位同一个不变的服务器了,如 通过算法签发token、或者将登录状态保存到数据库)
- weight(其实是在轮询的基础上,提高某个权重高的服务器的分发请求频率)
- 轮询
-
缺点
1.2.3 Haproxy
- 优点
-
Haproxy负载均衡策略非常多,常见的有8种
- roundrobin:表示简单的轮询
- static-rr:表示根据权重
- leastconn:表示最少连接先处理
- source:表示根军请求源IP
- uri:表示根据请求的URL,做cdn需使用
- url_param:表示根据请求的URL参数
- hdr(name):表示根据HTTP请求头来锁定每一次HTTP请求
- rdp-cookie(name):表示根据cookie(name)来锁定并哈希每一次TCP请求
1.2.4 总结
理论总结
-
LVS基于Linux操作系统实现软负载均衡,而Haproxy和Nginx是基于第三方应用实现的软负载均衡
-
LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而Haproxy和Nginx都可以实现4层和7层技术,Haproxy可提供TCP和HTTP应用的负载均衡综合解决方案
-
LVS因为工作在ISO模型的第四层,其状态监测功能单一,而Haproxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式
-
Haproxy功能强大,但整体性能低于4层模式的LVS负载均衡
-
Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持集群功能,但是对集群节点健康检查功能不强,性能没有Haproxy好
-
一般来说,Haproxy是除了对web服务器负载之外最好的选择,超高型并发场景(如淘宝、京东等)还是LVS更好
应用总结
- 性能需求:根据预期的流量负载和性能需求,选择适合的负载均衡器。如果需要处理大规模的并发请求,LVS可能是更好的选择。如果需要高性能的Web服务器加上负载均衡功能,Nginx可能是更合适的选择。
- 功能需求:根据项目需求确定所需的额外功能。如果需要复杂的负载均衡算法、健康检查和监控等功能,HAProxy可能是更适合的选择。
- 可扩展性:考虑未来的扩展需求,选择具有良好可扩展性的负载均衡器。例如,如果你需要在多个数据中心进行负载均衡,那么HAProxy可能是更灵活的选择。
- 熟悉程度:考虑团队成员对负载均衡器的了解和经验,选择他们熟悉和擅长的工具。这有助于快速部署和维护负载均衡器
3个案例
- 大型电子商务网站:假设你正在开发一个大型电子商务网站,该网站需要处理大量的并发请求。在这种情况下,你可能会选择使用LVS作为负载均衡器。LVS能够将流量分发到多台后端服务器,确保请求能够有效地分散,从而提高网站的性能和可扩展性。
- 微服务架构:在一个基于微服务的架构中,各个微服务相互独立,可以部署在不同的服务器上。为了实现负载均衡和高可用性,你可以选择使用Nginx或HAProxy作为负载均衡器。它们可以根据请求的内容或其他因素将流量分发到不同的微服务实例,确保每个服务都能够平均地处理请求,并在其中一台服务器故障时自动转移到其他正常的服务器上。
- 高流量的媒体分享网站:如果你运行一个媒体分享网站,用户上传和下载大型媒体文件可能会产生大量的流量。在这种情况下,你可能需要一个具有高性能和可靠性的负载均衡器。在这种情况下,HAProxy可能是一个不错的选择,它支持丰富的负载均衡算法和高并发连接处理能力,可以帮助你有效地管理流量并提供稳定的服务
负载均衡的通用的配置步骤
- 安装和配置负载均衡器软件:根据选择的负载均衡器类型,按照官方文档提供的指导安装和配置相应软件。例如,对于Nginx,可以通过包管理器进行安装,并编辑配置文件。
- 定义后端服务器:在负载均衡器配置中,定义要使用的后端服务器列表。这些服务器可以是实际处理请求的应用服务器、微服务实例或其他类型的服务器。确保每个服务器都能够正常运行,并具有相同的应用程序或服务。
- 配置监听端口和负载均衡算法:指定负载均衡器监听的端口号,并选择适合需求的负载均衡算法。常见的负载均衡算法包括轮询、加权轮询、IP散列等。根据实际情况选择适当的算法。
- 配置健康检查:负载均衡器通常会定期检查后端服务器的健康状态,以确保只将流量分发到健康的服务器上。配置健康检查机制,例如定期发送HTTP请求检查响应码或使用TCP连接检查端口。
- 配置 SSL/TLS:如果需要通过负载均衡器传输安全的HTTPS流量,需要配置SSL/TLS证书和相关参数。根据负载均衡器的要求和证书颁发机构提供的指导完成配置。
- 测试和监控:在配置完成后,进行测试以确保负载均衡器正常工作。发送请求并观察流量是否正确地分发到后端服务器。此外,设置监控系统来实时监测负载均衡器和后端服务器的性能和健康状态
2|0二、Haproxy的部署
- haproxy的部署分为以下几个步骤
- 下载安装haproxy
- 添加haproxy系统服务
- 创建haproxy用户和相关目录
- 配置haproxy的配置文件(配置反向代理和负载均衡)(修改haproxy的配置后需要重启haproxy服务才能生效)
- 配置haproxy的日志输出
- 启动haproxy
2|12.1 下载、安装Haproxy
- 下面以centos系统为例,通过yum、编译安装haproxy
- centos安装要注意关闭防火墙
2.1.1 yum源安装
2.1.2 第三方安装包
- 去 第三方 ,下载rpm包(第三方编译好的)
- 参考地址:https://centos.pkgs.org/7/ius-testing-x86_64/haproxy22-2.2.10-1.el7.ius.x86_64.rpm.html
2.1.3 编译安装
- 首先到官网下载LTS稳定版的版本,这里部署的是haproxy-2.2.12LTS版本
- 然后下载Haproxy依赖:
lua
- 由于centos⾃带的lua版本⽐较低并不符合HAProxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装HAProxy
- 过程如下:
2|22.2 添加haproxy系统服务
- 源码包里有启动脚本,拷贝到 /etc/init.d 目录下
- 为后面的启动haproxy服务铺垫
2|32.3 创建haproxy用户和相关目录
2|42.4 配置Haproxy的配置
2.4.1 Haproxy的配置详解
- 介绍了Haproxy的配置文件中的各种参数含义
2.4.1.1 HAProxy的配置文件的5个域
2.4.1.2 global域的关键配置
2.4.1.3 frontend域的关键配置
2.4.1.4 backend域的关键配置
2.4.1.5 default域 和 listen域
2.4.2 自定义Haproxy配置
2|52.5 Haproxy日志配置
- 将Haproxy的日志输出到rsyslog中,进行统一管理
- Hproxy默认的日志是输出到系统的rsyslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要haproxy的info及notice日志分别记录到不同的日志文件中
2.5.1 rsyslog
-
rsyslog是一个centos的日志处理系统,下面简单介绍下
-
/etc/rsyslog.conf
是rsyslog服务的总配置文件(相当于全局配置) -
/etc/rsyslog.d
该目录是单独配置的一个个rsyslog配置文件(相当于个性配置) -
通过修改
/etc/rsyslog.conf
以及/etc/rsyslog.d/xxx.conf
,来控制各种日志的输出
-
-
rsyslog的日志等级
日志等级简写 | 日志等级含义 | 说明 |
---|---|---|
none | 没有优先级,不记录任何日志消息 | |
0 | debug | 调试程序产生的信息 |
1 | info | 通用性消息,一般用来提供有用信息 |
2 | notice | 不是错误,但是可能需要处理 |
3 | warning/warn | 警告 |
4 | error/err | 一般错误消息 |
5 | crit | 危险情况,例如硬盘错误,可能会阻碍程序的部分功能 |
6 | alert | 需要立即修复的告警 |
7 | emerg | 紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户 |
2.5.2 配置Haproxy日志
-
首先配置haproxy的配置文件中的log设置
-
再打开rsyslog的UDP系统日志接收和TCP系统日志接收
-
过程如下:
2|62.6 启动Haproxy
__EOF__

本文链接:https://www.cnblogs.com/Mcoming/p/18093791.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下