1. 程式人生 > >[多活] 分散式、多活資料中心如何實現DNS域名解析和負載均衡?

[多活] 分散式、多活資料中心如何實現DNS域名解析和負載均衡?

640?wx_fmt=png&wxfrom=5&wx_lazy=1

0?wx_fmt=gif&wxfrom=5&wx_lazy=1

      關於雙活技術和業界主流方案,應大家要求做了分析和分享(參考歷史發文),為了幫助大家進一步理解,特意重要知識點做了梳理和細化,並整理成文。由於平時工作繁忙,只有利用週末時間寫寫文章,為了表示對我付出的認可,整理成文的“業界主流資料中心儲存雙活完全解析”需要收取一些費用,通過這種方式,也希望把自己的心血傳遞到真正需要的人手中,文章目錄如下。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

0?wx_fmt=png

0?wx_fmt=png

      請需要的小夥伴通過原文連結獲取。今天的話題將帶你從雙活資料訪問層面,談談域名解析和負載均衡。

      DNS域名解析是B/S應用架構的一項重要服務,C/S架構應用一般是通過IP地址直接訪問服務的。在雲端計算時代,業務主要通過B/S、分散式、多活的架構提供

。然而對於網站運營和服務提供商來說,DNS域名解析的穩定可靠,意味著更好的業務體驗,更好更大的訪問流量。

      隨著雲端計算和分散式系統的發展,DNS在多資料中心、分散式應用架構中負載均衡和故障轉移應用中越來越重要,今天我們對DNS概念、應用和原理進行梳理和解析

     DNS是網際網路上作為域名和IP地址相互對映的一個分散式資料庫。DNS能夠使使用者更方便的訪問網路和應用,而不用去記憶雜亂、繁瑣的IP數串。通過域名,最終得到該域名對應的IP地址的過程叫做域名解析。下面這張圖,詳細說明了一個DNS域名解析的全過程。

0?wx_fmt=jpeg

  • 1、通常,在電腦開啟瀏覽器,輸入一個域名。比如輸入www.163.com,這時電腦會發出一個DNS請求到本地DNS伺服器。本地DNS伺服器一般是網路接入伺服器商提供,比如中國電信,中國移動。

  • 2、查詢www.163.com的DNS請求到達本地DNS伺服器之後,本地DNS伺服器會首先查詢它的快取記錄,如果快取中有此條記錄,就可以直接返回結果。如果沒有,本地DNS伺服器還要向DNS根伺服器進行查詢。

  • 3、根DNS伺服器沒有記錄具體的域名和IP地址的對應關係,而是告訴本地DNS伺服器,你可以到域伺服器上去繼續查詢,並給出域伺服器的地址。

  • 4、本地DNS伺服器繼續向域伺服器發出請求,在這個例子中,請求的物件是.com域伺服器。.com域伺服器收到請求之後,也不會直接返回域名和IP地址的對應關係,而是告訴本地DNS伺服器,你的域名的解析伺服器的地址。

  • 5、最後,本地DNS伺服器向域名的解析伺服器發出請求,這時就能收到一個域名和IP地址對應關係,本地DNS伺服器不僅要把IP地址返回給使用者電腦,還要把這個對應關係儲存在快取中,以備下次別的使用者查詢時,可以直接返回結果,加快網路訪問。

      實際上,因特網上的DNS伺服器也是按照層次安排的。每一個域名伺服器只對域名體系中的一部分進行管轄。根據域名伺服器所起的作用,可以把域名伺服器劃分為根域名伺服器、頂級域名伺服器、許可權域名伺服器和本地域名伺服器四種不同的型別。

      根域名伺服器是最高層次的域名伺服器,也是最重要的域名伺服器。所有的根域名伺服器都知道所有的頂級域名伺服器的域名和IP地址。不管是哪一個本地域名伺服器,若要對因特網上任何一個域名進行解析,只要自己無法解析,就首先求助根域名伺服器。所以根域名伺服器是最重要的域名伺服器。假定所有的根域名伺服器都癱瘓了,那麼整個DNS系統就無法工作。

     我們在配置DNS解析的時候,需要指定DNS解析的TTL(Time To Live)引數,這個引數告訴本地DNS伺服器,域名快取的最長時間。用阿里雲解析來舉例,阿里雲解析預設的TTL是10分鐘,10分鐘的含義是本地DNS伺服器對於域名的快取時間是10分鐘,10分鐘之後,本地DNS伺服器就會刪除這條記錄,刪除之後,如果有使用者訪問這個域名,就要重複一遍上述複雜的流程。

      如果網站已經進入穩定發展的狀態,不會輕易更換IP地址,我們完全可以將TTL設定到協議最大值,即24小時。帶來的好處是,讓域名解析記錄能夠更長時間的存放在本地DNS伺服器中,以加快所有使用者的訪問。

      分散式、多活資料中心對外提供資料服務時,還會涉及到另外一個引數RTT(Round Trip Time)。分佈在物理上A、B隔離兩個區域的資料中心同時對外提供服務時,客戶的服務請求是由A資料中心,還是由B資料中心響應,這就要看在DNS解析過程中,決定於解析過程中那個訪問帶來的RTT更小。下面一起通過一個例項來分析下技術原理。

