DND resolve 할 때, java 7에서는 gethostbyname_r/gethostbyaddr(_r)를 사용했지만, java 8 부터는 getaddrinfo/getaddrinfo로 바꿨다. 


https://bugs.openjdk.java.net/browse/JDK-7112670






레드햇에서는 이 이슈를 미리 발견해서 공지(https://access.redhat.com/solutions/22132)했다.


여러 서버로 바인된 도메인과 DNS RR로 설정된 경우에 대해, getaddrinfo를 호출하면 랜덤한 순서로 ip를 받지 않고,특정 ip만 리턴하여 특정 서버(또는 군)으로만 트래픽이 몰린다고 한다. 그리고, redhat 4~7까지 영향도가 있다고 적혀져 있다.



https://access.redhat.com/solutions/22132

  • DNS hostname lookups handled by the getaddrinfo(3) glibc function are no longer returned in "random" order when multiple A record answers are available in DNS.
  • Answers are sorted so some IP addresses are always returned first, thus "breaking" round-robin DNS.
  • This may also apply to entries in /etc/hosts if there are multiple entries for the same host.
  • Glibc resolver getaddrinfo(), rsh, and ssh do not try IP addresses in the order defined in /etc/hosts.





redhat 5에서는 발생했었고, 관련해서 /etc/gai.conf를 수정해서 해결되었다는 사례들이 인터넷에 있었다.


https://groups.google.com/forum/#!topic/consul-tool/AGgPjrrkw3g





하지만, centos 6.5(centos 7 포함)에서는 java 7에서 java 8 전환할 때, getaddrinfo에 따른 이슈는 발견되지 않았고, /etc/gai.conf를 수정할 일도 없었다.

Posted by 김용환 '김용환'

댓글을 달아 주세요