使用DNS輪詢實現簡單的負載均衡

 循環複用DNS負載均衡技術

循環DNS(Round-robin DNS)技術是負載平衡最常用的方法之一。最早的負載均衡技術是通過DNS服務中的隨機名字解析來實現的。在DNS服務器中,可以爲多個不同的地址配置同一個名字,這個數據被髮送給其他名字服務器,而最終查詢這個名字的客戶機將在解析這個名字時隨機使用其中一個地址。因此,對於同一個名字,不同的客戶機會得到不同的地址,因此不同的客戶訪問的也就是不同地址的Web服務器,從而達到負載均衡的目的。

例如,如果希望使用三個Web服務器來回應對www.cqcc.com的HTTP請求,設它們的IP地址分別是:202.192.99.1,202.192.99.2,202.192.99.3。安裝一個循環複用DNS軟件,配置這個軟件使得每次要求解析www.cqcc.com時返回所有三個IP地址。第一次解析結果中返回地址的次序與前面列出的相同,下一次請求則得到稍微不同的答案:202.192.99.2,202.192.99.3,202.192.99.1。再下一次則得到第三個答案:202.192.99.3,202.192.99.1,202.192.99.2。第一個客戶將同202.192.99.1建立連接,因爲202.192.99.1是它所看到的第一個IP地址。第二個客戶看到的第一個IP地址是202.192.99.2,因此它將訪問202.192.99.2。同樣,第三個客戶將訪問202.192.99.3……

針對上面例子,可以設置該域的DNS服務器中關於該域的數據至少包括與下面例子類似的結果:

www1 IN A 202.192.99.1

www2 IN A 202.192.99.2

www3 IN A 202.192.99.3

www IN CNAME www1

www IN CNAME www2

www IN CNAME www3

這裏先爲每個計算機定義一個真實名字(www1、www2、www3),然後再爲它們定義同一個別名。可以直接針對不同地址設置同一個真實名字(A記錄),只是使用別名的方法易於管理一些。

由於此時反向解析只能針對一臺計算機,那麼每個Web服務器都需要使用ServerName重新定義同一個名字,或者設置名字解析的順序爲hosts文件優先,並在hosts文件中定義本身爲www,以保證每個服務器的名字設置保持一致。

循環DNS具有對客戶機和服務器透明的優點。在事務處理開始時,它也只執行一次。但是,循環DNS常常不能成功,因爲中間名服務器和客戶機軟件(包括應用很廣的瀏覽器)常常將DNS返回的IP地址存儲起來,或忽略存在時間(TTL)值。TTL是一位IP數據比特位,用來指示IP數據報在被丟棄前可以轉發到其它路由器的時間長度。

由於IP地址存儲的原因,DNS服務器提供的負載平衡功能被繞過去了,客戶機繼續使用被存儲起來的IP地址,而不去進行重新連接。這就產生了一個“熱點”,在這個“熱點”上,過度使用的服務器繼續接收額外的接入。

DNS負載均衡的另一個問題是一旦某個服務器出現故障,即使及時修改了DNS設置,還是要等待足夠的時間(刷新時間)才能發揮作用,而DNS服務器並不知道這一點,因此客戶請求將被延遲,或返回一個“無法訪問服務器”消息給用戶,在此期間保存了故障服務器地址的客戶計算機將不能正常訪問服務器。

由於DNS數據是具備一個刷新時間的標誌的,一旦超過這個時間限制過期,其他DNS服務器就需要和這個服務器交談以重新獲得地址數據。如果刷新時間較短,不同地方的DNS服務器能更新對應的地址,使出現故障的服務器地址可以及時刪除,用戶仍舊可以被引導到正常的服務器上,但如果用戶緩衝了故障服務器的IP地址,這種方法也不能解決問題。同時將過期時間設置的過低將使DNS流量大增,而造成額外的網絡問題。

由於循環DNS沒有區分端口的能力,不能意識到服務器的可用性並且不能考慮服務器上的現有負載,無法對服務器負載進行動態地分析從而使得下一個請求總是由負載最小的服務器處理,因此循環複用DNS還有太多的限制,只能算是一種勉強可接受的負載平衡方案。

儘管存在多種問題,然而它還是一種非常有效的做法,當前使用在包括Yahoo在內的很多Web站點上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章