Amazon Web Services

[RDS] Failover 시, WAS 또는 Java Demon에서 Connection Pool 다시 맺게하는 방법.

혀뇽뇽이·2018년 11월 21일·조회 7,549

 EC2에서 Tomcat 과 같은 WAS나 JAVA Demon을 이용하여서 RDS와 연결을 하여 사용하는 경우가 많다.

 RDS가 Failover가 되면, WAS에서 이를 감지하지 못해서 Failover된 RDS로 연결을 못하고 15~20분동안 Connection Fail만 발생하는 경우가 있다.

 이 경우는 WAS에서 RDS의 URL만 바로보고 nslookup 한 IP를 저장한다. 

 그리고 이 IP로 계속 Connection을 때리기에 Failover된 RDS로 바로 붙지를 못한다.

 이럴 경우, 다음의 링크에 있듯이 JAVA의 DNS TTL 을 조정해 주면 해결을 할 수 있다.

  https://www.lesstif.com/pages/viewpage.action?pageId=17105897

 AWS에서도 이와 같은 방법을 제안하고 있으니 같이 보기를 바란다.

 https://aws.amazon.com/ko/articles/honoring-dns-ttls/

댓글 4

로그인 후 댓글을 남길 수 있습니다.

  • ScandinaviaScandinavia· 2018년 11월 23일
    Route53의 DNS 레코드에 대한 업데이트 고정값이 60초인것으로 알고있는데요. JAVA의 DNS TTL 값을 60초이내로 줄여주면 일반적인 RDS Failover 수행시 60+60초 이내로 수행될 것 같네요.
  • 혀뇽뇽이혀뇽뇽이· 2018년 11월 26일
    WAS에서는 20분정도는 지나야 Failover된 RDS로 붙는 것으로 보아, 위의 설정이 정상적으로 반영이 된다면 2분 이내도 만족스러울 수 있겠네요. 하지만, 테스트를 해본 결과 저 설정을 하여도 Failover 된 RDS로 못 붙는 현상이 나타났습니다. RDS DNS Lookup 하다가 IP가 바뀌면 JAVA를 reboot 시키는 스크립트를 만들거나, RDS에서 Failover 시 SNS를 통해 알림을 보내어서 Lambda나 codedeploy로 reboot 시키게 하는 방법이 좋을 수도 있을 거 같네요.
  • stdio.hstdio.h· 2018년 11월 29일
    "하지만, 테스트를 해본 결과 저 설정을 하여도 Failover 된 RDS로 못 붙는 현상이 나타났습니다." 라는 것은 자바 레벨에서의 DNS TTL이 의도한대로 동작하지 않았다는 뜻이겠지요? 혹시 자바 환경은 무엇인지요? 톰캣 같은 WAS인 것인지?
  • 혀뇽뇽이혀뇽뇽이· 2018년 12월 4일
    Tomcat을 사용한 환경에서 테스트를 하였습니다.