使用 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 服务器 50% 的时间使用西雅图 Web 服务器地址进行响应,25% 的时间使用达拉斯 Web 服务器地址进行响应,25% 的时间使用芝加哥 Web 服务器地址进行响应。

因此,DNS 服务器每收到四个查询,它都会通过西雅图做出两个响应,通过达拉斯和芝加哥各做出一个响应。

使用 DNS 策略执行负载均衡的一个可能问题是 DNS 客户端和解析程序/LDNS 会缓存 DNS 记录,这可能会干扰负载均衡,因为客户端或解析程序不会向 DNS 服务器发送查询。

可以通过将低生存时间 (TTL) 值用于应执行负载均衡的 DNS 记录来减少此行为的影响。

如何配置应用程序负载均衡

以下部分介绍如何为应用程序负载均衡配置 DNS 策略。

创建区域范围

必须先为用于托管的数据中心创建区域 contosogiftservices.com 的范围。

区域范围是区域的唯一实例。 一个 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 策略,以便 50% 的 contosogiftservices.com 查询由西雅图数据中心 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 服务器。