文章目录
一、ACL 规则
1.概述
- 比起使用 LVS 做负载均衡,Haproxy 能提供更加强大的功能
- 因为 Haproxy 支持 ACL 规则,用于定义三层到七层的规则来匹配一些特殊的请求,实现基于请求报文首部、相应报文内容或者是一些其他状态信息,从而根据需要进行不同的策略转发响应
2.主要功能
可以根据 ACL 规则 完成以下两种主要功能:
- 通过设置 ACL 规则来检查客户端请求是否符合规则,将不符合规则要求的请求直接终端
- 符合 ACL 规则请求由 backend 指定的后端服务器池执行基于 ACL 规则的负载均衡,不符合的可以直接中断响应,也可以交由其他服务器池执行
3.语法
- Haproxy 中的 ACL 规则设置在 frontend 部分,语法:
acl 名称 方法 -i [匹配的路径或文件]
- 说明如下:
- acl:定义 ACL 规则的关键字,后面需自定义的 ACL 名称,名称区分大小写,也可以重名,这样就可以把多个测试条件设定为一个共同的 ACL
- 方法:是用来设定实现 ACL 的方法
- Haproxy 定义的 ACL 常用方法如下:
常用方法 | 解释 |
---|---|
hdr_beg(host) | 检测请求报文首部开头部分是否匹配指定的模式 |
hdr_end(host) | 检测请求报文首部结尾部分是否匹配指定的模式 |
hdr_reg(host) | 正则匹配 |
url_sub | 表示请求 url 中包含什么字符串 |
url_dir | 表示请求 url 中存在哪些字符串作为部分地址路径 |
path_beg | 检测请求的 URL 是否匹配路径开头 |
path_end | 检测请求的 URL 是否匹配路径结尾 |
dst | 目标地址 |
dst_port | 目标端口 |
src | 源地址 |
src_prot | 源端口 |
- -i:表示忽略大小写,后面需跟上匹配的路径或者文件或者正则表达式,与 ACL 规则一起使用的 Haproxy 选项有 use_backend 和 default_backend,其中use_backend 后面需要设置一个 backend 实例名称,表示在满足 ACL 规则后接收用户请求的后端 backend 服务器池是哪个;此时 default_backend 表示没有满足 ACL 条件的请求默认使用哪个后端 backend 服务器池
二、Haproxy 实现智能负载均衡
- Haproxy 可以工作在七层模型下,因此可以通过设定 ACL 规则实现 Haproxy 的智能负载均衡
- 本实例使用了一台 Haproxy 服务器,三台 Web 服务器,模拟搭建了一套 Web 群集,来进行 AC