haproxy七层代理

HAProxy(High Availability Proxy)是一个高性能、高可靠性的负载均衡器和代理服务器,广泛应用于Web和TCP应用中。在七层(应用层)代理模式下,HAProxy主要负责将客户端的HTTP请求分发到后端服务器池中的各个服务器,从而实现负载均衡和服务高可用性。七层模型指的是OSI(开放式系统互联)模型,它将网络通信分为七个层次。HAProxy作为七层代理,主要涉及其中的最高三层,即传输层(第四层)、会话层(第五层)和应用层(第七层)。

配置实验环境

一台haproxy主机,两台WebServer主机

haproxy主机配置
nmcli c modify ens160 ipv4.address 172.25.254.10/24 ipv4.gateway 172.25.254.2 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
nmcli c up ens160
dnf install haproxy -y
systemctl disable --now firewalld
setenforce 0
WebServer1主机配置
nmcli c modify ens160 ipv4.address 172.25.254.11/24 ipv4.gateway 172.25.254.2 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
nmcli c up ens160
dnf install httpd -y
echo WebServer1 > /var/www/html/index.html 
systemctl enable --now httpd
systemctl disable --now firewalld
setenforce 0
WebServer2配置
nmcli c modify ens160 ipv4.address 172.25.254.12/24 ipv4.gateway 172.25.254.2 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
nmcli c up ens160
dnf install nginx -y
echo WebServer2 > /usr/share/nginx/html/index.html
systemctl enable --now nginx
systemctl disable --now firewalld
setenforce 0

编写haproxy配置文件和多线程多进程

编写haproxy配置文件

重启后进行测试

多线程和多进程

多进程

重启查看

多线程

重启后查看

除了编写配置文件,也可以使用socat工具进行更改。

haproxy算法

静态算法

static-rr:基于权重的轮询制度

重启服务后测试

first

        根据服务器在列表中的位置,自上而下进行调度,其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务

重启后测试:当两台主机同时访问时,当第一个服务超过访问数时,才会更换第二台服务

动态算法
roundrobin

基于权重的轮询动态调度算法,支持权重的运行时调整,不同于lvs中的rr轮训模式,支持慢启动;每个后端backend中最多支持4095个real server,支持对real server权重动态调整,roundrobin为默认算法。

重启后测试

leastconn

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

重启测试:两台主机同时访问,当其中一台主机已在访问其中一个服务时,第二台主机访问的服务被改变

其他算法
source

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

重启服务后测试

map-base取模法

对source地址进行hash计算,再基于服务器总权重的取模,最终结果决定将此请求转发至对应的后端服务器。此方法是静态的,即不支持在线调整权重,不支持慢启动,可实现对后端服务器均衡调度。缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因总权重发生变化而导致调度结果整体改变,hash-type指定的默认值为此算法。

一致性hash

当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动hash(o) mod n。

该算法是动态的,支持使用socat等工具进行在线权重调整,支持慢启动。

uri

基于对用户请求的URI的左半部分或整个uri做hash,再将hash结果对总权重进行取模后,根据最终结果将请求转发到后端指定服务器;适用于后端是缓存服务器场景;默认是静态算法,也可以通过hash-type指定map-based和consistent,来定义使用取模法还是一致性hash。

WebServer1配置更改

WebServer2配置更改

重启haproxy服务并测试

url_param

url_param对用户请求的url中的params部分中的一个参数key对应的value值作hash计算,并由服务器总权重相除以后派发至某挑出的服务器,后端搜索同一个数据会被调度到同一个服务器,以确保来自同一个用户的请求始终发往同一个real server;如果无没key,将按roundrobin算法。

重启服务测试

hdr

针对用户每个http头部(header)请求中的指定信息做hash,此处由name指定的http首部将会被取出并做hash计算,然后由服务器总权重取模以后派发至某挑出的服务器,如果无有效值,则会使用默认的轮询调度。

重启服务测试

基于cookie的会话保持

cookie value:为当前server指定cookie值,实现基于cookie的会话粘性,相对于基于source地址hash调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用较少,已经被session共享服务器代替。

重启服务测试

HAProxy状态页

通过web界面,显示当前HAProxy的运行状态

重启服务测试

IP透传

web服务器中需要记录客户端的真实IP地址,用于做访问统计、安全防护、行为分析、区域排行等场景。

四层透传

在Nginx服务器WebServer2上修改Nginx的配置文件并重启Nginx服务

修改haproxy配置文件

重启服务测试

七层透传

修改haproxy配置文件

修改Apache服务器WebServer1的Apache配置文件

重启服务测试

ACL

访问控制列表ACL,是一种基于包过滤的访问控制技术。它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配),即对接收到的报文进行匹配和过滤,基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内容进行匹配并执行进一步操作,比如允许其通过或丢弃。

ACL配置选项
acl <aclname> <criterion> [flags] [operator] [<value>]
aclname:名称,可以使用大写字母A-Z、小写字母a-z,数字0-9、冒号、点、中横线和下划线,                     并且严格区分大小写
criterion:匹配规范

hdr string:提取在一个HTTP请求报文的首部

hdr ([<name> [, <occ>]]):完全匹配字符串,header的指定信息,<OCC>表示在多值中使用值的                                               出现次数

hdr_beg ([<name> [, <occ>]]):前缀匹配,header中指定匹配内容的begin

hdr_end ([<name> [, <occ>]]):后缀匹配,header中指定匹配内容end

hdr_dom ([<name> [, <occ>]]):域匹配,header中的domain name(host)

hdr_dir ([<name> [, <occ>]]):路径匹配,header的uri路径

hdr_len ([<name> [, <occ>]]):长度匹配,header的长度匹配

hdr_reg ([<name> [, <occ>]]):正则表达式匹配,自定义表达式(regex)模糊匹配

hdr_sub ([<name> [, <occ>]]):子串匹配,header中的uri模糊匹配模糊匹配C洪湖报文中a/b/c
                                                  也会匹配

flags:匹配模式

-i:不区分大小写

-m:使用指定的正则表达式匹配方法

-n:不做DNS解析

-u:禁止acl重名,否则多个同名ACL匹配或关系

operator:具体操作符

 整数比较:eq、ge、gt、le、1t
 字符比较:
-exact match         (-m str):字符串必须完全匹配模式

-substring match   (-m sub):在提取的字符串中查找模式,如果其中任何一个被发现,ACL将匹配

-prefix match         (-m beg):在提取的字符串首部中查找模式,如果其中任何一个被发现,ACL                                                   将匹配

-suffix match         (-m end):将模式与提取字符串的尾部进行比较,如果其中任何一个匹配,则                                                  ACL进行匹配
 -subdir match       (-m dir):查看提取出来的用斜线分隔("/")的字符串,如其中任一个匹配,则                                               ACL进行匹配

-domain match      (-m dom):查找提取的用点(".")分隔字符串,如果其中任何一个匹配,则ACL进
                                                行匹配

value:操作对象类型

value的类型

Boolean:布尔值

integer or integer range:整数或整数范围,比如匹配端口范围

IP address / network:IP地址或IP范围

string--> 网址

regular expression:正则表达式

hex block:16进制

多个ACL的组合调用方式

多个ACL的逻辑处理:

与:隐式(默认)使用

或:使用“or”或“||”表示

否定:使用“!”表示

自定义HAProxy错误界面

对指定的报错进行重定向

重启服务测试

基于http重定向错误页面,如指向百度

重启服务测试

HAProxy https实现

证书制作

cat /etc/haproxy/certs/qdx.org.key /etc/haproxy/certs/qdx.crt > /etc/haproxy/qdx.pem

配置文件

重启服务测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值