在不重新启动服务的情况下刷新Ruby on Rails DNS缓存

时间:2019-05-07 22:18:30

标签: ruby-on-rails caching networking dns failover

我正在寻找与networkaddress.cache.ttl类似的JVM参数。设置此值可确保在一段时间后刷新DNS条目。

特别是,这对于连接数据库和故障转移是必需的。

如果我在mysql-master(或DNS服务器)中更改了主机名/etc/hosts的IP,Rails仍会尝试使用旧的IP地址。

唯一有用的是Rails重新启动,这是一个昂贵的选择。

非常感谢您的建议

1 个答案:

答案 0 :(得分:0)

根本原因是DNS没有在Rails中缓存,但是一旦建立了连接,DNS就不再在等式中了。因此,如果DNS透明更改,Rails仍将附加到旧IP。但这仍然是问题。

诀窍是使用https://github.com/sonots/mysql2-reconnect_with_readonly gem。这样就可以重新连接会话。

在裸机上,如果以SET GLOBAL read_only = ON;为例将连接路由到另一个实例,则需要执行SET GLOBAL read_only = OFF;mysql

在AWS RDS上,可能还会为您自动解决其他云提供商。

更多详细信息如何强制从DNS解析新IP: https://github.com/ankane/distribute_reads/issues/24