使用针对基于时间的智能 DNS 响应的 DNS 策略

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016

可以使用本主题了解如何使用基于具体时间的 DNS 策略,在分布在不同地理位置的应用程序实例之间分配应用程序流量。

如果想要将一个时区的流量定向到位于另一个时区的备用应用程序服务器(例如 Web 服务器),此方案很有用。 这样,就能在主服务器流量过载的高峰时段在应用程序实例间均衡流量负载。

基于具体时间的智能 DNS 响应示例

以下示例展示如何可以使用 DNS 策略并基于具体时间来均衡应用程序流量。

此示例使用一家虚构的公司 Contoso Gift Services,该公司通过其网站 contosogiftservices.com 在全球范围内提供在线礼品解决方案。

Contosogiftservices.com 网站承载于两个数据中心,一个在西雅图(北美),另一个在都柏林(欧洲)。 DNS 服务器配置为使用 DNS 策略发送地理位置感知响应。 随着最近业务激增,contosogiftservices.com 的访问人数每天都在增加,一些客户反映出现了服务可用性问题。

Contoso Gift Services 执行了站点分析,发现当地时间每天晚上 6 点到晚上 9 点之间,Web 服务器的流量激增。 Web 服务器无法扩大规模来处理这些高峰时段增加的流量,从而导致客户的服务请求被拒绝。 欧洲和美国的数据中心都出现了此高峰时段流量过载的情况。 而在一天中的其他时间,服务器处理的流量远低于其最大容量。

为了确保 contosogiftservices.com 客户从网站获得响应及时的体验,Contoso Gift Services 想在都柏林时间晚上 6 点到晚上 9 点之间将部分都柏林流量重定向到西雅图应用程序服务器;并想在西雅图时间晚上 6 点到晚上 9 点之间将部分西雅图流量重定向到都柏林应用程序服务器。

下图描述了该情况。

Time of Day DNS Policy example

基于具体时间的智能 DNS 响应的运作原理

当 DNS 服务器配置了具体时间 DNS 策略时,DNS 服务器会在每个地理位置的晚上 6 点到晚上 9 点之间执行以下操作。

  • 使用本地数据中心中 Web 服务器的 IP 地址应答它收到的前四个查询。
  • 使用远程数据中心 Web 服务器的 IP 地址应答它收到的第五个查询。

这种基于策略的行为将本地 Web 服务器 20% 的流量负载卸载到远程 Web 服务器,减轻了本地应用程序服务器的压力且提高了面向客户的站点性能。

在非高峰时段,DNS 服务器执行基于地理位置的常规流量管理。 此外,对于从北美或欧洲以外的位置发送查询的 DNS 客户端,DNS 服务器将对西雅图和都柏林数据中心的流量进行负载均衡。

当在 DNS 中配置了多个 DNS 策略时,它们是一组有序的规则,由 DNS 按照优先级从高到低执行。 DNS 会使用与环境(包括具体时间)相匹配的第一个策略。 出于此原因,策略越具体其优先级应更高。 如果创建了具体时间策略并在策略列表中赋予其高优先级,DNS 首先会处理并使用这些策略(如果这些策略与 DNS 客户端查询的参数和策略中定义的条件相匹配)。 如果不匹配,DNS 会在策略列表中向下移动并处理默认策略,直到找到匹配项。

有关策略类型和条件的详细信息,请参阅 DNS 策略概述

如何针对基于具体时间的智能 DNS 响应配置 DNS 策略

若要为基于具体时间应用程序负载均衡的查询响应配置 DNS 策略,需要执行以下步骤。

注意

需要在对要配置的区域具有权限的 DNS 服务器上执行这些步骤。 执行以下过程需要 DnsAdmins 的成员身份或同等身份。

以下部分提供了详细的配置说明。

重要

以下部分包括示例 Windows PowerShell 命令,其中包含许多参数的示例值。 运行这些命令之前,请确保将这些命令中的示例值替换为适合部署的值。

创建 DNS 客户端子网

第一步是确定要重定向流量的区域的子网或 IP 地址空间。 例如,如果要重定向美国和欧洲的流量,需要确定这些区域的子网或 IP 地址空间。

可以通过 Geo-IP 映射获取此信息。 需要基于这些 Geo-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 记录。 同一记录可以存在于具有不同 IP 地址或相同 IP 地址的多个范围中。

注意

默认情况下,区域范围存在于 DNS 区域中。 此区域范围与区域同名,旧有的 DNS 操作在此范围中运行。

可以使用以下 Windows PowerShell 命令创建区域范围。

Add-DnsServerZoneScope -ZoneName "contosogiftservices.com" -Name "SeattleZoneScope"

Add-DnsServerZoneScope -ZoneName "contosogiftservices.com" -Name "DublinZoneScope"

有关详细信息,请参阅 Add-DnsServerZoneScope

将记录添加到区域范围

现在,需要将代表 Web 服务器主机的记录添加到两个区域范围中。

例如,在 SeattleZoneScope 中,添加了 IP 地址为 192.0.0.1 的记录 www.contosogiftservices.com,该地址位于西雅图数据中心。 同样,在 DublinZoneScope 中,添加了记录 www.contosogiftservices.com,具有都柏林数据中心的 IP 地址 141.1.0.3

可以使用以下 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 服务器行为如下所示:

  1. 欧洲 DNS 客户端在其 DNS 查询响应中接收都柏林数据中心 Web 服务器的 IP 地址。
  2. 美国 DNS 客户端在其 DNS 查询响应中接收西雅图数据中心 Web 服务器的 IP 地址。
  3. 都柏林时间晚上 6 点到晚上 9 点之间,来自欧洲客户端的 20% 的查询在其 DNS 查询响应中接收到的是西雅图数据中心 Web 服务器的 IP 地址。
  4. 西雅图时间晚上 6 点到晚上 9 点之间,来自美国客户端的 20% 的查询在其 DNS 查询响应中接收到的是都柏林数据中心 Web 服务器的 IP 地址。
  5. 来自世界其他地区的半数查询会接收西雅图数据中心的 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 策略评估 DNS 请求中的字段。 如果名称解析请求中的源 IP 地址与任何策略匹配,将使用关联的区域范围来响应查询,并且会将用户定向到地理上最接近他们的资源。

可以根据流量管理要求创建数以千计的 DNS 策略,所有新策略都会动态应用于传入的查询,且无需重启 DNS 服务器。