刷新 Ruby Rails DNS 缓存而不重新启动服务

Refresh Ruby on Rails DNS cache without restarting the service

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

特别是连接到数据库和故障转移时需要这样做。

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

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

非常感谢您的建议

根本原因是 DNS 未缓存在 Rails 中,但一旦建立连接,DNS 便不再存在。因此,如果 DNS 透明地更改,Rails 仍然附加到旧 IP。这仍然是问题所在。

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

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

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

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