使用 DNS 原則進行應用程式負載平衡

適用於:Windows Server 2022、Windows Server 2019、Windows Server 2016

您可以使用本主題來了解如何設定 DNS 原則以執行應用程式負載平衡。

先前版本的 Windows Server DNS 僅透過使用循環回應來提供負載平衡;但透過 Windows Server 2016 中的 DNS,您可以設定用於應用程式負載平衡的 DNS 原則。

當您部署了多個應用程式實例時,可以使用 DNS 原則來平衡不同應用程式實例之間的流量負載,從而動態配置應用程式的流量負載。

應用程式負載平衡的範例

以下是如何使用 DNS 原則來進行應用程式負載平衡的範例。

此範例使用一家虛構的公司 Contoso Gift Services,該公司提供線上禮品服務且有一個名為 contosogiftservices.com 的網站。

該 contosogiftservices.com 網站在多個資料中心中託管,每個資料中心都有不同的 IP 位址。

在北美 (Contoso Gift Services 的主要市場),該網站在三個資料中心託管:芝加哥 (伊利諾州)、達拉斯 (德州) 和西雅圖 (華盛頓州)。

西雅圖 Web 伺服器擁有最佳的硬體組態,而且可以處理等同於其他兩個站點兩倍的負載量。 Contoso Gift Services 希望以下列方式引導應用程式流量。

  • 由於西雅圖 Web 伺服器含有更多的資源,因此使用該應用程式的客戶端中有一半會導向到此伺服器
  • 使用該應用程式的四分之一客戶端會被導向到達拉斯 (德州) 資料中心
  • 而使用該應用程式的另外四分之一客戶端會被導向到芝加哥 (伊利諾州) 資料中心

下圖描述此案例。

DNS Application Load Balancing with DNS Policy

應用程式負載平衡如何運作

在您使用此範例案例透過 DNS 原則設定 DNS 伺服器來進行應用程式負載平衡之後,DNS 伺服器會使用西雅圖 Web 伺服器位址來回應 50% 的查詢時間、使用達拉斯 Web 伺服器位址來回應 25% 的查詢時間,而使用芝加哥 Web 伺服器位址來回應 25% 的查詢時間。

因此,若是 DNS 伺服器收到每四個查詢,它會使用來自西雅圖的兩個回應訊息來回應查詢,以及使用來自達拉斯和芝加哥各一個回應訊息來回應查詢。

使用 DNS 原則進行負載平衡的一個可能問題是 DNS 用戶端和解析器/LDNS 對 DNS 記錄的快取,這可能會干擾負載平衡,因為用戶端或解析器不會向 DNS 伺服器傳送查詢。

您可以透過對應進行負載平衡的 DNS 記錄使用較低的存留時間 (TTL) 值來減輕此行為的影響。

如何設定應用程式負載平衡

下列各節說明如何設定應用程式負載平衡的 DNS 原則。

建立區域範圍

您必須先為託管 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 "DallasZoneScope"
Add-DnsServerZoneScope -ZoneName "contosogiftservices.com" -Name "ChicagoZoneScope"

如需詳細資訊,請參閱 Add-DnsServerZoneScope

將記錄新增至區域範圍

現在,您必須將代表 Web 伺服器主機的記錄新增至區域範圍。

SeattleZoneScope 中,您可以新增 IP 位址為 192.0.0.1 的記錄 www.contosogiftservices.com (該記錄位於西雅圖資料中心)。

ChicagoZoneScope 中,您可以新增 IP 位址為 182.0.0.1 的相同記錄 (www.contosogiftservices.com)(該記錄位在芝加哥資料中心)。

同樣地,在 DallasZoneScope 中,您可以新增 IP 位址為 162.0.0.1 的記錄 (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 "182.0.0.1" -ZoneScope "ChicagoZoneScope"
Add-DnsServerResourceRecord -ZoneName "contosogiftservices.com" -A -Name "www" -IPv4Address "162.0.0.1" -ZoneScope "DallasZoneScope"

如需詳細資訊,請參閱 Add-DnsServerResourceRecord

建立 DNS 原則

在建立分區 (區域範圍) 並新增記錄之後,您必須建立 DNS 原則以在這些範圍之間分散傳入的查詢,以便對 contosogiftservices.com 的 50% 的查詢會透過西雅圖資料中心的 Web 伺服器的 IP 位址進行回應,其餘的查詢則會在芝加哥和達拉斯資料中心之間平均分配。

您可以使用下列的 Windows PowerShell 命令來建立 DNS 原則,以平衡這三個資料中心之間的應用程式流量。

注意

在下面的範例指令中,運算式 –ZoneScope "SeattleZoneScope,2; ChicagoZoneScope,1; DallasZoneScope,1" 使用包含參數組合 <ZoneScope>,<weight> 的陣列來設定 DNS 伺服器。

Add-DnsServerQueryResolutionPolicy -Name "AmericaPolicy" -Action ALLOW -ZoneScope "SeattleZoneScope,2;ChicagoZoneScope,1;DallasZoneScope,1" -ZoneName "contosogiftservices.com"

如需詳細資訊,請參閱 Add-DnsServerQueryResolutionPolicy

您現在已成功建立了一個 DNS 原則,該原則在三個不同資料中心的 Web 伺服器之間提供應用程式負載平衡。

您可以根據流量管理需求建立數千個 DNS 原則,且所有新原則都會動態套用至傳入的查詢,無須將 DNS 伺服器重新啟動。