循環 DNS 是否是實現高可用性的可能解決方案?

循環 DNS 是否是實現高可用性的可能解決方案?

假設給定網域有 2 個 IP(循環 DNS)。
如果其中一個 IP 無回應,客戶端是否會嘗試連線到另一個 IP?或者他們只是無法與網域建立通訊?

答案1

DNS 迴圈不能很好地取代負載平衡器。 DNS 伺服器將繼續分發已關閉節點的 IP,因此某些使用者將獲得您的服務,而有些則不會。

當客戶端進行DNS查詢時,DNS伺服器傳回全部與該名稱關聯的 IP 位址。神奇之處在於 DNS 伺服器會針對每個查詢輪替該清單的順序。然而,應用程式需要實現「遍歷」清單的功能,直到找到可用的 IP。有些應用程式不這樣做。

奇怪的是,Windows Telnet 就是這樣一種應用程序,它足夠智能,可以遍歷返回 IP 的連結列表。例如,如果您嘗試遠端登入 google.com,您自己就會看到此行為。你會注意到這需要一個長的到最後失敗的時候了。這是因為 google.com 有很多 IP 位址,而 telnet 用戶端會嘗試每個位址。

答案2

使用負載平衡器仍然會留下單點故障。如果您的負載平衡器離線,您的網站就會崩潰。

與上面的答案相反,大多數 HTTP 用戶端已經支援嘗試從 DNS 查詢傳回的每個 IP 位址,直到傳回有效回應。請看這裡:

http://blog.engelke.com/2011/06/07/web-resilience-with-round-robin-dns/

看來作者已經測試了以下瀏覽器,發現它們運作正常。

Windows 7 上的 Chrome 11 Windows 7
上的 Firefox 4.0 Windows 7
上的 Internet Explorer 8 Windows 7
上的 Opera 11
Windows 7 上的 Safari 5
Windows XP 上的 Internet Explorer 7(明顯延遲後)
Windows XP 上的Firefox 4.0(明顯延遲後)
Android 本機瀏覽器Android 2.3.3
iPhone 本機瀏覽器 iOS 4.3.3

使用循環法並不能實現負載平衡伺服器的所有功能,例如能夠監視兩台伺服器的回應時間,並將更多流量路由到一台伺服器(如果另一台伺服器的回應速度沒有達到應有的速度)。就彈性而言,我認為循環 DNS 可能是更好的解決方案,因為不再有單點故障。

答案3

雖然循環 DNS 通常不會回饋其提供位址的伺服器的狀態,但如果您為每個位址提供某種負載平衡器(包括基於路由器的技巧),這可能會有所幫助。

當發生故障時,有一些技巧可以更新 DNS;如果發生這種情況,具有適當短 TTL 的循環 DNS 可以成為偽負載平衡器。

相關內容