Domain-Name-System

Java 和 /etc/resolv.conf DNS 伺服器故障轉移

  • September 19, 2019

執行摘要

  • resolv.conf如果第一個失敗或超時,Java 是否會查詢下一個名稱伺服器條目?
  • Java 將考慮解析器“關閉”的預設超時是多少?

細節

/etc/resolv.conf大多數站點中,配置了多個 DNS 伺服器供系統使用。如果列表中的第一個 DNS 伺服器出現故障,任何人都可以澄清使用 Java 會發生什麼嗎?例如,想像以下情況resolv.conf

nameserver 8.8.8.8
nameserver 4.4.4.4

如果 8.8.8.8 變得無法訪問,那麼 Java 會嘗試 4.4.4.4 嗎?根據我們的經驗,它沒有 - 我們看到許多執行緒在等待解析 DNS 名稱,即使備份 DNS 伺服器是可訪問的。

在 Linux 上,java 會將主機名解析委託給進行實際解析的底層 C 系統庫。

在查詢 /etc/nsswitch.conf 中指定的其他資訊源之後,將按照 /etc/resolv.conf 中指定的順序查詢名稱伺服器(想想 /etc/hosts,但可能是 NIS 或 LDAP)。

您可以在 /etc/resolv.conf 中指定超時值,根據手冊頁,預設值為 5 秒。

如果您的第一個伺服器提供有效的錯誤程式碼即 servfail,則不會查詢第二個名稱伺服器

引用自:https://serverfault.com/questions/578082