Обновление DNS-кэша Ruby on Rails без перезапуска службы - PullRequest
0 голосов
/ 08 мая 2019

Я ищу такой же параметр, как и networkaddress.cache.ttl для JVM.Установка этого значения гарантирует, что записи DNS обновляются через некоторый интервал.

В частности, это необходимо для подключения к базе данных и в целях восстановления после отказа.

Если я изменяю IP имени хоста mysql-master в /etc/hosts (или DNS-сервер), Rails все еще пытается использовать старый IP-адрес.

Единственное, что помогает, это перезапуск Rails, который является дорогим вариантом.

Большое спасибо за совет

1 Ответ

0 голосов
/ 19 мая 2019

Основной причиной является то, что 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 и, возможно, другие облачные провайдеры автоматически решают за вас.

Подробнее о том, как новый IP-адрес может быть принудительно разрешен из DNS: https://github.com/ankane/distribute_reads/issues/24

...