Проблема с подключением к базе данных после отработки отказа - PullRequest
0 голосов
/ 03 октября 2018

У нас есть кластер серверов Tomcat в AWS BeansTalk, подключенный к AWS RDS (MySQL) с доступностью Multi-AZ.

Несколько дней назад к экземпляру RDS было применено исправление для ОС, которое вызвало аварийное переключениев другой экземпляр RDS на основе доступности Multi-AZ.

В результате система производства работала в течение нескольких часов (это было ночью), пока мы не перезапустили Tomcats в каждом экземпляре.У нас были тысячи Connection refused ошибок в базе данных.

Согласно поддержке AWS, при запуске экземпляра аварийного переключения конечная точка остается той же, но ее IP-адрес изменяется, и мои Tomcats кэшировали старый IP-адрес.Поэтому после перезапуска Tomcat кэш был очищен, использовался новый IP и проблема с подключением была решена.Они направляют меня к этому вопросу SO .

Это имеет большой смысл, однако я не смог воспроизвести проблему в контролируемом тесте с тем же приложением в Production.

Я изменил IP-адрес домена в / etc / hosts, и мой текущий Tomcat BeansTalk Production обнаружил изменение IP-адреса спустя 30 секунд, поэтому он должен был также обнаружить изменение IP-адреса конечной точки RDS.

Свойство Java ttl в моей среде BeansTalk установлено следующим образом:

#networkaddress.cache.ttl=-1

Таким образом, по умолчанию для кэша требуется 30 секунд, что соответствует моему эксперименту.

[EDIT] Как указывалось в комментариях, я пытался смоделировать аварийное переключение через DNS.В этом случае я изменил запись CNAME с домена на другой домен.Я провел тот же тест, и Tomcat снова обнаружил изменение через 30 секунд.

Есть ли у вас какие-либо идеи, почему в этом случае изменение IP-адреса конечной точки RDS не было обнаружено Tomcat / JVM?

...