3DNS多鏈路接入解決方案
1. 前言在原Chinanet 分為北方China Netcom 和南方China Telecom之后。由于南北網(wǎng)絡(luò)之間的互聯(lián)問題。出現(xiàn)了從南方用戶訪問北方網(wǎng)站或北方用戶訪問南方用戶訪問速度較慢的問題
1. 前言
在原Chinanet 分為北方China Netcom 和南方China Telecom之后。由于南北網(wǎng)絡(luò)之間的互聯(lián)問題。出現(xiàn)了從南方用戶訪問北方網(wǎng)站或北方用戶訪問南方用戶訪問速度較慢的問題。其出現(xiàn)的根本原因為南北網(wǎng)絡(luò)的互通互聯(lián)接點擁塞,造成用戶丟包、延遲較大,從而導(dǎo)致訪問緩慢,甚至對于一些應(yīng)用根本無法訪問。
2、需求描述
對于一個運行關(guān)鍵業(yè)務(wù)的電子商務(wù)網(wǎng)站來說,保持用戶的訪問速度和訪問的成功率非常重要。需要一套系統(tǒng)來解決南方和北方用戶的訪問問題。
以下是一張實測數(shù)據(jù)表

表中可以看出,對于同一個站點,一個用戶分別從兩條線路進行訪問,得出的訪問速度差異是非常大的。最大的差值在廣東電信分別訪問站點的兩條線路,其速度差異接近20倍。
3、系統(tǒng)設(shè)計
,通常用戶系統(tǒng)原有結(jié)構(gòu)設(shè)計圖

在系統(tǒng)原有系統(tǒng)結(jié)構(gòu)中,采用單條接入線路,一個或多個DNS 服務(wù)器,這些服務(wù)器對于同一個域名均解析為同一個地址。
1.1 3DNS多鏈路設(shè)計結(jié)構(gòu)圖:
非冗余結(jié)構(gòu):
,
在非冗余結(jié)構(gòu)下,系統(tǒng)中需要增加一側(cè)接入路由器、兩臺3DNS 設(shè)備和一臺BIGIP 設(shè)備作為多線路接入設(shè)備。
冗余結(jié)構(gòu):

在冗余結(jié)構(gòu)中,則采用兩臺3DNS 和兩臺BIGIP 實現(xiàn)了系統(tǒng)的全冗余,同時,在BIGIP 下端,可采用防火墻和核心交換機冗余保證系統(tǒng)的進一步可靠性。
1.2網(wǎng)絡(luò)拓撲結(jié)構(gòu)說明
在原系統(tǒng)接入中,增加一條線路,并采用相應(yīng)的接入路由器,將兩臺3DNS 服務(wù)器分別接在兩臺接入路由器上,負責(zé)用戶的DNS 訪問請求。引導(dǎo)用戶使用最快的鏈路進行訪問站
,點。同時,3DNS 負責(zé)檢查兩條線路的健康狀態(tài),一旦檢測到線路的中斷,則停止相應(yīng)線路的地址解析。
在接入路由器之后,采用了F5 BIGIP作為多鏈路接入設(shè)備,在BIGIP 上配置多個IP 對應(yīng)每條線路分配的IP 網(wǎng)段。這些IP 同時對應(yīng)后端的一臺或多臺服務(wù)器。實現(xiàn)服務(wù)器組的對外統(tǒng)一服務(wù)。
根據(jù)每個系統(tǒng)的需求,可以采用非冗余結(jié)構(gòu)或者冗余結(jié)構(gòu)。
1.3系統(tǒng)邏輯結(jié)構(gòu)
3DNS 上采用DataCenter 、VS 、和WideIP 來標識系統(tǒng)中的各元素,系統(tǒng)邏輯結(jié)構(gòu)圖如下:

