云计算学习100天-第32天
Haproxy负载均衡集群
概念
- HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理
- 是免费、快速并且可靠的一种解决方案
- HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理
- 可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到公网
工作模式
- mode http:只适用于web服务
- mode tcp:适用于各种服务
- mode health:仅做健康检查,很少使用
调度算法
- roundrobin:轮询
- static-rr:加权轮询
- leastconn:最少连接者先处理
- source:根据请求源IP,类似于nginx的ip_hash
- ri:根据请求的URI
- rl_param:根据请求人URL参数'balance url_param'
- rdp-cookie(name) :根据cookie(name)来锁定并哈希每一次的TCP请求
- hdr(name) :根据HTTP请求头来锁定每一次HTTP请求
主机名 | IP地址 | 角色 |
---|---|---|
pubserver | eth0:192.168.88.240 | ansible主机 |
client | eth0:192.168.88.10 | 客户端 |
proxy | eth0:192.168.88.5 | haproxy服务器 |
web1 | eth0:192.168.88.100 | web服务器 |
web2 | eth0:192.168.88.200 | web服务器 |
安装haproxy服务
#基于前一天的keepalived网络架构搭建
# lvs1节点安装Haproxy软件,在ansible主机上用剧本实现
vim 12_install_haproxy.yml
---
- name: config haproxy
hosts: lvs1
tasks:
- name: stop keepalived #停止Keepalived服务
service:
name: keepalived
state: stopped
enabled: false
- name: remove softs #卸载软件
yum:
name: ipvsadm,keepalived
state: absent
- name: modify hostname #设置主机名
shell: "hostnamectl set-hostname haproxy"
- name: install haproxy #安装软件
yum:
name: haproxy
state: present
ansible-playbook 12_install_haproxy.yml
配置Haproxy
# 配置文件说明
global为全局配置,通常保持默认即可
defaults为缺省配置,如果后续有相同配置则覆盖缺省值
#haproxy服务器配置
vim /etc/haproxy/haproxy.cfg
...
#先把包括64行在内的之后的行全部删除,然后添加以下配置
...
listen webservers #定义虚拟服务器
bind 0.0.0.0:80 #定义监听端口
mode http #定义工作模式
balance roundrobin #定义调度算法
server web1 192.168.88.100:80 check inter 2000 rise 2 fall 5
server web2 192.168.88.200:80 check inter 2000 rise 2 fall 5
#check:对后端服务器进行健康检查
#inter:健康检查心跳包发送时间间隔
#rise:连续检查N次有响应则认为健康
#fall:连续检查N次无响应则认为故障
systemctl start haproxy
ss -antlp | grep haproxy #查看已用的端口命令,集群搭建的常用命令
client客户端访问测试
for i in {1..6}
do
curl http://192.168.88.5
done
Welcome to web1
Welcome to web2
Welcome to web1
Welcome to web2
Welcome to web1
Welcome to web2
haproxy服务器开启Haproxy健康检查页面
vim /etc/haproxy/haproxy.cfg
...
listen stats #定义虚拟服务器
bind 0.0.0.0:1080 #定义监听端口
stats refresh 30s #定义页面刷新时间
stats uri /stats #定义请求路径
stats auth admin:admin #定义用户/密码
systemctl restart haproxy
ss -antlp | grep haproxy
LISTEN 0 128 0.0.0.0:1080 0.0.0.0:* users:(("haproxy",pid=28627,fd=7))
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("haproxy",pid=28627,fd=5))
浏览器访问测试
http://192.168.88.5:1080/stats 用户名/密码:admin/admin