HAProxy后端CNAME指向变更后需重启,如何实现运行时解析?
HAProxy实现CNAME动态解析配置方案
问题根源
HAProxy默认在启动阶段一次性解析DNS记录并缓存,后续不会自动刷新,因此当CNAME指向的EC2实例变更时,必须重启HAProxy才能获取新的IP。
修改后的配置
在现有配置基础上添加解析器配置,并修改server参数开启动态解析:
global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats mode 777 # 定义DNS解析器(使用VPC默认DNS,可根据实际调整) resolvers mydns nameserver vpc-dns 10.0.0.2:53 # AWS VPC默认DNS地址为VPC网段的第二个IP,比如10.0.0.2 resolve_retries 3 timeout resolve 1s timeout retry 1s hold valid 10s # DNS记录缓存有效期,到期自动重新解析 listen myserver bind 0.0.0.0:443 timeout connect 96h timeout client 96h timeout server 96h mode tcp # 开启动态解析,指定解析器,设置定期解析间隔 server singleserver private.hostedzone.cname:443 resolve resolvers mydns resolve-opts allow-dup-ip resolve-interval 30s
关键参数说明
resolvers mydns:自定义DNS解析规则,指定使用的DNS服务器(这里用VPC内置DNS,确保能解析私有域名)hold valid 10s:控制DNS记录的缓存时长,到期后HAProxy会自动重新查询resolve:开启该后端服务器的动态DNS解析功能resolvers mydns:绑定上述定义的解析器resolve-interval 30s:设置定期重新解析域名的间隔时间resolve-opts allow-dup-ip:允许同一域名解析到重复IP(适用于实例替换场景,可选)
效果验证
配置修改后,无需重启HAProxy(可通过socat /var/lib/haproxy/stats - <<< "reload"热加载配置),当CNAME指向的EC2变更时,HAProxy会在设定的间隔内自动解析新的IP并切换连接。
内容的提问来源于stack exchange,提问作者rodrigocf
相关产品推荐
相关产品推荐

