Haproxy中的后端服务器server的使用

server的设置包括server和default-server两种,这两种区别在于default-server是多组server的公用设置。一般涉及到多组服务器,可以设置公用default-server,其他的server将继承default-server的设置。

官方的参考文档:http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#5.2-addr

这2个命令的设置格式:

server <name> <address>[:port] [settings ...]
default-server [settings ...]

其中name、address是必须的,port是可选,省略的话,默认是80端口。

Tips 1:请注意以下2种设置的区别,

port设置的健康检查的端口

server  web1 192.168.80.121 port 8080 check //请求转发到80端口,而健康检查是8080端口
server  web2 192.168.80.122:8080 check //请求转发和健康检查都是用8080端口
但不能设置成
web1 192.168.80.121,设置成这种格式将无法启动haproxy

下面逐个介绍下setting,一般情况下setting可以在server和default-server中通用,如果有个别不通用的设置,我将标识出来。

  • addr <ipv4|ipv6>、port <port>

default-server:addr 不支持,port 支持,这也说明,健康检查只能是针对某一个特定的后端服务器。

健康检查的专用地址和端口,如果未设置,将使用后端的服务器地址和端口。
举例说明:

//后端服务使用192.168.80.121:80 ,而健康检查使用 192.168.80.122:8080
server  web1 192.168.80.121 addr 192.168.80.122 port 8080 check

default-server port 80
server  web1 192.168.80.121 check
server  web2 192.168.80.122:8080 port 8080 check
//上面的三行设置web1使用80端口检查,web2是使用8080端口检查
  • agent-check、agent-port、agent-inter <delay>
    agent-send <string>

本人暂时没有弄懂,如果有朋友知道,欢迎在评论中补充
官方的解释:http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#5.2-agent-check

  • backup

default-server:不支持

使用一台服务器作为备份服务器。举例说明

option httpchk GET /index.html
default-server port 80
server  web1 192.168.80.121 check
server  web2 192.168.80.122 port 8080 check backup

#当121停止服务后,122将接收请求

Tips 1:尽管是备份服务器,如果设置了 check ,依然会执行健康检查.

Tips 2:如果有2组以上备份服务器,当所有的非备份服务器停止后,第一个备份服务器将启用(和顺序有关)

option httpchk GET /index.html
default-server port 80
server  web1 192.168.80.121 check
server  web2 192.168.80.122 port 8080 check backup
server  web2 192.168.80.123 port 8080 check backup

#当121停止后,122继续服务,123继续保持备份,只有当122也停止服务后,123才启用

Tips 3:如果非备份服务器停止后,想启用所有的备份服务器,则需要使用 option allbackups ,no option allbackups,这2行设置表示启用/禁止全部的备份服务器。

option allbackups
option httpchk GET /index.html
default-server port 80
server  web1 192.168.80.121 check
server  web2 192.168.80.122 port 8080 check backup
server  web2 192.168.80.123 port 8080 check backup

#当121停止服务后,122 123同时启用
option allbackups
no option allbackups
option httpchk GET /index.html
default-server port 80
server  web1 192.168.80.121 check
server  web2 192.168.80.122 port 8080 check backup
server  web2 192.168.80.123 port 8080 check backup

#当121停止服务后,依旧只有122启用服务
  •  ca-file <cafile>

default-server:不支持

该设置只支持OpenSSL时可用。它指定的PEM文件加载CA证书用于验证服务器的证书。

  • check

default-server:不支持

启用后端服务器的健康检查。

Tips 1:这个设置将结合inter、rise、fall 使用。

Tips 2:请求的检查,将使用 httpchk、smtpchk、mysql-check、pgsql-check、ssl-hello-chk、redis-chk 其中的一种,当然了httpchk、mysql-check频率较高。

  • check-send-proxy

default-server:不支持

  • check-ssl

default-server:不支持

  • ciphers <ciphers>

default-server:不支持

  •  cookie <value>

default-server:不支持

  •  crl-file <crlfile>

default-server:不支持

  • crt <cert>

default-server:不支持

  • disabled

default-server:不支持

  • error-limit <count>、on-error <mode>、observe <mode>

  • force-sslv3、force-tlsv10、force-tlsv11、force-tlsv12

default-server:不支持

  • id <value>

default-server:不支持

  • namespace <name>

  • maxconn <maxconn>、maxqueue <maxqueue>
    minconn <minconn>

  • inter <delay>、fastinter <delay>、downinter <delay>
    rise <count>、fall <count>

