我正在寻找与networkaddress.cache.ttl
类似的JVM参数。设置此值可确保在一段时间后刷新DNS条目。
特别是,这对于连接数据库和故障转移是必需的。
如果我在mysql-master
(或DNS服务器)中更改了主机名/etc/hosts
的IP,Rails仍会尝试使用旧的IP地址。
唯一有用的是Rails重新启动,这是一个昂贵的选择。
非常感谢您的建议
答案 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