HAProx代理

一、概念

HAProxy是一款开源、高性能的负载均衡器和代理服务器,专为TCP和HTTP应用而设计。它可以将客户端的请求分发到多台后端服务器,从而提高应用的可用性和性能。HAProxy支持多种负载均衡算法和健康检查机制,是构建高可用性系统的理想选择

二、优势

  1. 增加业务并发访问及处理能力,解决单服务器瓶颈问题。
  2. 节约公网IP地址,降低IT支出成本。
  3. 隐藏内部服务器IP,提高内部服务器安全性。
  4. 配置简单,使用固定格式的配置文件。
  5. 功能丰富,支持四层和七层,以及动态下线主机

三、HAProxy代理配置段

1、defaults:为frontend,backend,listen提供默认配置

2、frontend:前端,相当于nginx中的server{}

3、backend:后端,相当于nginx中的upstream{}

4、listen:同时拥有前端和后端配置,配置简单

四、实验环境

HAProxy服务机IP:172.25.254.100

web1 IP:172.25.254.10

web2 IP:172.25.254.20

HAProxy的基本部署和全局变量

下载haproxy软件

提前在web1和web2中下载nginx并写入内容

web1:

web2:

在haproxy服务机进入haproxy配置文件

在listen中写入web配置

测试:访问172.25.254.100(haproxy服务机)

查看cpu等使用情况

进入配置文件

重启服务并查看

日志显示。进入

haproxy代理参数

首先将haproxy的http服务端口更改为8080,否则会和haproxy冲突

进入配置界面

check:对指定real进行健康状态检查

inter:健康状态检查时间间隔,默认为2000ms,这里设置为2

fall:后端服务器从线上转为线下的检查的连续失效次数,默认为3

rise:后端服务器从下线转为上线的检查的连续有效次数,默认为2

weight:权重,默认为1,最大值为256

测试:

在参数后加disabled表示指定服务关闭

测试:web1以通过disabled参数关闭服务,访问不到web1

网页重定向参数:redirect prefix 后面加网址

在浏览器中访问

会直接跳转到

haproxy热处理

首先下载socat工具插件,我们可以通过 socat 命令 实现对 haproxy 的管理,包括获取监控数据,对后端服务器实现启动停止,服务流量控制等等

要想 haproxy 支持通过 socat 来管理,需要在 haproxy.cfg 加入配置,并给stats600权限

接下来可通过一些指令获取参数

通过热处理关闭web1服务,注意:webcluster和web1应与文件中配置一致

热处理修改权重

查看stats参数

多线程管理

查看stats1参数

多线程热处理

haproxy算法

HAProxy通过固定参数balance指明对后端服务器的调度算法,该参数可以配置在listen或backend选项中。
HAProxy的调度算法分为静态和动态调度算法,但是有些算法可以根据参数在静态和动态算法中相互转换

1、静态算法

按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度
等,且无法实时修改权重(只能为01,不支持其它值),只能靠重启HAProxy生效。
static-rr:静态加权轮询,静态算法,不支持权重的运行时调整及慢启动机制,无法使用热处理更改权重
first:根据服务器在列表中的位置,自上而下进行调度;前面的服务器连接数达到上限时,才将新请求调度至下一个服务器;这种算法好处在于可省服务器;要保证单台服务器支撑多个连接时没有问题,性能还支撑一个没有什么区别时会很有用。

在配置文件中打开static-rr算法

测试:用热处理更改web1权重

发现更改不了,说明static-rr算法生效

first算法:在配置文件中关闭static-rr算法并打开first算法,并设置web1最大并发链接数为1

在多台主机中死循环测试效果

发现访问的结果几乎全是web1,只有小部分web2,实验完成

backup:当前面地址过载或下线时访问backup处的地址

使用disabled使web1和web2下线

访问web_sorry

动态算法

基于后端服务器状态进行调度适当调整, 新请求将优先调度至当前负载较低的服务器
权重可以使用热处理进行更改,无需重启haproxy服务

1、roundrobin:基于权重的轮询动态调度算法

