我们最近在两个单独的网络模块中拆分了我们的主要网络应用程序(在https后面的EC2上运行,并在自动扩展的负载平衡器上运行)。
主要基础架构现在有一个负载均衡器和主模块的n服务器( main.elasticbeanstalk.com )和一个带有n-server的负载均衡器用于辅助模块(辅助模块.elasticbeanstalk.com )
我们已经创建了一个HAproxy专用实例,该实例由域www.mycompany.com解析并代理请求,如下所示:
- ://www.mycompany.com/ fancymodule - > secondary.elasticbeanstalk.com
- ://www.mycompany.com/ - > main.elasticbeanstalk.com
我们投入生产并在~12小时后...... http://www.mycompany.com/ fancymodule 开始获得503服务不可用。如果我手动重启HAproxy,一切都会开始工作。
我设法复制了更新与secondary.elasticbeanstalk.com相关联的IP地址的问题(例如:从负载均衡器转换为单个实例)。
似乎HAproxy没有将dns更新解析为secondary.elasticbeanstalk.com,因此它无法使用旧的ip而无法正确访问Web服务器。
并且停机时间不短!在重新启动服务之前,它无法正确路由!
负载均衡器是否可能与elasticIp相关联,因此无法再与新的ipaddress相关联?
有人可以看看这个配置并告诉我,我是不是在做一些愚蠢的事情?
CMakeLists.txt
答案 0 :(得分:1)
我发现,为了提高性能,HAproxy只需在启动时用实际的ip地址替换config的域。之后没有dns解决方案。
http://www.serverphorums.com/read.php?10,358605 https://serverfault.com/questions/681000/force-haproxy-to-lookup-dns-for-backend-server
因此,解决方案是使用HAProxy创建自动扩展负载均衡器,或者在dns ip change上使用外部侦听器自动重新加载服务
答案 1 :(得分:0)
我在将后端服务器部署在AWS中的设置中遇到了同样的问题。在内部网络中运行的HAProxy会突然关闭具有L7STS / 503检查结果的后端服务器,而我们的监视恰好是直接访问后端服务器。 当我们运行HAProxy对(LB01和LB02)时,立即重新加载LB01,后端服务器又重新启动。在LB02(未故意重新加载)上,此后端服务器仍然关闭。
所有这些似乎与AWS LB的DNS更改以及HAProxy如何进行DNS缓存有关。默认情况下,HAProxy在启动/重新加载时解析所有DNS记录(例如,用于后端)。然后,这些解析的DNS记录将保留在HAProxy自己的DNS缓存中。因此,您将必须重新启动HAProxy以更新DNS缓存。
毫无疑问,另一个更好的解决方案是定义DNS服务器和HAProxy内部DNS缓存TTL。这是可能的,因为HAProxy 1.6版带有如下配置片段:
global
[...]
defaults
[...]
resolvers mydns
nameserver dnsmasq 127.0.0.1:53
nameserver dns1 192.168.1.1:53
nameserver dns2 192.168.1.253:53
hold valid 60s
frontend app-in
bind *:8080
default_backend app-out
backend app-out
server appincloud myawslb.example.com:443 check inter 2s ssl verify none resolvers mydns resolve-prefer ipv4
因此,这样做是使用由mydns
开头的条目定义的DNS服务器定义一个名为nameserver
的DNS名称服务器集。内部DNS缓存应保留hold valid 60s
所定义的60秒。
现在,在后端服务器的定义中,通过添加resolvers mydns
来引用此DNS名称服务器集。在此示例中,最好通过添加resolve-prefer ipv4
来解析为IPv4地址(默认为使用ipv6)。
请注意,为了在后端服务器中使用resolvers
,还必须定义check
。每当触发后端服务器检查时,就会进行DNS查找。在此示例中,定义了check inter 2s
,这意味着DNS查找将每2秒发生一次。这将是很多查找。通过将内部hold
缓存设置为60秒,您可以限制DNS查询的次数,直到缓存过期;因此,最迟在62秒之后,应该会进行新的DNS查找。
从HAProxy 1.8版开始,甚至存在使用DNS SRV记录的称为“ DNS服务发现”的高级可能性。这些记录包含多个响应字段,例如优先级,权重等,可以由HAProxy解析并相应地更新后端。
更多信息: