AWS Elasticache IP 변경으로 인한 Timeout 해결책

elasticache node 스펙 변경으로 node 교체가 되면서 이들의 private ip가 바뀌는 상황이 있었다. 다른 Spring boot 서버들이 lettuce에 elasticache configuration endpoint로 설정하여 사용중이였기에 자동 ip 전환이 되길 기대하고 있었으나 지속된 redis timeout...

lettuce에서 한번 redis ip가 설정되면 재부팅 전까지 값이 변경 되지 않는다는 걸 알게 되었다. elasticache는 한번씩 의도하지 않은 ip 변경이 있을때가 있어 luttuce에서 ip refresh를 할 수 있도록 해결책이 필요하게 되었다.

이런 저런걸 알아봤는데 우선 해결책부터
요약)
  • enablePeriodicRefresh=true 혹은 원하는 refresh interval (true로 줄 경우 60s)
  • elasticasche를 사용할 경우 dynamicRefreshSources disable
  • 아래 코드 참조
final var topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
                                                                .dynamicRefreshSources(false)
                                                                .enablePeriodicRefresh(Duration.ofSeconds(30))
                                                                .build();

final var clientOptions = ClusterClientOptions.builder()
                                              .topologyRefreshOptions(topologyRefreshOptions)
                                              .build();

return LettuceClientConfiguration.builder()
                                 .clientOptions(clientOptions)
                                 .build();

비고)
ip 캐싱이 lettuce가 하는게 아니라 jvm이 하는 것이라고 하여 관련 설정 변경해 보았으나 되진 않았다.
관련 설정은 아래 링크에 networkaddress.cache.ttl 참조
jvm option : -Dnetworkaddress.cache.ttl

댓글

이 블로그의 인기 게시물

[Protocol] WIEGAND 통신

Orange for Oracle에서 한글 깨짐 해결책

[URL] 대소문자를 구분하나?