2、leastconn:加权的最少连接的动态

roundrobin

编辑haproxy配置文件

访问

leastconn:

其他算法

1、source:源地址hash,基于用户源地址hash并将请求转发到后端服务器,后续同一个源地址请求将被转发至同一 个后端web服务器

2、map-base 取模法:对source地址进行hash计算,再基于服务器总权重的取模,最终结果决定将此请 求转发至对应的后端服务器。

3、一致性Hash:

当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动。配置参数为 hash-type consistent

客户机哈希环点共有2^32个,0-2^32-1个

hash一致性示意图

在hash环上的web会顺时针寻找服务器

当一个服务器出现故障时会继续顺时针找到下一个服务器

4、uri hash一致性:分配原理是将请求的URL作为输入,通过哈希函数计算一个值,然后使用这个值来决定将请求分配给哪台后端服务器

5、url_param一致性hash

6、hdr一致性hash

source:

map-base 取模法:不支持热处理修改权重,只能上线或者下线

uri hash一致性:

事先在两台web服务器中写入参数

url_param一致性hash

测试:

hdr一致性hash:

测试:

算法总结:

静态:

static-rr:tcp/http

first:tcp/http
动态:
roundrobin:cp/http
leastconn:tcp/http
使用场景

first:使用较少
static-rr:做session共享的 web 集群
roundrobin:做session共享的 web 集群
random:做session共享的 web 集群
leastconn:数据库
source:基于客户端公网 IP 的会话保持
Uri: http 缓存服务器,CDN服务商,蓝汛、百度、阿里云、腾讯
url_param : http 可以实现session保持
hdr: 基于客户端请求报文头部做下一步处理

haproxy状态页

haproxy和nginx一样,都有一个状态页,这个页面对于运维人员来说是一个比较重要的页面,里面包含了haproxy代理的后端服务器的各种指标,通常我们要了解后端主机是否健康,当前负载情况,我们可以通过状态页去了解

配置:vim /etc/haproxy/haproxy.cfg

其中 uri /status为访问地址

auth第一个ljx为账号,第二个ljx为密码,bind *:9999为9999端口号。refresh为刷新时间,这里我设置为3s刷新一次。

使用死循环来查看参数变化

测试结果

haproxy中基于cookie的会话保持

基于cookie会话保持,浏览器有这个cookie值,就访问对应的web后端服务器

配置:

在浏览器中访问按F12查看cookie值:

IP透传

  透传,通常称为透明传输,是一种数据传输方式,其核心特点是在数据传输过程中不对数据进行任何处理和解析,直接将数据从源节点传输到目的节点。这种方式保证了数据的完整性和原始状态,从而减少了数据传输的延迟和丢失,提高了数据传输的效率和稳定性。

  与普通传输相比,透传的主要区别在于数据处理方式和安全性方面。普通传输,也称为非透传,可以对数据进行加密、解析、处理和转换,以适应不同的传输需求和环境。这使得非透传能够提供更高的安全性,因为它可以防止数据在传输过程中被未授权的第三方访问或篡改。

  透传是一种高效且直接的数据传输方式,它通过不对数据进行任何处理来保持数据的原始性和完整性。而普通传输则提供了更多的灵活性和安全性,通过对数据的处理和加密来满足特定的传输需求。选择哪种传输方式取决于具体的应用场景和安全要求。

透传分为七层透传和四层透传

七层:

七层负载均衡服务器起了一个代理服务器的作用,服务器建立一次TCP连接要三次握手,而client要访问webserver要先与七层负载设备进行三次握手后建立TCP连接,把要访问的报文信息发送给七层负载均衡;然后七层负载均衡再根据设置的均衡规则选择特定的webserver,然后通过三次握手与此台webserver建立TCP连接,然后webserver把需要的数据发送给七层负载均衡设备,负载均衡设备再把数据发送给client;所以,七层负载均衡设备起到了代理服务器的作用。

在nginx中:

通过查看日志可以查看到访问的IP是谁

在apache中

在配置文件中添加%{X-Forwarded-For}i

四层:

