前言
本文介绍haproxy
一、haproxy简介
haproxy是一款实现负载均衡的调度器,适用于负载特别大的web站点
优点:
灵活性:haproxy支持丰富的负载均衡算法和会话保持方式,可以根据需求进行灵活配置。
完整的功能:haproxy支持高可用性配置、健康检查、故障恢复、SSL等功能,在负载均衡领域应用广泛。
高性能:haproxy性能优良,能够处理大量并发连接,并且支持异步IO模型。
缺点:
内存占用:相对于Nginx和LVS,haproxy在处理大量连接时消耗的内存稍高一些。
高可用性:haproxy需要借助额外的工具来实现高可用性,例如Keepalived。
haproxy的工作模式:
mode http:只适用于web服务
mode tcp:适用于各种服务
mode health:仅做健康检查,很少使用
二、配置
主机清单:
主机名 | ip |
---|---|
client1 | 192.168.88.10 |
haproxy | 192.168.88.5 |
web1 | 192.168.88.100 |
web2 | 192.168.88.200 |
# 编写ansible脚本配置haproxy(省略了前置配置ansible和yum仓库)
在pubserver上
# vim 01-cfghaproxy.yml
---
- name: config haproxy
hosts: lvs1
tasks:
- name: rm lvs keepalived
yum:
name: ipvsadm,keepalived
state: absent
- name: rename hostname
shell: hostnamectl set-hostname haproxy1
- name: install haproxy
yum:
name: haproxy
state: present
# 运行ansible
ansible-playbook 01-cfghaproxy.yml
修改配置文件haproxy.cfg
配置文件中,global是全局配置;default是缺省配置,如果后续有和default相同的配置,default配置将会被覆盖。
配置文件中,frontend描述haproxy怎么和用户交互;backend描述haproxy怎么和后台应用服务器交互。这两个选项,一般不单独使用,而是合并到一起,名为listen。
将64行之后全部删除,写入以下内容
在lvs1上
# vim /etc/haproxy/haproxy.cfg
64 listen myweb
# 监听在所有可用地址的80端口
65 bind 0.0.0.0:80
# 定义轮询调度
66 balance roundrobin
# 对web服务进行健康检查,2s一次如果连续两次成功则正常,若5次失败则服务器坏了
67 server web1 192.168.88.100:80 check inter 2000 rise 2 fall 5
68 server web2 192.168.88.200:80 check inter 2000 rise 2 fall 5
69
# 定义虚拟服务器
70 listen stats
# 监听所有可用ip的1080端口
71 bind 0.0.0.0:1080
# 监控30s刷新一次
72 stats refresh 30s
#定义监控地址为/stats
73 stats uri/stats
#设置用户名密码都为admin
74 stats auth admin:admin
###
# 起服务
systemctl start haproxy.service
使用client1验证
for i in {1..6}; do curl http://192.168.88.5/; done
# 也可以使用ab访问测试
yum -y install httpd-tools
ab -n1000 -c200 http://192.168.88.5/
监控信息解释:
Queue:队列长度。Cur当前队列长度,Max最大队列长度,Limit限制长度
Session rate:会话率,每秒钟的会话数
Sessions:会话数
Bytes:字节数。In收到的字节数,Out发出的字节数
Denied:拒绝。Req请求,Resp响应
Errors:错误
Warning:警告
Status:状态
LastChk:上一次检查。L4OK,第四层tcp检查通过
Wght:权重