DNS服務器
在現實世界中,當您進行閱覽新聞、在線下單、下載文件或觀看直播時,您需要通過訪問域名來訪問目標網站,例如 youtube.com、google.com 等。您只需記住這些網站的名稱,而非它們的 IP 地址,因為與網站名稱相比,IP 地址是很難記住的。因此,您需要一個作為 DNS 服務器的網站/域名地址本。
DNS 在日常生活中非常重要。每個在線的人都需要訪問它,但同時,這對它來說也是一個非常大的挑戰。如果 DNS 服務器出現故障,整個 Internet 網絡都將關閉。
另外,上網的人分布在世界各地,如果每個人都去同一個地方訪問某個服務器,延遲會非常大。因此,DNS 服務器必須設置為高可用、高并發和分布式的。
因此,它應具有如下樹狀層次結構:
根 DNS 服務器:返回頂級域 DNS 服務器的 IP 地址。
頂級域 DNS 服務器:返回權威 DNS 服務器的 IP 地址。
權威 DNS 服務器:返回對應主機的 IP 地址。
DNS 解析過程
為了提高 DNS 解析性能,許多網絡會根據位置部署DNS 緩存服務器。DNS 解析過程如下:(這里以訪問 google.com 為例)
客戶端會發出DNS 請求,詢問 google.com 的 IP 是什么,它會先在瀏覽器緩存中查找 google.com 的 IP 地址。
然后請求將被發送到本地 DNS 服務器。本地 DNS 服務器由您的網絡服務供應商(ISP, Internet Service Provider) 自動分配,這通常是您的 ISP 提供的路由器。
本地 DNS 服務器收到來自客戶端的 DNS 請求,它會在其緩存中查找 google.com 的 IP 地址。如果它可以找到對應的條目,它將直接將 IP 地址返回給客戶端。否則,本地 DNS 服務器會詢問它的根域名服務器:“你能告訴我 google.com 的 IP 地址嗎”?根域名服務器作為最高級別的 DNS 服務器,全球共 13 臺。它不會直接解析域名,而起到一個“指路”的作用。
根 DNS 服務器收到本地 DNS 的請求,發現要查找域名的后綴是 .com,然后告訴本地 DNS 服務器:“好的,你要找的既然是 .com 后綴的域名,它是由 .com 管理的。這里是 .com 區域的頂級域 DNS 服務器的 IP 地址,去找它問吧”。
本地 DNS 服務器轉向 .com 區域的頂級域名服務器,并請求 google.com 的 IP 地址。頂級 .com 區域 DNS 服務器再次為該請求指明了方向。它提供了負責 google.com 的權威 DNS 服務器的 IP 地址。
本地 DNS 服務器然后轉向了權威 DNS 服務器并詢問 google.com 的 IP 地址。這次,google.com 的權威 DNS 服務器是域名解析結果的原始來源。它會將 google.com 的 IP 地址直接返回到本地 DNS 服務器。
然后本地 DNS 服務器將 IP返回給客戶端并將其緩存。至此,DNS 解析完成。
總結一下,我畫了下面這張圖:
DNS 負載均衡
內部負載均衡
DNS 服務器首先進行內部負載均衡。比如,應用要訪問數據庫,應該在應用中配置數據庫的 IP 地址,還是應該配置數據庫的域名呢?
很明顯,應該配置域名,因為一旦數據庫因為某種原因換到另一臺機器上,如果多個應用都配置了這個數據庫,一旦 IP 地址改變了,所有這些應用都需要重新修改。
但是,如果配置了域名,只要在 DNS 服務器中將域名映射到一個新的 IP 地址就完成了這項工作,如此大大簡化了運維工作。
在此基礎上,我們可以走得更遠。例如,如何在訪問它的多個應用程序之間進行負載均衡?只需將其配置為域名即可。在域名解析中,我們只需要配置策略,這次返回第一個 IP,下次返回第二個 IP,就可以實現負載均衡了。
全局負載均衡
為了保證我們的應用程序的高可用性,它們經常被部署在多個計算機數據中心,而每個地方都會有自己的 IP 地址。
當用戶訪問一個域名時,這個 IP 地址可以輪詢多個數據中心。如果某個數據中心由于某種原因宕機了,只要在 DNS 服務器中刪除該數據中心對應的 IP 地址即可。這樣就可以實現一定程度的高可用。
另外,我們肯定希望紐約的用戶訪問紐約的數據中心,西雅圖的用戶訪問西雅圖的數據中心,這樣客戶體驗會非常好,訪問速度會超級快。這就是全局負載均衡的概念。
我們來看看它是如何工作的,假設全國有多個地區,每個地區都有三個可用區域。
當客戶端要訪問 app.metaleap.com 時,需要將域名轉換為 IP 地址才能訪問,所以需要請求本地 DNS 解析器。
本地 DNS 解析器首先檢查本地緩存是否有此記錄。如果有,直接使用。
如果沒有本地緩存,則需要請求本地 DNS 服務器。
本地 DNS 服務器也需要檢查本地是否有緩存,如果有則返回。
如果沒有本地 DNS,需要從根 DNS 服務器遞歸查找 .com 的頂級域名服務器,直到找到 metaleap.com 的權威 DNS 服務器,交給本地 DNS 服務器。權威 DNS 服務器通常會返回真實 IP 地址。
對于不需要全局負載均衡的簡單應用,metaleap.com 的權威 DNS 服務器可以直接將域名 app.metaleap.com 解析為一個或多個 IP 地址,然后客戶端可以使用多個 IP 地址進行輪詢來實現簡單的負載均衡。
但是對于復雜的應用,尤其是跨區域、跨數據中心的大型應用,需要更復雜的全局負載均衡機制,這需要專門的設備或服務器來做這件事——全局負載均衡器(GSLB,Global Load Balancer)。
在 metaleap.com 的 DNS 服務器中,一般通過配置CNAME,給 app.metaleap.com 起一個別名,如 app.vip.metaleap.com,然后告訴本地 DNS 服務器去請求GSLB來解析域名,GSLB在解析這個域名的過程中,可以通過自己的策略來實現負載均衡。
圖中繪制了兩層GSLB,分別為數據中心和區域。我們希望不同數據中心的客戶可以訪問同一數據中心的資源,以提高吞吐量并減少延遲。
結論
DNS 是網絡世界的通訊錄,可以通過域名搜索地址,因為域名服務器是按樹狀結構組織的,所以域名搜索采用遞歸的方式,通過緩存來提升性能。
在域名和 IP 的映射過程中,應用程序有機會進行基于域名的負載均衡,可以是簡單的負載均衡,也可以是基于地址、數據中心和區域的全局負載均衡。
審核編輯 :李倩
-
服務器
+關注
關注
12文章
9029瀏覽量
85207 -
數據中心
+關注
關注
16文章
4700瀏覽量
71971 -
DNS
+關注
關注
0文章
217瀏覽量
19803
原文標題:探討 DNS 解析
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論