【HAProxy09】企业级反向代理HAProxy高级功能之压缩功能与后端服务器健康性监测
HAProxy 高级功能
介绍 HAProxy 高级配置及实用案例
压缩功能
对响应给客户端的报文进行压缩,以节省网络带宽,但是会占用部分CPU性能
建议在后端服务器开启压缩功能,而非在HAProxy上开启压缩
注意:默认Ubuntu的包安装nginx开启压缩功能
配置选项
compression algo <algorithm> ... #启用http协议中的压缩机制,常用算法有gzip,deflate
#压缩算法<algorithm>支持下面类型:
identity #debug调试使用的压缩方式
gzip #常用的压缩方式,与各浏览器兼容较好
deflate #有些浏览器不支持
raw-deflate #新式的压缩方式
compression type <mime type> ... #要压缩的文件类型MIME
#示例:
compression algo gzip deflate
compression type compression type text/plain text/html text/css text/xml text/javascript application/javascript
配置示例
listen web_host
bind 10.0.0.7:80
mode http
balance roundrobin
log global
option httplog
compression algo gzip deflate #启用压缩和指定算法
compression type compression type text/plain text/html text/css text/xml text/javascript application/javascript #指定压缩文件类型
server web1 10.0.0.17:80 cookie web1 check inter 3000 fall 3 rise 5
server web2 10.0.0.27:80 cookie web2 check inter 3000 fall 3 rise 5
#后端服务器准备一个文本文件
[root@web01 html]#ll -h
total 1.2M
-rw-r--r-- 1 nginx nginx 1.2M Nov 12 18:08 1.txt
验证压缩功能
--compressed:这个选项告诉 curl 请求服务器发送压缩的响应(如果服务器支持的话)。通常,服务器会使用 gzip 或 deflate 算法压缩数据以减少传输时间。
[root@master-db ~]#curl -b /root/cookie.txt 172.16.1.211/1.txt -Iv --compressed
* About to connect() to 172.16.1.211 port 80 (#0)
* Trying 172.16.1.211...
* Connected to 172.16.1.211 (172.16.1.211) port 80 (#0)
> HEAD /1.txt HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 172.16.1.211
> Accept: */*
> Accept-Encoding: deflate, gzip
> Cookie: WEBSRV=web01
没开启压缩功能前
开启压缩功能后
后端服务器健康性监测
三种状态监测方式
基于四层的传输端口做状态监测,此为默认方式
基于指定 URI 做状态监测,需要访问整个页面资源,占用更多带宽
基于指定 URI 的 request 请求头部内容做状态监测,占用较少带宽,建议使用此方式
基于应用层http协议进行健康性检测
基于应用层http协议,采有不同的监测方式,对后端real server进行状态监测
注意: 此方式会导致在后端服务器生成很多的HAProxy发起的访问日志
option httpchk #支持Listen和backendf块,启用七层健康性检测,对tcp 和 http 模式都支持,默认为:OPTIONS / HTTP/1.0,nginx默认不支持OTIONS
option httpchk <uri>
option httpchk <method> <uri>
option httpchk <method> <uri> <version>
#期望以上检查得到的响应码
http-check expect [!] <match> <pattern>
#示例:
http-check expect status 200
http-check expect ! rstatus ^5 #支持正则表达式
#关于HTTP/1.1的说明
<version> is the optional HTTP version string. It defaults to "HTTP/1.0" but
some servers might behave incorrectly in HTTP 1.0, so turning it to HTTP/1.1 may
sometimes help. Note that the Host field is mandatory in HTTP/1.1, and
as a trick, it is possible to pass it after "\r\n" following the version string.
配置示例
listen web_host
bind 10.0.0.7:80
mode http
balance roundrobin
#option httpchk GET /monitor/check.html #默认HTTP/1.0
#option httpchk GET /monitor/check.html HTTP/1.0
#option httpchk GET /monitor/check.html HTTP/1.1 #注意:HTTP/1.1强制要求必须有Host字段
option httpchk HEAD /monitor/check.html HTTP/1.1\r\nHost:\ www.wang.org #使用HEAD减少网络流量,新版不支持\r\nHost:\ www.wang.org
http-check send hdr Host www #注意:新版要求:HTTP/1.1强制要求必须有Host字段
cookie SERVER-COOKIE insert indirect nocache
server web1 10.0.0.17:80 cookie web1 check inter 3000 fall 3 rise 5
server web2 10.0.0.27:80 cookie web2 check inter 3000 fall 3 rise 5
#在所有后端服务建立检测页面
[root@backend ~]#mkdir /var/www/html/monitor/
[root@backend ~]#echo monitor > /var/www/html/monitor/check.html
#关闭一台Backend服务器
[root@backend1 ~]#systemctl stop httpd
验证http监测
查看到状态页,可以看到启用了七层检测功能:LastChk字段:L7
listen www.web01.com
balance roundrobin
bind 0.0.0.0:80
log global
option httplog
option httpchk HEAD / HTTP/1.1\r\nHost:\ www.web01.com
cookie WEBSRV insert nocache indirect
server 10.0.0.52 10.0.0.52:80 check inter 3000 fall 3 rise 5 cookie web01
server 10.0.0.53 10.0.0.53:80 check inter 3000 fall 3 rise 5 cookie web02