HAProxy详解

目录

一、负载均衡

1.什么是负载均衡

2.为什么用负载均衡

3.负载均衡类型

1.硬件:

2.四层负载均衡

3.七层负载均衡

二、haproxy

1.简介

2.实验环境的部署

3.haproxy的全局配置参数及日志分离

4.haproxy的热更新方法

5.haproxy算法

(1)静态算法

(2)first(很少用)

(3)动态算法

6.高级功能及配置


一、负载均衡

1.什么是负载均衡

负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展

2.为什么用负载均衡

Web服务器的动态水平扩展-->对用户无感知
增加业务并发访问及处理能力-->解决单服务器瓶颈问题
节约公网IP地址-->降低IT支出成本
隐藏内部服务器IP-->提高内部服务器安全性
配置简单-->固定格式的配置文件
功能丰富-->支持四层和七层,支持动态下线主机
性能较强-->并发数万甚至数十万

3.负载均衡类型
1.硬件:

F5    美国F5网络公司  https://f5.com/zh
Netscaler       美国思杰公司      https://www.citrix.com.cn/products/citrix-adc/、
Array      华耀                     https://www.arraynetworks.com.cn/
AD-1000         深信服                http://www.sangfor.com.cn/

2.四层负载均衡

1.通过ip+port决定负载均衡的去向。
2.对流量请求进行NAT处理,转发至后台服务器。
3.记录tcp、udp流量分别是由哪台服务器处理,后续该请求连接的流量都通过该服务器处理。
4.支持四层的软件
    lvs:重量级四层负载均衡器。
    Nginx:轻量级四层负载均衡器,可缓存。(nginx四层是通过upstream模块)Haproxy:模拟四层转发。

3.七层负载均衡

七层的负载均衡就是基于虚拟的URL或主机IP的负载均衡:在四层负载均衡的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,如果你的Web服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。

​ 对应的负载均衡器称为七层交换机(L7 switch),除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或Cookie信息,实现七层负载均衡。此种负载均衡器能理解应用协议,常见例子有: haproxy,MySQL Proxy。

通过虚拟url或主机ip进行流量识别,根据应用层信息进行解析,决定是否需要进行负载均衡。
代理后台服务器与客户端建立连接,如nginx可代理前后端,与前端客户端tcp连接,与后端服务器建 立tcp连接。
支持7层代理的软件:
Nginx:基于http协议(nginx七层是通过proxy_pass)
Haproxy:七层代理,会话保持、标记、路径转移等。

二、haproxy

1.简介


HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器。支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计。
企业版网站:https://www.haproxy.com
社区版网站:http://www.haproxy.org
github:https://github.com/haprox

2.实验环境的部署

haproxy:网卡eth0、IP为172.25.254.100、主机名为haproxy

webserver1:网卡eth0、IP为172.25.254.10、主机名为webserver1

webserver2:网卡eth0、IP为172.25.254.20、主机名为webserver2

在两台webserver上安装nginx

在haproxy主机上安装haproxy

配置文件设定

加入框里内容

本机访问

将前后端合并,将之前写的注释掉,把以下内容写进,如图

重启服务,客户端访问。实验效果跟上面一样

3.haproxy的全局配置参数及日志分离

定向haproxy日志

4.haproxy的热更新方法

利用socat对服务器动态权重调整

#设置权重
[root@haproxy ~]# echo "set weight webcluster/web1 1 " | socat stdio
/var/lib/haproxy/stats
[root@haproxy ~]# echo "set weight webcluster/web1 2 " | socat stdio
/var/lib/haproxy/stats
#下线后端服务器
[root@haproxy ~]# echo "disable server webcluster/web1 " | socat stdio
/var/lib/haproxy/stats
#上线后端服务器
[root@haproxy ~]# echo "enable server webcluster/web1 " | socat stdio
/var/lib/haproxy/stats


## 针对多进程处理方法
#如果开启多进程那么我们在对进程的sock文件进行操作时其对进程的操作时随机的
#如果需要指定操作进程那么需要用多soct文件方式来完成
haproxy ~]# vim /etc/haproxy/haproxy.cfg
...上面内容省略...
stats socket /var/lib/haproxy/stats1 mode 600 level admin process 1
stats socket /var/lib/haproxy/stats2 mode 600 level admin process 2
nbproc 2
cpu-map 1 0
cpu-map 2 1
...下面内容省略...
#这样每个进程就会有单独的sock文件来进行单独管理
[root@haproxy ~]# ll /var/lib/haproxy/
总用量 0
srw------- 1 root root 0 8月 8 13:43 stats
srw------- 1 root root 0 8月 8 13:46 stats1
srw------- 1 root root 0 8月 8 13:46 stats2
5.haproxy算法
(1)静态算法
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 
--------------以上内容省略------------------
listen webcluster
   bind *:80
   mode http
   #balance first
   balance static-rr
   server  web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2
   server  web2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
   
------------以下内容省略------------------------
[root@haproxy ~]# systemctl restart haproxy.service

#测试
[root@test ~]# for i in {1..10}; do curl 172.25.254.100; done
webserver2:172.25.254.20
webserver1:172.25.254.10
webserver2:172.25.254.20
webserver1:172.25.254.10
webserver2:172.25.254.20
webserver1:172.25.254.10
webserver2:172.25.254.20
webserver1:172.25.254.10
webserver2:172.25.254.20
webserver1:172.25.254.10

(2)first(很少用)
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 
--------------以上内容省略------------------
listen webcluster
   bind *:80
   mode http
   balance first
   server  web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2
   server  web2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
   
------------以下内容省略------------------------
[root@haproxy ~]# systemctl restart haproxy.service
(3)动态算法
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 
--------------以上内容省略------------------
listen webcluster
   bind *:80
   mode http
   balance roundrobin
   server  web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2
   server  web2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
   
------------以下内容省略------------------------
[root@haproxy ~]# systemctl restart haproxy.service

6.高级功能及配置

haproxy的状态页面监控

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 

--------以上内容省略-------
listen stats
    mode http
    bind *:4567
    stats enable
    stats refresh 1
    stats uri /status
    stats auth www:www
--------省略----------

[root@haproxy ~]# systemctl restart haproxy.service 

浏览器访问测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值