在四层负载设备中,把client发送的报文目标地址(原来是负载均衡设备的IP地址),根据均衡设备设置的选择web服务器的规则选择对应的web服务器IP地址,这样client就可以直接跟此服务器建立TCP连接并发送数据

将mode 后的http改为tcp,http表示七层,tcp表示四层

在文件中http下添加' "$proxy_protocol_addr"',在server 80后加proxy_protocol (启用此项,将无法直接访问此网站,只能通过四层代理)

访问

使用172.25.254.1通过访问100实际访问10或者20,查看访问的IP

ACL

         访问控制列表(ACL)的使用为HAProxy提供了一个灵活的解决方案来执行内容交换,并且

通常基于从请求中提取的内容、响应或任何环境状态进行决策,HAProxy基于ACL实现了灵活的调

度本文介绍ACL语句中各个参数含义,定义ACL,使用ACL,以及结合例子来介绍ACL的使用。

1、精准访问,acl后面跟参数名 -i 后面再跟域名则表示精准访问,只有访问这个设定的域名才可以访问想要的内容,下面的web1表示符合要求的访问web1,不符合的访问web2

2、查找部分域名,比如查找带有.org结尾的所有域名。用-i  .org表示

3、sub表示查找某一类的域名,比如只要域名中有lee出现,则可以访问

同样ACL遵循逻辑判断语句,比如!,||

!感叹号表示相反条件,如果满足则访问20,不满足就访问10

如果两个要访问的名字之间没有加东西,只有空格,则表示and,两者都得同时满足才能执行正确的结果。

比如:两者都得满足test和domain条件才可以访问web1,否则访问web2.

||表示满足两者中的一个就可以访问web1,两个同时不满足才访问web2

ACL应用实列

基于域名解析

精准访问域名,查看域名内的东西

基于源IP访问

源地址访问

再src后的ip都不能访问100从而获得里面的东西

172.25.254.20访问100

172.25.254.1访问100

172.25.254.10访问100

基于浏览器

基于文件后缀名实现动静分离

下载php

访问带有php结尾的文件

基于文件路径访问

基于自定义的错误页面文件

这个操作我们可以自定义错误页面,让页面显示出自己想要的东西或图片,这个可以和前端结合起来,当服务器停止运行时,提示使用者情况

首先要停掉web1和web2的http或nginex服务

需要自己在haproxy下新建一个文件夹并创建文件,内容如下,该内容就是在浏览器中显示的内容

在浏览器中访问100,由于我们停掉了web服务,应该显示的是错误页面,但我们建了一个错误页面的文件,所以显示以下内容

重定向错误页面

当我们访问这个错误页面时,直接跳转到我们给定的页面,如果是在生产环境中,我们有一台设备停了,我们可以通过这个操作让它访问其他设备的内容,这里我选择了百度。

haproxy四层负载

四层负载均衡基于传输层,通过IP地址和端口进行流量分配。 它通常用于TCP和UDP协议的场景,例如DNS查询、 数据库 通信等。 四层负载均衡器通过简单地分配请求到不同的服务器,来处理大量的并发连接。一般在数据库中使用,这里我使用的是mariadb数据库。

在数据库中添加其他可访问权限(两台web都要执行这个操作)

进去haproxy.cfg配置文件 

通过远程连接数据库进行访问

站点加密

由于 HTTP 协议以明文方式发送请求,而部分业务需要进行数据加密传输,使用 SSL/TLS 来加密数据包,能够很好的保护数据的隐私性和完整性。 HAProxy 是一款可实现负载均衡的优秀软件,它可用于 TCP 代理、HTTP 反向代理、SSL 终结、规范 TCP、HTTP 连接等等。

设置加密参数

创建文件并查看是否加密成功

进入配置文件配置

访问网站(因为没有启动httpd和nginx服务,所以显示什么动物最安静)

开启服务后

就可以查看证书内容

全站加密:当我们访问的不是以htts开头时,自动变成https

我的博客写得不好,但我还是希望大家可以在我的博客里收获内容,收获知识。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值