Networking

DNS 伺服器已經使用任播。添加更多 IP 會增強可擴展性嗎?

  • May 13, 2014

RFC 1034要求我們為 DNS 伺服器分配至少兩個 IP 地址。但是,如果我們使用任播定址,則可以通過單個 IP 地址實現冗餘。BGP 任播似乎可以很好地擴展到數百甚至數千台伺服器。

如果是這樣,為什麼我們還需要 DNS 伺服器的多個 IP 地址?如果我們已經有任播,它是否真的會增強冗餘(有助於可用性),還是只是一個神話?

如果我們只使用一個 IP 地址,我們會面臨哪些問題和錯誤?

我的意思是完全省略輔助 DNS 地址,或者1.2.3.4在某些設置至少需要兩個地址時使用虛假 IP(例如 )作為第二個地址。

單個任播 IP 地址不會為您提供與不同 IP 前綴中的兩個單播 IP 地址相同的冗餘。

通常,冗餘最困難的問題不是當某件事完全失敗時,而是當它的行為不端足以仍然通過健康檢查,但實際上並不能正常執行時。

我見過一個任播 DNS 設置,其中一個 DNS 伺服器出現故障,但數據包仍會被路由到該 DNS 伺服器。任何負責廣告前綴的人可能根本不知道 DNS 伺服器已關閉。

如果所討論的 DNS 伺服器不是權威的 DNS 伺服器,而是遞歸解析器,則變得更加棘手。

這樣的遞歸解析器需要具有用於接收來自客戶端的查詢的任播地址和用於查詢權威 DNS 伺服器的單播地址。但是,如果單播地址出現故障,它很容易看起來很健康,仍然會被路由查詢。

Anycast 是一個很好的可擴展性和減少延遲的工具。但對於冗餘,它不應該單獨存在。

然而,多個冗餘任播池是一個很好的可用性解決方案。一個眾所周知的例子是 8.8.8.8 和 8.8.4.4。兩者都是任播地址,但絕不應該將它們路由到同一個物理 DNS 伺服器(假設 Google 做得很好)。

如果您有 10 台物理 DNS 伺服器,您可以將它們配置為 2 個池,每個池中有 5 個伺服器,或者配置為 5 個池,每個池中有 2 個伺服器。您希望避免一台物理 DNS 伺服器同時位於多個池中。

那麼你應該分配多少個IP呢?您需要擁有可以相互獨立配置為任播的 IP。這通常意味著您需要為每個池分配整個 /24 的 IPv4 地址空間或 /48 的 IPv6 地址空間。這很可能會限制您可以擁有的池數量。

此外,如果我們談論的是權威伺服器,那麼帶有所有 NS 記錄以及 A 和 AAAA 膠水的 DNS 回复應該適合單個 512 字節數據包。對於根伺服器,這算出 13 個地址。但這不包括膠水和 IPv6,因此您達到的數字會更低。

每個池應盡可能在地理上分佈。如果您在歐洲有 5 台伺服器,在北美洲有 5 台伺服器和 2 個任播 IP,則您不會創建一個跨越每個大陸的池。您將歐洲的 2 個與北美的 3 個放在一個池中,將另外 5 個放在另一個池中。

如果您有超過 2 個任播池,則可以讓物理伺服器臨時位於多個池中。但是您絕不應該允許物理伺服器同時位於所有池中。

組合任播和單播是可能的,但必須小心。如果您有兩個池的 IP,我不會合併。但是,如果您只有一個任播 IP 可以使用,那麼還包括單播 IP 可能是有意義的。問題是包含單播 IP 不會給您帶來良好的延遲和負載平衡。

如果物理伺服器同時通過單播和任播提供,您可能會冒著使用者訪問與主伺服器和輔助伺服器相同的伺服器的風險,並且如果它出現故障,您可能會失去訪問權限。這可以通過僅使用不在任播池中的伺服器的單播地址或始終為使用者提供兩個單播地址來避免。

您放入組合中的單播地址越多,發送到任播地址的查詢就越少,您從任播中獲得的延遲和可擴展性方面的好處就越少。

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