6、Haproxy高级功能

6.4、服务器状态监测

基于端口做状态检测,此为默认方式

基于指定URI做状态检测

基于指定URI的request请求头部内容做状态检测

6.4.1、httpchk参数

option httpchk指令给予http协议来做健康检查,只有返回状态码为2XX或3XX的才认为是健康,其余所有状态码都认为不健康
如果不设置该选项时,默认采用tcp做健康检查。只要能建立tcp就表示健康
option httpchk语法:
option httpchk
option httpchk <uri>:检查的uri路径,默认为/,接受带有查询参数的uri
option httpchk <method> <uri>:http检查使用的方法,建议采用HEAD方法
option httpchk <method> <uri> <version>:检查的HTTP协议版本,默认为HTTP/1.0,如果修改为HTTP/1.1,还强制要求指定HOST,中间使用\r\n隔离

6.4.2、基于端口检测

通过监听端口进行健康检测
这种检测方式,haproxy只会去检查后端server的端口,并不能保证服务的真正可用
vim /etc/haproxy/haproxy.cfg
listen http_proxy 0.0.0.0:80
    mode http
    balance roundrobin
    server web1 172.16.1.7:80 check #基于tcp检测端口
    server web2 172.16.1.7:80 check

6.4.3、基于URI检测

通过URI获取进行健康检测,通过GET后端服务的web页面,基本上可以代表后端服务的可用性

vim /etc/haproxy/haproxy.cfg
listen http_proxy 0.0.0.0:80
    mode http
    balance roundrobin
    option httpchk GET /index.html  # 基于URI,会消耗网络带宽
    server web1 172.16.1.7:80 check port 80
    server web2 172.16.1.7:80 check port 80

6.4.4、基于URI头检测

通过request获取的头部信息进行匹配,然后进行健康检测
将健康检查的请求发送至后端节点的80端口,然后与Host进行匹配,用来确定该后端节点是否正常

vim /etc/haproxy/haproxy.cfg
listen http_proxy 0.0.0.0:80
    mode http
    balance roundrobin
    option httpchk HEAD / HTTP/1.1\r\nHost:\ proxy.qingchen.com    # head减少网络消耗
    server web1 172.16.1.7:80 check port 80
    server web2 172.16.1.8:80 check port 80