配置:
1 2 3 4 5 6 7 8 9 10 |
resolvers mydns nameserver svr1 172.16.162.194:53 backend http_backend mode http acl acl_baidu req.hdr(host) -i www.baidu.com acl acl_beebank req.hdr(host) -i www.beebank.com use-server svr_baidu if acl_baidu use-server svr_beebank if acl_beebank server svr_baidu www.baidu.com:80 check fall 100 rise 1 resolvers mydns resolve-prefer ipv4 server svr_beebank www.beebank.com:80 check fall 100 rise 1 resolvers mydns resolve-prefer ipv4 |
其中:
- check 说明要开启健康检查
- fall 100 rise 1: 失败100次才会被自动摘掉,对于被摘掉的机器,成功1次就能挂回来
- resolvers dns: 使用指定的dns 进行解析; 如果为开启健康检查(即: check) 则该配置将不生效(这叫什么逻辑?),参考: http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.2-resolvers
- resolve-prefer ipv4: 参考ipv4地址,这个配置避免解析没有必要的ipv6, 参考: http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.3.2
字面意思来看:DNS总是会解析ipv4和ipv6的,只是Haproxy优先参考哪一个。
实测的结果是:指定了ipv4后,就不会再去解析ipv6地址了(这样效率更好)
或许dns类库也可以一下子解析出来ipv4和ipv6的