HAProxy配置文件详解和ACL功能(6)

在没有匹配的"use_backend"规则时为实例指定默认后端。在"frontend"和"backend"之间进行内容交换时,通常使用"use-backend"定义匹配规则;而没有被规则匹配到的请求将由此参数指定的后端接收。

例如,已有两组backend,名称分别为dynamic和static,当不匹配use_backend时将默认使用dynamic作为转发后端。

use_backend    dynamic  if  url_dyn
use_backend    static  if  url_css url_img extension_img
default_backend dynamic

1.4.11 server和default-server

server <name> <address>[:port] [param*]
声明后端server,因此不能用于defaults和frontend区段。
default-server [param*]
指定server的默认参数值,不能用于frontend区段

-<name>:为此服务器指定的内部名称,将出现在日志及警告信息中;

<address>:此服务器的IPv4地址,也支持使用可解析的主机名;
[:port]:haproxy将请求转发至后端服务器的哪个端口,为可选项;未设定时,将使用客户端请求时的同一端口;
[param*]:为此服务器设定的一系列参数;可用的参数非常多,下面是几个常用的参数;

服务器或默认服务器参数:

backup:设定为备用服务器,当其它所有后端server均不可用时将启用此server;

disabled:禁用此后端服务器。

check:启动对此server执行健康状态检查,但需要配合定义在backend的具体检查方法(如httpcheck,mysql-check)才会进行指定的检查方式,不指定检查方法时将默认以tcp方式检查。check可以借助于额外的参数完成更精细的设定,如:

inter <delay>:设定健康状态检查的时间间隔,单位为毫秒,默认为2000;

rise <count>:设定server从离线状态重新上线需要成功检查的次数;不指定默认为2,一般可设置为1。

fall <count>:确认server从正常状态转换为不可用状态需要检查的次数;默认为3。

cookie <value>:为指定server设定cookie值,指定的值将在请求入站时被检查,第一次为此值挑选的server将在后续的请求中被选中,其目的在于实现基于客户端cookie的持久连接;

maxconn <maxconn>:指定此后端服务器接受的最大并发连接数(不同于全局设置的maxconn,全局的maxconn是面向客户端的);如果发往此服务器的连接数高于指定的值,将被放于请求队列以等待其它连接释放;

maxqueue <maxqueue>:设定请求队列的最大长度;

observe <mode>:通过观察服务器的通信状况来判定其健康状态,默认禁用,支持的类型有"layer4"和"layer7",layer4表示检查tcp连接是否正常,layer7仅用于http代理场景,通过后端server发送的response来判断,例如可以判断状态码,响应报文头部是否无法解析等;

redir <prefix>:启用重定向功能,将发往此服务器的GET和HEAD请求均以302状态码响应,意味着不会将请求转发至后端服务器;在prefix后面不能使用/,且不能使用相对地址;例如:

server srv1 192.168.1.1:80 redir check

weight <weight>:权重,默认为1,最大值为256,0表示不参与负载均衡,即认为下线了不进行调度;

关于maxconn和maxqueue,这两个值都是此后端服务器的值。它们的大小和全局定义的maxconn是有一定大小比较关系的。如果没有定义maxqueue,则全局maxconn应该小于或等于后端所有服务器的maxconn之和,如果定义了maxqueue,则需要小于或等于后端所有服务器的maxconn和maxqueue之和。否则haproxy接收进来的请求超过后端服务器的压力极限,可能压垮后端。

例如:

server first  10.1.1.1:1080 cookie first  check inter 1000
server second 10.1.1.2:1080 cookie second check inter 1000
server backup "${SRV_BACKUP}:1080" backup
server www1_dc1 "${LAN_DC1}.101:80"
server www1_dc2 "${LAN_DC2}.101:80"
default-server inter 1000 weight 13

1.4.12 option httpchk

option httpchk
option httpchk <uri>
option httpchk <method> <uri>
option httpchk <method> <uri> <version>
不能用于frontend段。

此指令表示基于http协议来做健康状况检查,只有返回状态码为2xx或3xx的才认为是健康的,其余所有状态码都认为不健康。不设置该选项时,默认采用tcp做健康检查,只要能建立tcp就表示健康。

uri:检查的uri路径,默认为"/"。接受带有查询参数的uri

method:http检查时使用的METHOD。不指定时默认为"OPTIONS"方法,也建议采用此方法,因为该请求方法对服务器造成的资源损耗最小。

version:检查的http协议版本,默认为http/1.0,但现在很多都采用HTTP/1.1,因此此处检查版本需要修改为HTTP/1.1,但对于该版本的HTTP协议来说,还强制要求指定Host,中间使用\r\n隔离。

例如下面的配置,会将健康检查时的页面请求发送至后端192.168.1.1的80端口来确定该后端是正常的,但客户端的请求将转发至该后端的443端口。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8859b78c5f683a11c8d486dc0ccf0c06.html