1.简介:
HAProxy是一款开源、高性能的负载均衡器和代理服务器,专为TCP和HTTP应用而设计。它可以将客户端的请求分发到多台后端服务器,从而提高应用的可用性和性能。HAProxy支持多种负载均衡算法和健康检查机制,是构建高可用性系统的理想选择。
HAProxy的整体架构主要包括以下部分:
前端(Frontend):接受客户端请求,并根据配置的规则进行处理。
后端(Backend):定义一组服务器,处理前端转发的请求。
服务器(Server):实际处理请求的后端服务器。
监听器(Listener):在前端监听特定的IP和端口,等待客户端的连接请求。
HAProxy的优势:
高性能:HAProxy采用事件驱动模型,能够处理大量并发连接。
灵活性强:支持多种负载均衡算法和调度策略,适应不同的应用场景。
高可用性:通过健康检查和故障转移机制,确保服务的连续性。
丰富的功能:支持SSL终止、HTTP重写、压缩等多种功能。
2.负载均衡
Load balancing,即负载均衡,是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。
负载均衡技术具有一下优势:
(1)高性能:负载均衡技术将业务较均衡的分担到多台设备或链路上,从而提高了整个系统的性能;
(2)可扩展性:负载均衡技术可以方便的增加集群中设备或链路的数量,在不降低业务质量的前提下满足不断增长的业务需求;
(3)高可靠性:单个甚至多个设备或链路法神故障也不会导致业务中断,提高了整个系统的可靠性;
(4)可管理性:大量的管理共组都集中在使用负载均衡技术的设备上,设备集群或链路集群只需要维护通过的配置即可;
(5)透明性:对用户而言,集群等于一个或多个高可靠性、高性能的设备或链路,用户感知不到,也不关心具体的网络结构,增加或减少设备或链路数量都不会影响正常的业务。
HAProxy常用命令
启动HAProxy:systemctl start haproxy
停止HAProxy:systemctl stop haproxy
重启HAProxy:systemctl restart haproxy
查看HAProxy状态:systemctl status haproxy
检查HAProxy配置文件:haproxy -c -f /etc/haproxy/haproxy.
重新加载HAProxy配置:systemctl reload haproxy
3.haproxy的基本配置信息
rpm -qc haproxy ###查找haproxy的路径
配置文件路径:/etc/haproxy/haproxy.cfg
global: 全局配置段
- 进程以及安全配置相关参数
- 性能调整相关参数
- Debug参数
proxies:代理配置段
- defaults:为frontend,backend,listen提供默认配置
- frontend:前端,相当于nginx中的server{}
- backend:后端,相当于nginx中的upstream{}
- listen:同时拥有前端和后端配置,配置简单,生产推荐使用
实验环境:(nginx)
三台虚拟机
haproxy
dnf install haproxy -y
修改配置文件后都需要重启服务
systemctl restart haproxy.service
webserver1
dnf install nginx -y ###下载nginx
echo webserver1 - 172.25.254.10 > /usr/share/nginx/html/index.html
webserver2
dnf install nginx -y
echo webserver2 - 172.25.254.20 > /usr/share/nginx/html/index.html
多进程防止cpu飘逸问题
cpu-map 1 0:进程1使用第一个进程
cpu-map 2 1:进程2使用第二个进程
4.常用参数:
5.动态调整haproxy
(解决改动配置,全局都会受影响)
对该文件进行配置:(因为只能查看不能修改,需要提权)
以管理员身份提权 600
dnf install socat -y (动态调整haproxy的参数)
多进程热处理
6.算法
1 静态算法
静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度等,且无法实时修改权重(只能为0和1,不支持其它值),只能靠重启HAProxy生效。
2 动态算法
动态算法:基于后端服务器状态进行调度适当调整,新请求将优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整无需重启。
hash算法
7.状态页控制
stats enable ###启动状态页
stats hide-version ###状态页版本(版本不同,增大攻击难度)
stats refresh <delay> ###设定刷新时间
stats uri <prefix> ###访问什么页面可访问到此页面
stats auth <user>:<passwd> ####认证时的账号密码,默认不需要账号密码
stats admin { if | unless } <cond> ###启用管理功能(一般不启用,因为不安全)
配置:
自定义错误界面:
建立:
mkdir /etc/haproxy/errorpage -p
vim /etc/haproxy/errorpage/503.http
指定报错文件: