我们在AWS BeansTalk中有一个Tomcat服务器集群,该集群连接到具有多可用区可用性的AWS RDS(MySQL)。
几天前,RDS实例已将一个补丁应用于操作系统,该补丁基于多可用区可用性触发了故障转移到另一个RDS实例。
结果是一个生产系统在数小时内(晚上)停机,直到我们在每个实例中重新启动Tomcat。我们在数据库中有成千上万的{{1}}错误。
根据AWS支持,启动故障转移实例时,端点是相同的,但是其IP已更改,并且我的Tomcats已缓存了旧IP。因此,在重新启动Tomcat之后,清除了缓存,使用了新IP,并解决了连接问题。他们向我推荐了这个question。
这很有道理,但是我无法在生产中具有相同应用程序的受控测试中重现该问题。
我更改了/ etc / hosts中域的IP,并且我当前的BeansTalk Production Tomcat在30秒后检测到IP更改,因此它也应该也检测到RDS端点IP更改。
我的BeansTalk环境中的Java ttl属性设置为:
Connection refused
因此,默认情况下,它需要30秒的缓存时间,与我的实验相符。
[EDIT] 如评论中的建议,我尝试通过DNS模拟故障转移。在这种情况下,我已将CNAME记录从一个域更改为另一个域。我进行了相同的测试,Tomcat在30秒后再次检测到了更改。
您是否知道为什么在这种情况下Tomcat / JVM未检测到RDS端点IP更改?