HAProxy简介
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,它是免费、开源、快速并且可靠的一种解决方案。
HAProxy的特点
- HAProxy 也是支持虚拟主机的,可以工作在4、7层(支持多网段。
- HAProxy 的优点能够补充 Nginx 的一些缺点,比如支持 Session 的保持,Cookie的引导;同时支持通过获取指定的 url 来检测后端服务器的状态。
- HAProxy 跟 LVS 类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy 会比 Nginx 有更出色的负载均衡速度,在并发处理上也是优于 Nginx 的。
- HAProxy 支持 TCP 协议的负载均衡转发,可以对 MySQL 读进行负载均衡,对后端的 MySQL 节点进行检测和负载均衡,大家可以用 LVS+Keepalived 对 MySQL主从做负载均衡。
- HAProxy 负载均衡策略非常多, HAProxy 的负载均衡算法现在具体有如下8种:
– roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
–static-rr,表示根据权重,建议关注;
– leastconn,表示最少连接者先处理,建议关注;
– source,表示根据请求源 IP,这个跟 Nginx 的 IP_hash 机制类似,我们用其作为解决 session 问题的一种方法,建议关注;
– ri,表示根据请求的 URI;
– rl_param,表示根据请求的 URl 参数’balance url_param’ requires an URLparameter name;
– hdr(name),表示根据 HTTP 请求头来锁定每一次 HTTP 请求;
– rdp-cookie(name),表示根据据 cookie(name)来锁定并哈希每一次 TCP 请求。
HAPorxy缺点:
- 不支持POP/SMTP协议
- 不支持SPDY协议
- . 不支持HTTP cache功能。现在不少开源的lb项目,都或多或少具备HTTP cache功能。
- 重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好。
- 多进程模式支持不够好
拓扑
与lvs-dr类似,但haproxy只需一块网卡
原理
- 它的原理是proxy代理。客户端把请求发送到HAProxy后,HAProxy再替用户发送请求到web服务器,web服务器响应HAProxy,把页面发给HAProxy。HAProxy再把页面发给客户端。
安装
yum install -y haproxy
启停
systemctl start haproxy
systemctl stop haproxy
systemctl status haproxy
配置文件
HAProxy 配置参数来源
- 命令行:总具有最高优先级
- global部分:全局设置进程级别参数
- 代理申明部分
– 来自于default、listen、frontend、backend - 配置文件可由如下部分构成
– default
- 为后续的其他部分设置缺省参数
- 缺省参数可以被后续部分重置
– frontend
- 描述接收客户端侦听套接字(socket)集
– backend
- 描述转发连接的服务器集
– listen
把frontend和backend结合到一起的完整申明
删除 #main frontend which proxys to the backends 以下的内容,并自定义如下内容
listen stats
bind 0.0.0.0:1080 # 监控页面端口号
stats refresh 30s # 监控页面自动刷新时间
stats uri /health # 自定义监控页面网址
stats realm HaManager # 统计页面密码框上的提示文本
stats auth admin:admin # 用户名:密码
stats hide-version # 隐藏统计页面上的HAProxy的版本信息
listen myweb 0.0.0.0:80
cookie SERVERID rewrite
balance roundrobin #调度算法 rr
server web1 192.168.4.1:80 cookie a1i1 check inter 2000 rise 2 fall 5
# 每2000ms检查一次服务器,2次成功成功是好的,5次表示失败
server web2 192.168.4.2:80 cookie a1i2 check inter 2000 rise 2 fall 5
日志
/etc/rsyslog.conf
构成
Facility.priority 相当于 服务、优先级
Facility 可以记录这些关键字:auth, authpriv, cron,daemon,kern,lpr,mail,mark,news,security,syslog,user,uucp,以及local0到local7
local0到local7是预留出来的接口,供第三方程序调用
Priority 可以使用的关键字:debug、info、notice、warning、warn、err
error、crit、alert、emerg、panic
Debug是最不严重的级别,panic是最严重的界别。如果日志记录优先级是info,表示比info严重的日志都需要记录
配置haproxy日志
1、配置本机接受通过网络发来的日志
vim /etc/rsyslog.conf
Provides UDP syslog reception
#$ModLoad imudp
$UDPServerRun 514
#Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
systemctl restart rsyslog
2、查看日志( 访问HAProxy调度器 可以看到日志信息)
tailf /var/log/meassages
访问健康状态检查页面
备注:
- Queue队列数据的信息(当前队列数量,最大值,队列限制数量);
- Session rate每秒会话率(当前值,最大值,限制数量);
- Sessions总会话量(当前值,最大值,总量,Lbtot: total number of times a server was selected选中一台服务器所用的总时 间);
- Bytes(入站、出站流量);
- Denied(拒绝请求、拒绝回应);
- Errors(错误请求、错误连接、错误回应);
- Warnings(重新尝试警告retry、重新连接redispatches);
- Server(状态、最后检查的时间(多久前执行的最后一次检查)、权重、备份服务器数量、down机服务器数量、down机时长)。