0?wx_fmt=png

  • 1、首先客戶端向其所在運營商的Local DNS發起www.abc.com域名的DNS請求。

  • 2、運營商的Local DNS伺服器從RootDNS得知www.abc.com由DNS-CTC、DNS-CNC、DNS-USA1和DNS-USA2來解析,即RootDNS同時返回此4個DNS伺服器地址給Local DNS(DNS的工作原理要求返回所有關於請求的記錄,在此即返回4個DNS伺服器,如果只返回一個DNS而此DNS剛好中斷服務了,那麼Local DNS只能是解析失敗了);

  • 3、Local DNS輪詢向這4個DNS伺服器發出域名解析的請求,直到返回資料。

  • 4、在此,假如DNS-CTC響應Local DNS的域名解析請求,同時返回2臺GTM的地址(本地監聽的Web服務)。

  • 5、收到Local DNS請求的GTM首先查詢在本地是否有該Local DNS的就近性表項,如果存在則直接給Local DNS返回速度最快的伺服器地址。如果不存在,則通知另外一臺GTM發起對該Local DNS的查詢。

  • 6、兩臺DNS分別對Local DNS進行Probe。例如GTM-A查詢該Local DNS的RTT時間為50ms,而GTM-B查詢同一Local DNS的RTT時間為100ms,則此時在兩臺GTM內都形成了該Local DNS的對應就近性表記錄。

  • 7、根據就近原則,Local DNS請求的GTM-A根據系統的就近性表返回相應的Data Center內的Web伺服器地址(即1.1.1.1)。

  • 8、Local DNS獲得地址後,將該地址返回給使用者,到此DNS請求過程結束。

  • 9、使用者向www.albc.com(1.1.1.1)網站發起訪問。

      分散式、多活資料中心中,一個域名對應兩個業務IP地址,分別部署在兩個資料中心。通過GSLB或DNS實現站點間的訪問負載均衡。

0?wx_fmt=png

      GSLB可以採用專用的F5 GTM裝置,如果業務量小,也可以採用windows自帶的DNS伺服器,實現簡單負載均衡(輪詢),GSLB跨站點負載均衡策略通常有兩種。

  • 1. 基於Local DNS請求所在的地理位置。

  • 2. 基於GSLB與Local DNS的RTT最小。

      GSLB在整個網路範圍內將使用者的請求定向到最近的節點(或者區域),主要採用就近性判斷,主要的方法包括DNS、應用層重定向、傳輸層重定向等。然而,SLB大多在一個服務節點範圍內,根據裝置節點的健康性、當前負載、服務能力、分佈等情況將使用者的請求分配到一個具體服務節點裝置。

      整理成文的“業界主流資料中心儲存雙活完全解析”分析資料連結如下,請需要的小夥伴通過原文連結獲取。

溫馨提示:
請搜尋“ICT_Architect”“掃一掃”下面二維碼關注公眾號,獲取更多精彩內容。

640?wx_fmt=png

專注做一個有情懷的技術分享平臺

0?wx_fmt=gif