Java

[Java] JVM DNS Caching TTL 설정(networkaddress.cache.ttl)

  • -

 

도메인명에 매핑된 ip 정보가 있을 텐데 이를 캐싱처리를 하는 것이 -> DNS Caching

JVM단에서 이러한 캐싱 처리를 하고 있으니 -> JVM DNS Caching 

 

VIP, GSLB와 같은 기능을 이용하는 경우 상황에 따라서

VIP의 경우에는 RIP가 변경될 수 도 있고

GSLB의 경우에는 매핑이나 비율이 바뀌어야 되는데 

캐싱처리 영향으로 의도한 바가 정확히 동작하지 않을 수 있다.

보통의 HA(high availabilty)(고가용성)을 이루기 위해 VIP, GSLB 등을 사용한다. 

 

이러한 상황을 방지하기 위해서 TTL 설정이 필요하다.

 

설정 방법

Java 8 버전 $JAVA_HOME/jre/lib/security/java.security

8 버전 이상 $JAVA_HOME/conf/security/java.security 

networkaddress.cache.ttl=5             # 성공한 DNS 룩업에 대해 캐싱 여부
networkaddress.cache.negative.ttl # 실패한 DNS 룩업에 대해 캐싱 여부

 

설정값이 -1이면 TTL이 무한이고, 0이면 캐싱을 하지 않고 매번 조회한다는 의미이다. 

 

InetAddressCachePolicy

해당 캐시값을 처리하는 코드를 확인해 보면 아래와 같다

  • security의 설정 값을 먼저 읽고
  • 없으면
  • system의 설정 값을 읽는다 (sun.net.inetaddr.ttl)
  • 없으면
  • 디폴트 30초! 
static {
        Integer tmp = java.security.AccessController.doPrivileged(
          new PrivilegedAction<Integer>() {
            public Integer run() {
                try {
                    String tmpString = Security.getProperty(cachePolicyProp);
                    if (tmpString != null) {
                        return Integer.valueOf(tmpString);
                    }
                } catch (NumberFormatException ignored) {
                    // Ignore
                }

                try {
                    String tmpString = System.getProperty(cachePolicyPropFallback);
                    if (tmpString != null) {
                        return Integer.decode(tmpString);
                    }
                } catch (NumberFormatException ignored) {
                    // Ignore
                }
                return null;
            }
          });

        if (tmp != null) {
            cachePolicy = tmp < 0 ? FOREVER : tmp;
            propertySet = true;
        } else {
            /* No properties defined for positive caching. If there is no
             * security manager then use the default positive cache value.
             */
            if (System.getSecurityManager() == null) {
                cachePolicy = DEFAULT_POSITIVE;
            }
        }
}
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.