超详细的haproxy讲解

目录

一、负载均衡

1、什么是负载均衡

2、为什么用负载均衡

3、负载均衡类型

(1)四层负载均衡

(2)七层负载均衡

4、四层和七层的区别

二、haproxy简介

三、实验环境准备

1、实验配置图

​编辑2、实验准备四台主机test、haproxy、webserver1、webserver2

3、下载nginx服务

(1)在webserver1和webserver2中下载nginx

(2)测试网页

(3)在haproxy主机中下载haproxy服务

四、haproxy的基础配置

1、基础设置

2、实验测试

​编辑3、实验方法二(合并写法)

4、实验测试

五、global配置

1、设置开启的haproxy worker 进程数,默认进程数是一个

(1)查看现有进程(单进程)

 (2)设置多进程

(3)测试——查看多进程

2、指定每个haproxy进程开启的线程数,默认为每个进程一个 线程

(1)查看当前线程

(2)设置多线程

(3)测试 

六、全局配置实现日志分离

1、在/etc/rsyslog.conf文件里面修改配置

​编辑 2、修改后重启服务

 3、测试

七、backup的使用

1、停止webserver1和webserver2两台主机的nginx使用

​编辑2、 在haproxy主机中下载httpd服务

3、将httpd服务的默认端口号修改为8080后,再开启httpd服务

​编辑 4、添加网页内容

5、修改/etc/haproxy/haproxy.conf文件

6、重启haproxy服务

7、测试

八、 haproxy热更新方法

1、提权

2、安装socat

(1)查看haproxy状态

(2)查看集群权重

(3)设置权重

(4)下线后端服务器

(5)测试

(6)上线后端服务器

 (7)测试

 

九、 静态算法

1、static-rr:基于权重的轮询调度

2、first

十、动态算法

1、roundrobin

2、leastconn

十一、其他算法

1、source

(1)map-base 取模法

(2)一致性hash

2、uri

(1)uri 取模法

(2)uri 一致性hash

3、url_param

(1)url_param取模法

(2)url_param一致性hash

4、hdr

(1)hdr取模法

(2)一致性hash

十二、算法总结

十三、状态页面监控

十四、基于cookie的会话保持

十五、ip透传技术

1、七层透传

(1)haproxy主机

(2)webserver1主机

2、四层负载


一、负载均衡

1、什么是负载均衡

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

2、为什么用负载均衡

Web服务器的动态水平扩展-->对用户无感知

增加业务并发访问及处理能力-->解决单服务器瓶颈问题

节约公网IP地址-->降低IT支出成本

隐藏内部服务器IP-->提高内部服务器安全性

配置简单-->固定格式的配置文件

功能丰富-->支持四层和七层,支持动态下线主机

性能较强-->并发数万甚至数十万

3、负载均衡类型

(1)四层负载均衡

  • 通过ip+port决定负载均衡的去向。
  • 对流量请求进行NAT处理,转发至后台服务器。
  • 记录tcp、udp流量分别是由哪台服务器处理,后续该请求连接的流量都通过该服务器处理

