使用 DNS 原則以時間為基礎進行智慧型 DNS 回應
透過此主題,您將了解如何使用以一天中的時間為基礎的 DNS 原則,將應用程式流量分散到應用程式不同地理位置的執行個體。
如果您想要將某個時區中的流量導向至位於另一個時區的替代應用程式伺服器 (例如網頁伺服器),此案例會很有用。 這可讓您在主要伺服器的尖峰時段流量超載時,將流量分散到應用程式執行個體間以達到負載平衡。
以時間為基礎進行智慧型 DNS 回應的範例
以下範例說明如何使用 DNS 原則以一天中的時間為基礎平衡應用程式流量。
此範例使用一家虛構的公司 Contoso Gift Services,該公司透過其網站 contosogiftservices.com 提供全球性的線上禮品解決方案。
contosogiftservices.com 網站裝載於兩個資料中心,一個在西雅圖 (北美洲),另一個在都柏林 (歐洲)。 他們設定了 DNS 伺服器,會使用 DNS 原則傳送地理位置感知回應。 隨著近期業務激增,contosogiftservices.com 的每日訪客人數也增多,有些客戶回報了服務可用性問題。
Contoso Gift Services 執行了網站分析,發現每到當地時間晚上 6 點到 9 點之間,網頁伺服器的訪客流量就會激增。 網頁伺服器無法藉由調整來處理這些尖峰時段增加的流量,因而對客戶造成阻斷服務。 歐洲和美國資料中心都會發生相同的尖峰時段流量超載。 在一天之中的其他時間,伺服器處理的流量遠低於其最大容量。
為了確保 contosogiftservices.com 客戶體驗到網站迅速的回應,Contoso Gift Services 想要在都柏林時間晚上 6 點到 9 點將一些都柏林流量重新導向至西雅圖應用程式伺服器,並且想要在西雅圖時間晚上 6 點到 9 點將一些西雅圖流量重新導向至都柏林應用程式伺服器。
下圖描述此案例。
以時間為基礎的智慧型 DNS 回應如何運作
若 DNS 伺服器設定了一天中的時間 DNS 原則,在每個地理位置的晚上 6 點到 9 點之間,DNS 伺服器會執行下列動作。
- 使用本機資料中心網頁伺服器的 IP 位址,回應它接收到的前四個查詢。
- 使用遠端資料中心網頁伺服器的 IP 位址,回應它接收到的第五個查詢。
此原則型行為會將 20% 的本機網頁伺服器流量負載卸載至遠端網頁伺服器,而減輕本機應用程式伺服器的壓力,並改善客戶的網站效能。
在離峰時段,DNS 伺服器會執行以地理位置為基礎的一般流量管理。 此外,對於從北美洲或歐洲以外的位置傳送查詢的 DNS 用戶端,DNS 伺服器會將流量分散到西雅圖和都柏林資料中心,以達到負載平衡。
在 DNS 中設定的多個 DNS 原則將是排序的規則集,會由 DNS 按照優先順序從高至低加以處理。 DNS 會使用符合情況的第一個原則,包括一天中的時間。 因此,較具體的原則應具有較高的優先順序。 如果您建立了一天中的時間原則,並在原則清單中給予高優先順序,則 DNS 會先處理並使用這些原則 (如果這些原則符合 DNS 用戶端查詢的參數和原則中定義的準則)。 若不符合,DNS 會在原則清單中向下移動以處理預設原則,直到找到相符項目為止。
如需原則類型和準則的詳細資訊,請參閱 DNS 原則概觀。
如何為以時間為基礎的智慧型 DNS 回應設定 DNS 原則
若要為以時間型應用程式負載平衡為基礎的查詢回應設定 DNS 原則,您必須執行下列步驟。
注意
您必須在您要設定的區域可信的權威 DNS 伺服器上執行這些步驟。 需要 DnsAdmins 或對等的成員資格,才能執行下列程序。
以下幾節提供詳細的設定指示。
重要
以下幾節提供範例 Windows PowerShell 命令,其中包含許多參數的範例值。 在執行這些命令之前,請務必先將這些命令中的範例值取代為您部署所需的值。
建立 DNS 用戶端子網路
第一個步驟是識別需要重新導向流量之區域的子網路或 IP 位址空間。 例如,如果您想要重新導向美國和歐洲的流量,必須識別這些區域的子網路或 IP 位址空間。
您可以從「地理位置-IP」對應中取得這項資訊。 根據這些「地理位置-IP」分佈,您必須建立「DNS 用戶端子網路」。DNS 用戶端子網路是 IPv4 或 IPv6 子網路的邏輯群組,查詢會從中傳送至 DNS 伺服器。
您可以使用下列 Windows PowerShell 命令來建立 DNS 用戶端子網路。
Add-DnsServerClientSubnet -Name "AmericaSubnet" -IPv4Subnet "192.0.0.0/24", "182.0.0.0/24"
Add-DnsServerClientSubnet -Name "EuropeSubnet" -IPv4Subnet "141.1.0.0/24", "151.1.0.0/24"
如需詳細資訊,請參閱 Add-DnsServerClientSubnet。
建立區域範圍
設定用戶端子網路之後,您必須將要重新導向流量的區域分成兩個不同的區域範圍,您已設定的每個 DNS 用戶端子網路各一個範圍。
例如,如果您想要重新導向 DNS 名稱 www.contosogiftservices.com 的流量,則必須在 contosogiftservices.com 區域中建立兩個不同的區域範圍,一個用於美國,一個用於歐洲。
區域範圍是區域的唯一執行個體。 一個 DNS 區域可以有多個區域範圍,而且每個區域範圍都會包含其本身的 DNS 記錄集。 相同的 DNS 記錄可以出現在多個區域範圍中,這些記錄可具有不同的 IP 位址,也可具有相同的 IP 位址。
注意
根據預設,DNS 區域上會有區域範圍。 這個預設的區域範圍的名稱與該區域的名稱相同,而且傳統的 DNS 作業都是在這個範圍上進行的。
您可以使用下列 Windows PowerShell 命令來建立區域範圍。
Add-DnsServerZoneScope -ZoneName "contosogiftservices.com" -Name "SeattleZoneScope"
Add-DnsServerZoneScope -ZoneName "contosogiftservices.com" -Name "DublinZoneScope"
如需詳細資訊,請參閱 Add-DnsServerZoneScope。
將記錄新增至區域範圍
現在,您必須將代表網頁伺服器主機的記錄新增至兩個區域範圍。
例如,在 SeattleZoneScope 中,新增 IP 位址為 192.0.0.1 的記錄 www.contosogiftservices.com (該位址位於西雅圖資料中心)。 同樣地,在 DublinZoneScope 中,新增 IP 位址為 141.1.0.3 (位在都柏林資料中心) 的記錄 www.contosogiftservices.com
您可以使用下列 Windows PowerShell 命令,將記錄新增至區域範圍。
Add-DnsServerResourceRecord -ZoneName "contosogiftservices.com" -A -Name "www" -IPv4Address "192.0.0.1" -ZoneScope "SeattleZoneScope"
Add-DnsServerResourceRecord -ZoneName "contosogiftservices.com" -A -Name "www" -IPv4Address "141.1.0.3" -ZoneScope "DublinZoneScope"
在預設範圍中新增記錄時,不會包含 ZoneScope 參數。 這與將記錄新增至標準 DNS 區域相同。
如需詳細資訊,請參閱 Add-DnsServerResourceRecord。
建立 DNS 原則
建立子網路、分割區 (區域範圍) 和新增記錄之後,您必須建立連接子網路和分割區的原則,如此一來,當查詢來自其中一個 DNS 用戶端子網路中的來源時,便會從區域的正確範圍傳回查詢回應。 對應預設區域範圍不需要任何原則。
設定這些 DNS 原則之後,DNS 伺服器會有如下的行為:
- 歐洲 DNS 用戶端在其 DNS 查詢回應中,接收都柏林資料中心網頁伺服器的 IP 位址。
- 美國 DNS 用戶端在其 DNS 查詢回應中,接收西雅圖資料中心網頁伺服器的 IP 位址。
- 在都柏林時間晚上 6 點到 9 點之間,20% 來自歐洲用戶端的查詢在其 DNS 查詢回應中接收西雅圖資料中心網頁伺服器的 IP 位址。
- 在西雅圖時間晚上 6 點到 9 點之間,20% 來自美國用戶端的查詢在其 DNS 查詢回應中接收都柏林資料中心網頁伺服器的 IP 位址。
- 來自世界其他地區的半數查詢會接收西雅圖資料中心的 IP 位址,另一半則會接收都柏林資料中心的 IP 位址。
您可以使用下列 Windows PowerShell 命令來建立 DNS 原則,以連結 DNS 用戶端子網路和區域範圍。
注意
在此範例中,DNS 伺服器位於 GMT 時區,因此尖峰時段必須以對等的 GMT 時間表示。
Add-DnsServerQueryResolutionPolicy -Name "America6To9Policy" -Action ALLOW -ClientSubnet "eq,AmericaSubnet" -ZoneScope "SeattleZoneScope,4;DublinZoneScope,1" -TimeOfDay "EQ,01:00-04:00" -ZoneName "contosogiftservices.com" -ProcessingOrder 1
Add-DnsServerQueryResolutionPolicy -Name "Europe6To9Policy" -Action ALLOW -ClientSubnet "eq,EuropeSubnet" -ZoneScope "SeattleZoneScope,1;DublinZoneScope,4" -TimeOfDay "EQ,17:00-20:00" -ZoneName "contosogiftservices.com" -ProcessingOrder 2
Add-DnsServerQueryResolutionPolicy -Name "AmericaPolicy" -Action ALLOW -ClientSubnet "eq,AmericaSubnet" -ZoneScope "SeattleZoneScope,1" -ZoneName "contosogiftservices.com" -ProcessingOrder 3
Add-DnsServerQueryResolutionPolicy -Name "EuropePolicy" -Action ALLOW -ClientSubnet "eq,EuropeSubnet" -ZoneScope "DublinZoneScope,1" -ZoneName "contosogiftservices.com" -ProcessingOrder 4
Add-DnsServerQueryResolutionPolicy -Name "RestOfWorldPolicy" -Action ALLOW -ZoneScope "DublinZoneScope,1;SeattleZoneScope,1" -ZoneName "contosogiftservices.com" -ProcessingOrder 5
如需詳細資訊,請參閱 Add-DnsServerQueryResolutionPolicy。
現在,DNS 伺服器已設定了必要的 DNS 原則,以根據地理位置和一天中的時間將流量重新導向。
當 DNS 伺服器收到名稱解析查詢時,就會根據設定的 DNS 原則評估 DNS 要求中的欄位。 如果名稱解析要求中的來源 IP 位址符合任意原則,則會使用相關聯的區域範圍來回應查詢,並將使用者導向至與其地理位置最接近的資源。
您可以根據流量管理需求建立數千個 DNS 原則,且所有新原則都會動態套用至傳入的查詢,無須將 DNS 伺服器重新啟動。