这个5个设置都和健康检查相关。

  • inter <delay>:设定健康状态检查的时间间隔,单位为毫秒,默认为2000;也可以使用fastinter和downinter来根据服务器端状态优化此时间延迟;
  • fastinter <delay>:过渡上架、过渡下架的检查时间间隔。
  • downinter <delay>:当后端服务器下架后,检查的时间间隔。
  • rise <count>:设定健康状态检查中,某离线的server从离线状态转换至正常状态需要成功检查的次数;
  • fall <count>:确认server从正常状态转换为不可用状态需要检查的次数。

举例说明:

server  web1 192.168.80.121:80 check fastinter 10s downinter 60s rise 3 fall 3

下面来看根据上面的设置,来看服务器上线、下线产生的日志,主要看时间的变化。

[20/Feb/2017:03:30:20 +0000] "GET /index.html HTTP/1.0" 200  //正常运行每2s检查一次
[20/Feb/2017:03:30:22 +0000] "GET /index.html HTTP/1.0" 200  
[20/Feb/2017:03:30:24 +0000] "GET /index.html HTTP/1.0" 200
[20/Feb/2017:03:30:26 +0000] "GET /index.html HTTP/1.0" 200
[20/Feb/2017:03:30:28 +0000] "GET /index.html HTTP/1.0" 200
[20/Feb/2017:03:30:30 +0000] "GET /index.html HTTP/1.0" 404 //第一发现404,准备下架
[20/Feb/2017:03:30:40 +0000] "GET /index.html HTTP/1.0" 404 //第二次发现404,隔10s
[20/Feb/2017:03:30:50 +0000] "GET /index.html HTTP/1.0" 404 //第三次发现404,隔10s
[20/Feb/2017:03:31:50 +0000] "GET /index.html HTTP/1.0" 404 //下架完成,检查间隔60s
[20/Feb/2017:03:32:50 +0000] "GET /index.html HTTP/1.0" 404 //下架检查60s
[20/Feb/2017:03:33:50 +0000] "GET /index.html HTTP/1.0" 404 //下架检查60s
[20/Feb/2017:03:34:50 +0000] "GET /index.html HTTP/1.0" 200 //第一次发现200,准备上架
[20/Feb/2017:03:35:00 +0000] "GET /index.html HTTP/1.0" 200 //第二次发现,间隔10s
[20/Feb/2017:03:35:10 +0000] "GET /index.html HTTP/1.0" 200 //第三次发现,间隔10s
[20/Feb/2017:03:35:12 +0000] "GET /index.html HTTP/1.0" 200 // 上架完成每2s检查一次
[20/Feb/2017:03:35:14 +0000] "GET /index.html HTTP/1.0" 200
[20/Feb/2017:03:35:16 +0000] "GET /index.html HTTP/1.0" 200

也可以设置在global-default中,如下:

default-server port 8080 weight 1 inter 2000 downinter 60s rise 3 fall 3
server  web1 192.168.80.121:80 check
  • init-addr {last | libc | none | <ip>},[…]*

  • no-ssl-reuse、no-sslv3、no-tls-tickets
    no-tlsv10、no-tlsv11、no-tlsv12、non-stick

  • on-marked-down <action>、on-marked-up <action>

  • redir <prefix>

default-server:不支持

  • resolve-prefer <family>
    resolve-net <network>[,<network[,…]]
    resolvers <id>

这三个都是和Haproxy中的 DNS 相关的,其中 resolve-net 还没有找到相关的资料,resolvers 和 resolve-prefer都比较好理解。

Tips 1:这个地方设置和 resolvers 的语句、语法是相关的,推荐阅读文章:Haproxy中DNS的解析配置

Tips 2:举例说明

resolvers mydns
    nameserver dns1 192.168.80.1:53
    resolve_retries       3
    timeout retry         1s
    hold other           30s
    hold refused         30s
    hold nx              30s
    hold timeout         30s
    hold valid           10s
server  web1 121.100.com check resolvers mydns resolve-prefer ipv4
  • send-proxy

  • send-proxy-v2

  • send-proxy-v2-ssl

  • send-proxy-v2-ssl-cn

  • slowstart <start_time_in_ms>

  • sni <expression>

  • source <addr>[:<pl>[-<ph>]] [usesrc { <addr2>[:<port2>] | client | clientip } ]
    source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
    source <addr>[:<pl>[-<ph>]] [interface <name>] …

  • ssl

  • tcp-ut <delay>

  • track [<proxy>/]<server>

  • verify [none|required]、verifyhost <hostname>

default-server:不支持

  • weight <weight>

后端服务器组的负载权重,默认值是1,设置范围在0-256之间,设置为0表示不参与负载。

举例说明:

option httpchk GET /index.html
default-server port 8080 weight 2
server  web1 192.168.80.121 check weight 5 //权重5:9
server  web2 192.168.80.122 check  //权重2:9
server  web2 192.168.80.123 check  //权重2:9

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>