支持四层的软件

  • lvs:重量级四层负载均衡器。
  • Nginx:轻量级四层负载均衡器,可缓存。(nginx四层是通过upstream模块
  • Haproxy:模拟四层转发。

(2)七层负载均衡

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

4、四层和七层的区别

所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量

四层的负载均衡,就是通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负 载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪 台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理

七层的负载均衡,就是在四层的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比 如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的 URL、浏览器类别、语言来决定是否要进行负载均衡。

  • 分层位置:四层负载均衡在传输层及以下,七层负载均衡在应用层及以下
  • 性能 :四层负载均衡架构无需解析报文消息内容,在网络吞吐量与处理能力上较高:七层可支持解析应用 层报文消息内容,识别URL、Cookie、HTTP header等信息。
  • 原理 :四层负载均衡是基于ip+port;七层是基于虚拟的URL或主机IP等。
  • 功能类比:四层负载均衡类似于路由器;七层类似于代理服务器。
  • 安全性:四层负载均衡无法识别DDoS攻击;七层可防御SYN Cookie/Flood攻击


二、haproxy简介

HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件,是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计

企业版网站:https://www.haproxy.com

社区版网站:http://www.haproxy.org

github:https://github.com/haprox

三、实验环境准备

1、实验配置图

2、实验准备四台主机test、haproxy、webserver1、webserver2

(1)第一台主机——test

(主要用来测试和看实验效果)

主机IP:172.25.254.200

网关:172.25.254.2

(2)第二台主机——haproxy

主机IP:172.25.254.100

网关:172.25.254.2

(3)第三台主机——webserver1

主机IP:172.25.254.10

网关:172.25.254.2

(4)第四台主机——webserver2

主机IP:172.25.254.20

网关:172.25.254.2

3、下载nginx服务

(1)在webserver1和webserver2中下载nginx

并且设置nginx开机自启,再在/usr/share/nginx/html下写一个网页,用来测试

[root@webserver1 ~]# dnf install nginx -y
[root@webserver1 ~]# systemctl enable --now nginx
[root@webserver1 ~]# echo webserver1 - 172.25.254.10 > /usr/share/nginx/html/index.html
[root@webserver1 ~]# dnf install nginx -y
[root@webserver1 ~]# systemctl enable --now nginx
[root@webserver1 ~]# echo webserver1 - 172.25.254.10 > /usr/share/nginx/html/index.html

(2)测试网页

[root@haproxy ~]# curl 172.25.254.10
webserver1 - 172.25.254.10
[root@haproxy ~]# curl 172.25.254.20
webserver2 - 172.25.254.20

 

[root@test ~]# curl 172.25.254.10
webserver1 - 172.25.254.10
[root@test ~]# curl 172.25.254.20
webserver2 - 172.25.254.20

(3)在haproxy主机中下载haproxy服务

并设置服务开机自启

[root@haproxy ~]# dnf install haproxy -y

[root@haproxy ~]# systemctl enable --now haproxy

四、haproxy的基础配置

1、基础设置

frontend webcluster
        bind *:80
        mode http
        use_backend webcluster-host
backend webcluster-host
        balance roundrobin
        server web1 172.25.254.10:80
        server web2 172.25.254.20:80

2、实验测试

3、实验方法二(合并写法)


listen webcluster
        bind *:80
        mode http
        balance roundrobin
        server web1 172.25.254.10:80
        server web2 172.25.254.20:80

 

4、实验测试

五、global配置

1、设置开启的haproxy worker 进程数,默认进程数是一个

               ——(nbproc N)

(1)查看现有进程(单进程)

 (2)设置多进程

(3)测试——查看多进程

2、指定每个haproxy进程开启的线程数,默认为每个进程一个 线程

                ——nbthread 1 (和nbproc 互斥)

(1)查看当前线程

 

(2)设置多线程

 

(3)测试 

六、全局配置实现日志分离

1、在/etc/rsyslog.conf文件里面修改配置

 

 2、修改后重启服务

重启日志服务

重启haproxy服务

 3、测试

七、backup的使用

#将后端服务器标记为备份状态,只在所有非备份主机down机时提供服务,类似Sorry Server

1、停止webserver1和webserver2两台主机的nginx使用

2、 在haproxy主机中下载httpd服务

3、将httpd服务的默认端口号修改为8080后,再开启httpd服务

 4、添加网页内容

5、修改/etc/haproxy/haproxy.conf文件

6、重启haproxy服务

7、测试

 

八、 haproxy热更新方法

1、提权

2、安装socat

(1)查看haproxy状态

 echo "show info" | socat stdio /var/lib/haproxy/stats

 

(2)查看集群权重

[root@haproxy ~]# echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats 

(3)设置权重

[root@haproxy ~]# echo "set weight webcluster/web1 1" | socat stdio /var/lib/haproxy/stats 

(4)下线后端服务器

echo "disable server webcluster/web1 " | socat stdio /var/lib/haproxy/stats

(5)测试

(6)上线后端服务器

echo "enable server webcluster/web1 " | socat stdio /var/lib/haproxy/stats

 (7)测试

 

3、针对多进程处理方法

 

 

九、 静态算法

1、static-rr:基于权重的轮询调度

2、first

  • 根据服务器在列表中的位置,自上而下进行调度;
  • 其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务;
  • 其会忽略服务器的权重设置;
  • 不支持用socat进行动态修改权重,可以设置0和1,可以设置其它值但无效

十、动态算法

动态算法

  • 基于后端服务器状态进行调度适当调整;
  • 新请求将优先调度至当前负载较低的服务器;
  • 权重可以在haproxy运行时动态调整无需重启;

1、roundrobin

  • 基于权重的轮询动态调度算法,
  • 支持权重的运行时调整,不同于lvs中的rr轮训模式,
  • HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数),
  • 其每个后端backend中最多支持4095个real server,
  • 支持对real server权重动态调整,
  •  roundrobin为默认调度算法,此算法使用广泛

 支持对real server权重动态调整

[root@haproxy ~]# echo "set weight webserver_80/webserver1 2" | socat stdio /var/lib/haproxy/haproxy.sock

2、leastconn

  • leastconn加权的最少连接的动态
  • 支持权重的运行时调整和慢启动,即:根据当前连接最少的后端服务器而非权重进行优先调度(新客户 端连接)
  • 比较适合长连接的场景使用,比如:MySQL等场景。 

 

十一、其他算法

1、source

(1)map-base 取模法

(2)一致性hash

2、uri

(1)uri 取模法

(2)uri 一致性hash

3、url_param

(1)url_param取模法

(2)url_param一致性hash

4、hdr

(1)hdr取模法

(2)一致性hash

十二、算法总结

静态

  • static-rr--------->tcp/http
  • first------------->tcp/http

动态

  • roundrobin-------->tcp/http
  • leastconn--------->tcp/http

以下静态和动态取决于hash_type是否consistent

  • source------------>tcp/http
  • Uri--------------->http
  • url_param--------->http
  • hdr--------------->http

十三、状态页面监控

 

 添加刷新

 

十四、基于cookie的会话保持

 

十五、ip透传技术

1、七层透传

(1)haproxy主机

 

(2)webserver1主机

先停止nginx服务,再下载httpd服务

 

2、四层负载

 

 

 

 

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值