目录
1.代理机下载htppd模块,将监听端口改为8080,写页面内容
七、haproxy的热处理实验(也就是使用socat 工具)
一、负载均衡
1.1什么是负载均衡
负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均 衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了 公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展
1.2为什么要实验负载均衡
1. 提高系统性能和响应速度
- 可以将工作负载均匀分配到多个服务器上,避免单个服务器过载,从而减少响应时间,提高用户体验。
例如,电商网站在促销活动期间流量激增,负载均衡能确保服务器快速处理订单请求,避免出现卡顿或崩溃。
2. 增强系统可靠性和可用性
- 当某台服务器出现故障时,负载均衡器可以自动将流量导向其他正常运行的服务器,确保服务不中断。
比如,在线教育平台如果一台服务器宕机,负载均衡能立即将学生的访问请求分配到其他服务器,不影响课程的正常进行。
3. 便于扩展系统规模
- 可以轻松添加新的服务器到负载均衡池中,以应对不断增长的业务需求,无需对现有架构进行大规模改动。
假设一个社交媒体应用的用户量持续增加,通过负载均衡添加服务器就能轻松应对,而无需重新设计整个系统。
4. 优化资源利用
- 充分利用服务器资源,避免部分服务器闲置而其他服务器过载的情况,提高服务器的整体利用率。
以游戏服务器为例,负载均衡能根据玩家数量和游戏区域,合理分配服务器资源,确保资源利用最大化。
5. 实现成本效益
- 通过合理分配负载,可以使用相对较少但性能适中的服务器来满足业务需求,降低硬件采购和维护成本。
对于中小企业的网站,使用负载均衡能以更经济的方式提供稳定的服务。
1.3四层负载均衡
1.通过ip+port决定负载均衡的去向。
2.对流量请求进行NAT处理,转发至后台服务器。
3.记录tcp、udp流量分别是由哪台服务器处理,后续该请求连接的流量都通过该服务器处理。
4.支持四层的软件:
- lvs:重量级四层负载均衡器。
- Nginx:轻量级四层负载均衡器,可缓存。(nginx四层是通过upstream模块)
- Haproxy:模拟四层转发。
1.4七层负载均衡
1.通过虚拟ur|或主机ip进行流量识别,根据应用层信息进行解析,决定是否需要进行负载均衡。
2.代理后台服务器与客户端建立连接,如nginx可代理前后端,与前端客户端tcp连接,与后端服务器建立 tcp连接。
3.支持7层代理的软件:
- Nginx:基于http协议(nginx七层是通过proxy_pass)
- Haproxy:七层代理,会话保持、标记、路径转移等。
1.5四层负载均衡和七层负载均衡的对比
对比维度 | 四层负载均衡 | 七层负载均衡 |
---|---|---|
工作层次 | 基于 IP + 端口 | 基于应用层协议(如 HTTP) |
协议支持 | TCP、UDP 等 | HTTP、HTTPS、FTP 等 |
处理内容 | 仅处理数据包的源地址、目标地址和端口信息 | 能够解析应用层协议的具体内容 |
配置复杂度 | 相对简单 | 较为复杂 |
性能 | 较高 | 相对较低 |
灵活性 | 较低 | 较高 |
对服务器的要求 | 无特殊要求 | 服务器需要支持相应的应用层协议 |
应用场景 | 对性能要求高、协议简单的场景,如游戏服务器 | 对内容处理要求高、复杂的应用场景,如 Web 应用 |
二、什么是haproxy
2.1定义
haproxy是一个开源的高性能反向代理和负载均衡器,主要用于TCP和HTTP流量管理。是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件 是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器 支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计。
2. 2功能和特点
haproxy能够处理大量的并发连接,支持TCP和HTTP协议,具有高可用性和负载均衡功能。它特别适用于需要处理大量流量的网站,能够保护web服务器不被直接暴露在网络中,同时提供基于cookie的会话保持、健康检查、动态和静态负载均衡策略等功能。
2.3应用场景
haproxy被广泛应用于各种需要高性能网络流量管理的场景,包括网站、应用服务等。由于其高性能和可靠性,haproxy已经成为许多高流量网站的负载均衡解决方案。
2.4haproxy的分类
- haproxy分为社区版和企业版
- 社区版网站:http://www.haproxy.org
- 企业版网站:https://www.haproxy.com
企业版本和社区版功能对比:
版本 | 企业版 | 社区版 |
---|---|---|
安全性 | 提供更高级别的安全防护,如数据加密、访问控制等。 | 安全级别相对较低,可能缺少一些企业级的安全特性。 |
技术支持 | 拥有专业的技术支持团队,提供及时响应和解决方案。 | 主要依靠社区用户的互助和有限的官方文档支持。 |
定制化 | 可根据企业需求进行深度定制和集成。 | 定制化程度相对有限。 |
性能优化 | 针对大规模使用进行了优化,能支持更多用户和更高并发。 | 性能可能在高负载下表现不如企业版。 |
功能完整性 | 包含更多高级功能,如企业级报表、高级分析工具等。 | 功能相对基础,满足一般用户的基本需求。 |
三、安装及基本配置的信息
3.1软件的安装
- 软件包下载地址:https://github.com/haproxy/wiki/wiki/Packages
- 安装软件包: yum install haproxy -y
3.2haproxy基本配置的信息
官方文档:http://cbonte.github.io/haproxy-dconv/
HAProxy 的配置文件haproxy.cfg由两大部分组成,分别是:
global:全局配置段
- 进程及安全配置相关的参数
- 性能调整相关参数
- Debug参数
proxies:代理配置段
- defaults:为frontend, backend, listen提供默认配置
- frontend:前端,相当于nginx中的server {}
- backend:后端,相当于nginx中的upstream {}
- listen:同时拥有前端和后端配置,配置简单,生产推荐使用
global部分参数介绍:
参数 | 描述 | 用法示例 |
---|---|---|
daemon |
以守护进程的方式运行 HAProxy 。 | daemon true 表示以守护进程运行。 |
maxconn |
设置 HAProxy 可以接受的最大并发连接数。 | maxconn 5000 表示最大并发连接数为 5000 。 |
pidfile |
指定 HAProxy 进程的 PID 文件路径。 | pidfile /var/run/haproxy.pid 指明 PID 文件的存放位置。 |
user |
运行 HAProxy 进程的用户。 | user haproxy 指定用户为 haproxy 。 |
group |
运行 HAProxy 进程的用户组。 | group haproxy 指定用户组为 haproxy 。 |
log |
定义日志相关的设置,包括设备、级别等。 | log 127.0.0.1 local0 info 表示将日志发送到 127.0.0.1 ,使用 local0 设备,级别为 info 。 |
proxies部分参数介绍:
参数 | 描述 | 用法示例 |
---|---|---|
name |
代理的名称,用于在配置中标识该代理。 | frontend http_front |
mode |
代理的模式,如 http 、tcp 等。 |
mode http |
balance |
负载均衡算法,如 roundrobin (轮询)、leastconn (最少连接)等。 |
balance roundrobin |
default_backend |
定义默认的后端服务器组。 | default_backend http_back |
四、haproxy算法介绍
4.1.haproxy
的算法
HAProxy
通过固定的参数balance指明对后端服务器的调度算法;balance
参数可以配置在listen
或backend
选项中;HAProxy
的调度算法分为静态和动态;- 有些算法可以根据参数在静态和动态算法中相互转换。
4.2 haproxy
的静态算法
静态算法:按事先定义好的规则轮询公平调度,不关心后端服务器当前的负载,连接数等。且无法实时修改权重(只能为0和1,不支持其他值),只能靠重启
HAProxy
生效。
4.2.1 static-rr
:基于权重的轮询调度
HAProxy
的static-rr
(round-robin)调度算法是一种简单的轮询算法,它按照后端服务器在配置中的顺序依次分配连接请求。这种算法不关心后端服务器的当前负载或健康状态,适用于简单的负载均衡场景。
不支持运行时利用
socat
进行权重的动态调整不支持服务器的慢启动
其后端主机数量没有限制,相当于
LVS
中的wrr
服务器的慢启动:
是指在服务器刚刚启动的时候,不会把它应该承担的所有访问压力给它,而是先给一部分,当没有问题后再给其他的。
4.2.2 first
first:根据服务器在列表中的位置,自上而下进行调度,但是其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务,因此会忽略服务器的权重设置。
不支持运行时利用
socat
进行权重的动态调整
4.3 haproxy
的动态算法
动态算法:
基于后端服务器状态进行调度适当调整
新请求将优先调度当前负载较低的服务器
支持运行时利用
socat
进行权重的动态调整,无需重启
4.3.1 roundrobin
roundrobin
:基于权重的轮询动态调度算法,支持权重的运行时调整,不完全等于lvs
中的rr
轮询模式,HAProxy
中的roundrobin
支持慢启动(新加的服务器会逐渐增加转发数),其每个后端backend
中最多支持4095个realserver
,roundrobin
为默认调度算法,且支持对real server权重动态调整。
4.3.2 leastconn
leastconn
:leastconn
加权的最少连接的动态,支持权重的运行时调整和慢启动,即当前后端服务器连接最少的优先调度(新客户端连接),leastconn
比较适合长连接的场景使用,比如MySQL
等场景。
4.4其他算法
4.3.1 一致性哈希算法:
传统的哈希算法:
分布式缓存,比如有三台服务器s0 s1 s2 当我们缓存或访问时应该均匀的在每台服务器上,而不是只缓存或访问一台服务器。实现的方式就是哈希算法,原理如下: 比如有一张图片要缓存到服务器上,那么将它缓存的键进行哈希取值,然后对值进行取模,除数是服务器的数量(如果有权重要进行加权求和),然后会得到一个余数。比如图片上三台服务器,那么取模得到的余数就是0 1 2,正好和服务器的编号相对应,这样我们就可以将对应的号缓存到对应的服务器上去。例如:图片哈希取值为6,对3取模后为0,就缓存到s0服务器上。因为同一个图片哈希取值是不变的,因此当需要再次访问图片时,只需经过哈希值计算和取模计算,就可以找到上次实在那台服务器上缓存的,只需要到这台服务器上去访问就可以了。 弊端: 当服务器的数量或者权重发生变化时,那么对原来的缓存值进行取模运算时,除数就会不同,那么余数也会不同。比如上面6对3取模是0,但是如果加一台服务器,那么6对4取模就是2,这样就会到2号服务器去找图片,这样显然是不对的,是读取不到图片的。这样就导致了缓存失效,这时访问数据就会去找后端服务器,如果太多缓存失效,那么就会造成缓存雪崩,这样大量的访问压力就会到后端服务器,缓存集群就会失效,很可能导致后端服务器崩溃。 为了解决这个问题,避免大量的缓存失效,就有了一致性hash算法。