其中:
3DNS 配置:
VS:表示各線路真實對外提供服務(wù)的IP 地址,在本系統(tǒng)中,VS 為BIGIP 上虛擬的后端服務(wù)器地址。
WideIP:表示外部用戶訪問的統(tǒng)一域名,每個WideIP 均與相應(yīng)的兩個或多個VS 相對應(yīng),對于每一個 LocalDNS 的請求,3DNS 均會選擇一個或多個相應(yīng)的VS 地址返回。WideIP 主要負責(zé)A 記錄的解析。
,DataCenter:用于標識線路或數(shù)據(jù)中心,位于同一條線路側(cè)的所有VS 、3DNS 均位于同一個DataCenter 。
NameSurfer/BIND:在3DNS 內(nèi)部用于解析非動態(tài)域名,提供標準DNS 服務(wù)器的所有功能。包括SOA 、NS 、MX 和A 記錄的解析。
BIGIP 配置:
VS:表示對應(yīng)于各線路的服務(wù)地址,該地址為虛擬地址
Pool:用于對后端的服務(wù)器分組,在同一組內(nèi)可以是一個或多個服務(wù)器組成的負載均衡組。BIGIP 將對VS 的訪問根據(jù)預(yù)先定義的算法分配到Pool 中的每個Node 節(jié)點上。
Node:標識每一臺真實的服務(wù)器地址和提供服務(wù)的端口。
1.4同一組服務(wù)器對外多地址服務(wù)原理
由于采用了多條鏈路接入,則此時必將面臨將系統(tǒng)中的一臺或多臺服務(wù)器同時對多條鏈路提供服務(wù)的問題。在系統(tǒng)設(shè)計中,我們采用了F5 BIGIP來實現(xiàn)了多出口接入。 如圖:
,
在BIGIP 實現(xiàn)多鏈路接入的時候,采用了BIGIP 上的AutoLastHop 技術(shù)。對于每條線路,在BIGIP 上均配置一個與線路分配網(wǎng)段對應(yīng)的IP 地址,這些IP 地址均映射到后端的一臺或同一組服務(wù)器。當(dāng)用戶訪問不同地址的時候,BIGIP 上將建立每個請求與來源設(shè)備Mac 地址的對應(yīng)關(guān)系表。即將每個用戶的請求連接和上端的路由器MAC 地址進行對應(yīng),在服務(wù)器數(shù)據(jù)返回的時候,則根據(jù)該對應(yīng)表將返回的數(shù)據(jù)包發(fā)送到相應(yīng)的路由器,避免了數(shù)據(jù)往返通路不同的問題。
1.5 3DNS分配算法及運行機制
3-DNS 控制器采用了完善的負載平衡算法和業(yè)界最先進的流量分配方法:
循環(huán)
全球可用性
LDNS 持續(xù)性
應(yīng)用可用性
地理分布
虛擬服務(wù)器容量
最少連接
,Pkt/sec(數(shù)據(jù)包/每秒)
KB/sec(千字節(jié)/每秒)
往返時間
中繼段(hop )
數(shù)據(jù)包完整率
用戶定義服務(wù)質(zhì)量(QoS )
動態(tài)比率
LDNS 循環(huán)
比率
隨機
在3DNS 的每個WideIP 中,可以選擇三種算法,這三種算法按照預(yù)定的優(yōu)先級進行排列。在通常情況下,選擇RTT 動態(tài)計算方法作為系統(tǒng)的優(yōu)選算法,即所有的LocalDNS 請求均被3DNS 計算其就近性,以保證絕大部分用戶訪問的最優(yōu)化性。而Topology 算法則作為RTT 動態(tài)計算的補充算法,在RTT 計算方式?jīng)]有結(jié)果的時候,將用戶請求定義到其本網(wǎng)的線路上。Global Availability 算法作為系統(tǒng)的默認算法,將所有無法計算結(jié)果并且不在Topology 范圍之內(nèi)的LocalDNS 請求,定義到系統(tǒng)的默認線路上。
1.1.1 RTT算法運行機制:
通過3DNS 的RTT 就近性算法會自動運算生成一個ldns 就近分布表,通過這個動態(tài)的表,每個客戶上來都會提供一個最快速的鏈路進行訪問,由于站點有ISP1和ISP2的兩條廣域網(wǎng)線路。在3DNS 上會針對站點服務(wù)器(以www.f5.com.cn 為例) 解析ISP1和ISP2的兩個不同的公網(wǎng)地址。
對應(yīng)于www.f5.com.cn 域名,在3DNS 上配置wideip :www.f5.com.cn ,對應(yīng)兩個Virtual Server:VS1:202.106.83.177,VS2:219.17.66.100。分別屬于ISP1和ISP2兩條線路分配的IP 地址段。在3DNS 內(nèi)部,同時定義兩個DataCenter 分別與ISP1和ISP2相對應(yīng)。
用戶的訪問流程如下:
,
訪問網(wǎng)銀的用戶在發(fā)起DNS 請求時
(1)首先向其所在運營商的Local DNS發(fā)起www.f5.com.cn 域名的DNS 請求。步驟2
(2)運營商的Local DNS服務(wù)器通過遞歸算法查找到工行的主、輔DNS 服務(wù)器。步驟3和4。
(3)接受到請求的3DNS 首先查詢在本地是否有該LocalDNS 的就近性表項,如果存在,則直接給LocalDNS 返回速度最快的服務(wù)器地址。如果不存在,則通知另外一臺3DNS 發(fā)起對該LocalDNS 的查詢。步驟5。
(4)兩臺3DNS 分別對LocalDNS 進行Probe 。例如ISP1側(cè)3DNS 查詢該LocalDNS 的RTT 時間為150ms ,而ISP2側(cè)3DNS 查詢同一LocalDNS 的RTT 時間為300ms ,則此時在兩臺3DNS 內(nèi)都形成了該LocalDNS 的對應(yīng)就近性表記錄。
(5)接受到LocalDNS 請求得3DNS 根據(jù)系統(tǒng)的就近性表返回相應(yīng)的DataCenter 內(nèi)的WEB 服務(wù)器地址。步驟6。
(6)在用戶LocalDNS 獲得地址后,將該地址返回給用戶。步驟7
(7)用戶向www.f5.com.cn 網(wǎng)站發(fā)起訪問。步驟8。
通過以上流程可以看出,通過動態(tài)計算方式,可以最為準確的估算出用戶LocalDNS 與兩條線路之間的速度。通過3DNS 之間的信息交互,在兩臺3DNS 上形成就近性表,并根據(jù)該表返回用戶的最佳訪問地址。
,3DNS 可以選擇多種測試方法判斷對local DNS的RTT 時間, 包括:
DNS_Dot: 向local DNS發(fā)起一個包含”.”的測試, 也就是向目標LocalDNS 請求root 清單,該解析一般默認配置的DNS 服務(wù)器均提供支持。
DNS_REV: 向local DNS發(fā)起LocalDNS 本機IP 的PTR 請求
UDP:發(fā)起一個UDP 的包, 看是否回應(yīng)
TCP:發(fā)起一個TCP 的包看是否回應(yīng)
ICMP:發(fā)起一個ICMP 的ping 包, 看是否回應(yīng)
在以上各檢測方式中,無論目標系統(tǒng)返回那種類型的數(shù)據(jù)包,3DNS 均可認為是有效數(shù)據(jù)包而記錄數(shù)據(jù)包往返時間,最終形成就近性表。
針對一個local DNS 的RTT 結(jié)果:
ldns {
address 61.136.178.229
cur_target_state 419446729
ttl 2419199
probe_protocol tcp
path {
datacenter "CNC"
cur_rtt 189850
cur_hops 0
cur_completion_rate 10000
cur_last_hops 0
path {
datacenter "TEL"
cur_rtt 57209
cur_hops 0
cur_completion_rate 10000
,cur_last_hops 0
通常情況下,我們選擇RTT 動態(tài)算法作為優(yōu)選算法,只要是3DNS 能檢測到的地址,一律按照動態(tài)算法分配,保證系統(tǒng)最大的靈活性。
在實際的運行環(huán)境中,可能存在某些LocalDNS 無法檢測的情況,所以我們可以采用地理分布算法作為動態(tài)RTT 算法的有效補充。
1.1.2 地理分布算法
在3DNS 上,可以根據(jù)用戶的LocalDNS 地址來決定給用戶返回那個地址。在3DNS 上可配置多個自定義區(qū)域,并將這些區(qū)域與鏈路相對應(yīng)。當(dāng)用戶的LocalDNS 發(fā)起請求連接3DNS 的時候,3DNS 將根據(jù)LocalDNS 所位于的區(qū)域返回給LocalDNS 適當(dāng)?shù)逆溌穫?cè)服務(wù)器地址,引導(dǎo)用戶從正確的線路進行訪問。
在該算法下,需要收集各運營商的IP 地址網(wǎng)段表。將網(wǎng)段進行整理后輸入到3DNS 內(nèi)形成自定義區(qū)域表。
一個典型的topology 表結(jié)構(gòu)如下:
topology { // 4 Items
server ldns score
dc."CNC" 202.106.0.0/16 100
dc."TEL" 219.172.0.0/16 100
dc."CNC" 200.100.0.0/16 100
這樣,就將所有從表中l(wèi)dns 網(wǎng)段內(nèi)的LocalDNS 請求有限定一到相應(yīng)的表中對應(yīng)的鏈路上。
通常,我們采用地理分布算法作為第二算法。當(dāng)動態(tài)檢測機制無法檢到LocalDNS 就進性的時候,將啟動靜態(tài)算法,將在地址范圍列表之內(nèi)的用戶定義到正確的線路上去。