默认情况下,Haproxy中的server的配置行是支持 HostName 的,并在 haproxy 中启动后,解析hostName得到IP地址,并将IP地址缓存到 haproxy 整个生命期,但这种情况会出现一个问题,如果后端服务器的hostName的 IP 更改了,无法更新已缓存的 IP 。此时haproxy就无法访问该后端服务器了,本文解决的就是这个问题。在Haproxy增加 DNS的解析设置,并在每次健康检测的时候,解析HostName,并验证。这样一旦后端服务器 HostName 对应的IP 更改了,也能在健康检测的周期内,更新缓存中的IP地址。
一、resolvers 语句语法
resolvers mydns
nameserver dns1 192.168.80.1:53
nameserver dns2 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
二、配置项解释
resolvers <resolvers id>
创建一个新的NS列表,id表示列表的标签(或叫名称、ID)。
nameserver <id> <ip>:<port>
id:NS的标识(或叫名称、ID)。
ip:不解释。
port:一般都是53。
resolve_retries <nb>
失败重试的次数,默认是3次。
timeout retry <time>
两次查询的超时设置,默认1s
hold <status> <period>
各种超时之类的设置。