Haproxy是法国人Willy Tarreau开发的一款高性能的TCP和HTTP负载均衡器,具有广泛的功能和特性,使其在负载均衡和反向代理领域备受推崇。以下是对Haproxy的详细介绍:
一、基本概述
定义:Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件,能够处理大量并发连接,提供高可用性和负载均衡功能。
功能:支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能,同时内置了监控和统计功能,可以实时获取服务器的状态和性能指标。
应用场景:特别适用于负载特大的web站点,这些站点通常又需要会话保持或七层处理。
二、核心特性
高性能:
使用异步事件驱动的架构,能够处理非常高的并发连接数,支持数以万计的并发连接。
较低的延迟和高吞吐量,使得Haproxy在处理大规模网络请求时表现优异。
高可靠性:
提供无单点故障的服务,确保服务的高可用性。
能够对后端服务器进行健康检查,及时发现并排除出故障的服务器。
负载均衡:
可以将流量均匀地分配到后端服务器上,提高系统的性能和可扩展性。
支持多种负载均衡算法,如轮询(roundrobin)、最少连接数(leastconn)等,可以根据实际需求选择合适的算法。
会话保持:
支持多种会话保持机制,如基于客户端IP的Hash计算、基于cookie的会话保持等,确保用户请求能够被转发到正确的后端服务器上。
SSL终结和加速:
可以在前端进行SSL终结,解密和加密SSL/TLS流量,从而减轻后端服务器的负担并提升性能。
可定制性:
提供了丰富的配置选项和灵活的扩展机制,使得用户可以根据实际需求进行定制化配置和扩展。
支持多种协议:
支持HTTP、HTTPS、TCP、SMTP等多种协议,可以满足不同场景下的需求。
三、工作模式
Haproxy的工作模式一般有两种:TCP模式和HTTP模式。
TCP模式:实例运行于TCP模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对7层报文做任何类型的检查,只能以简单模式工作。通常为SSL、SSH、SMTP等应用使用。
HTTP模式:实例运行于HTTP模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与RFC格式兼容的请求都会被拒绝。适用于需要HTTP层处理的场景。
haproxy实验环境的配置
haproxy的网络环境配置
webserver1和webserver2的网络环境的配置
将webserver1和webserver2的文件导入nginx的默认发布文件
在webserver1和webserver2上分别打开nginx的服务
最后在haproxy主机上进行测试,访问成功环境配置就搞定了
1.haproxy的基本部署方法以及负载均衡的实现
在haproxy主机上安装haproxy
查看haproxy的配置文件并进行配置
2.haproxy的全局配置参数以及日志分离
查看haproxy的默认进程
现在进行多进程的设置
开启两个以后查看
查看子进程中的线程数
同时设定多线程和多进程,会产生互斥
互斥后重启服务就会报错
现在将一个注释掉
然后重启服务后在进行查看
自定义haproxy的日志
进入配置文件进行配置,同时还需要开启udp协议
3.haproxy-proxies中的常用配置参数
check:对指定的real进行健康状态检查 inter:健康状态检查间隔时间 默认为2000ms fall:后端服务器从线上转为线下的连续失败次数,默认为3 rise:后端服务器从下线恢复上线的检查的连续有效次数,默认为2 weight:默认为1,最大值为256,0(状态为蓝色)表示不参与负载均衡,但仍接受持久连接
设置backup,设置为web_sorry还要把webserver1和webserver2的nginx下线
先在haproxy主机上安装httpd
进入httpd的配置文件将端口号改为8080
然后开启httpd服务
给index.html文件写入内容
然后进入haproxy配置文件写入
然后进行访问
要进行维护先将一台下线,使用disabled:将后端服务器标记为不可用状态,即维护状态
下线的为172.25.254.10,所以访问就没有10
然后进入配置文件将disabled删掉10又可以访问
redirect prefix http://www.baidu.com/ 表示将请求定向定向到一个指定网站
在浏览器上访问172.25.254.100 定向到了百度
maxconn:当前后端server的最大并发连接数
4.haproxy的热更新方法
给该文件提权进行查看
在haproxy上安装socat(动态调整haproxy中的参数)
查看haproxy的状态
查看服务器的状态
查看当前权重,更改权重为1,更改后查看
下线后端服务器下线后查看全为172.25.254.20
上线后端服务器,上线后查看恢复正常
haproxy多进程热处理
重启服务后查看
5.haproxy的算法
haproxy的静态算法,是不能修改权重
haproxy的动态算法
roundrobin算法,是谁空闲了就给谁
leastconn:加权最少连接的动态,并且支持慢启动
haproxy的其他算法
source:当后端服务器数据量发生变化时,会导致很多用户的请求转发至新的后端服务器
进行访问时全部掉到172.25.254.20
一致性hash:当服务器的总权重发生变化时,对调度结果影响时局部的,不会引起大的变动hash(0)mod n 该hash算法是动态的,支持使用socat等工具进行在线权重调整,支持慢启动
uri:基于用户请求的uri的左半部分或整个uri做hash,再将hash结果对总权重进行取模后根据最终结果将请求转发到后端指定服务器,适用于后端是缓存服务器场景
进行访问
hdr:针对每个http头部(header)请求中的指定信息做hash
6.haproxy的状态页面监控
7.haproxy-基于cookie的会话保持
把hash打开
进行基于cookie的会话保持,cookie value:为当前server指定cookie值,实现基于cookie的会话粘性,相对于基于source地址hash调度算法对客户端的粒度更精准,但同时也加大了haproxy负载
8.haproxy-ip透传
把该条注释掉,进行访问
在172.25.254.20主机上访问日志,看不到后台支持的服务,把该条打开,做透传,就能看到是100进行访问的
在httpd上做透传,在webserver1主机上将nginx服务关闭掉,然后安装httpd
在haproxy主机中访问
在webserver1查看日志编辑httpd主配置文件在haproxy主机上进行访问
四层代理
在webserver2的nginx配置文件中进行配置
再次进行访问就可以访问到20
在webserver2的nginx配置文件中添加
9.haproxy的访问控制列表应用
添加ACL列表保存然后进行访问在计算机中查看文件然后进行访问即可
10.haproxy-自动筛选错误页面内容
先将webserver1的httpd服务和webserver2的nginx服务都暂停
然后使用浏览器进行访问
来到haproxy主机过滤一下配置文件,找到503的,首先在haproxy文件下建立一个文件,然后在新建文件底下再次新建一个503.http文件在此文件中写入内容把该文件加入haproxy主配置文件中,保持与退出并重启服务
然后在浏览器上再次访问172.25.254.100
11.haproxy的四层负载示例
首先在webserver1和webserver2上安装数据库
进入数据库配置文件修改id在webserver1和webserver2上都要修改
然后就可以实现远程登录
进入haproxy的主配置文件添加
12.haproxy-https的加密访问
证书制作
将文件导入,公钥和私钥都有了
进入haproxy主配置文件进行写入
查看443端口已打开