關于DNS負載均衡技術
在學習負載均衡技術的時候,我們肯定會學到DNS負載均衡的相關內容,因為這個是負載均衡的一個代表應用。那么說到應用,到底是如何進行使用,改善網絡問題的呢?那么本文就將為大家詳細介紹一下其中的原理。
為了建立一個高負載的Web站點,必須使用多服務器的分布式結構。上面提到的使用代理服務器和Web服務器相結合,或者兩個Web服務器相互協作的方式也屬于多服務器的結構,但在這些多服務器的結構中,每個服務器所起到的作用是不同的,屬于非對稱的體系結構。非對稱的服務器結構中每個服務器起到的作用是不同的,例如一個服務器用于提供靜態網頁,而另一個用于提供動態網頁等等,這樣就使得網頁設計時就需要考慮不同服務器之間的關系,一旦要改變服務器之間的關系,就會使得某些網頁出現連接錯誤,不利于維護,可擴展性也差。
另外一種多服務器的設計結構為對稱結構,在對稱結構中每臺服務器都具備等價的地位,都可以單獨對外提供服務而無須其他服務器的輔助。然后,可以通過某種技術,將外部發送來的請求均勻分配到對稱結構中的每臺服務器上,接收到連接請求的服務器都獨立回應客戶的請求。在這種結構中,將外部請求均勻分配到服務器上的技術稱為負載均衡技術,由于建立內容完全一致的Web服務器并不困難,因此負載均衡技術就成為建立一個高負載Web站點的關鍵性技術。
基于DNS負載均衡
最早的負載均衡技術是通過DNS服務中的隨機名字解析來實現的。在DNS服務器中,可以為多個不同的地址配置同一個名字,這個數據被發送給其他名字服務器,而最終查詢這個名字的客戶機將在解析這個名字時隨機使用其中一個地址?因此,對于同一個名字,不同的客戶機會得到不同的地址,因此不同的客戶訪問的也就是不同地址的Web服務器,從而達到負載均衡的目的。
例如如果希望使用三個Web服務器來回應對www.exampleorg.org.cn的HTTP請求,就可以設置該域的DNS服務器中關于該域的數據包括與下面例子類似的結果: www1 IN A 192.168.1.1
www2 IN A 192.168.1.2
www3 IN A 192.168.1.3
www IN CNAME www1
www IN CNAME www2
www IN CNAME www3
這里先為每個計算機定義一個真實名字,然后再為它們定義同一個別名。直接針對不同地址設置同一個真實名字(A記錄)也是可行的,但使用別名的方法易于管理一些。
由于此時反向解析只能針對一臺計算機,那么每個Web服務器都需要使用ServerName重新定義同一個名字,或者設置名字解析的順序為hosts文件優先,并在hosts文件中定義本身為www,以保證每個服務器的名字設置保持一致。
此后外部的客戶機就可能隨機的得到對應www的不同地址,那么隨后的HTTP請求也就會發送給不同地址了。
當使用DNS負載均衡的時候,必須盡量保證不同的客戶計算機能均勻獲得不同的地址。由于DNS數據是具備一個刷新時間的標志的,一旦超過這個時間限制過期,其他DNS服務器就需要和這個服務器交談以重新獲得地址數據,就有可能獲得不同IP地址。因此為了使得地址能隨機分配,就應該使得刷新時間盡量短,不同地方的DNS服務器能更新對應的地址,使得地址獲得能隨機一些。然而將過期時間設置的過低將使得DNS流量大增,而造成額外的網絡問題。出于折衷的考慮,一般將刷新時間設置為1個小時。
DNS負載均衡的一個問題是一旦某個服務器出現故障,即使及時修改了DNS設置,還是要等待足夠的時間(刷新時間)才能發揮作用,在此期間保存了故障服務器地址的客戶計算機將不能正常訪問服務器。盡管存在多種問題,然而它還是一種非常有效的做法,當前使用在包括Yahoo在內的很多Web站點上。