基于时间的 DNS 响应和 Azure 云应用服务器

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

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

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

注意

若要了解如何在不使用 Azure 的情况下使用 DNS 策略进行智能 DNS 响应,请参阅使用 DNS 策略进行基于时间的智能 DNS 响应

使用 Azure 云应用服务器进行基于时间的 DNS 响应的示例

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

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

contosogiftservices.com 网站仅托管在西雅图的单个本地数据中心(具有公共 IP 192.68.30.2)。

DNS 服务器也位于本地数据中心。

随着最近业务激增,contosogiftservices.com 的访问人数每天都在增加,一些客户反映出现了服务可用性问题。

Contoso Gift Services 执行了站点分析,发现每天当地时间下午 6 点到晚上 9 点之间,西雅图 Web 服务器的流量激增。 Web 服务器无法扩大规模来处理这些高峰时段增加的流量,从而导致客户的服务请求被拒绝。

为了确保 contosogiftservices.com 客户从网站获得快速响应的体验,Contoso Gift Services 决定在这些时段,在 Microsoft Azure 上租用一个虚拟机 (VM) 来托管其 Web 服务器的副本。

Contoso Gift Services 从 Azure 获取用于 VM 的公共 IP 地址 (192.68.31.44),并开发自动化功能,每天下午 5 点到晚上 10 点之间在 Azure 上部署 Web 服务器(给出一个小时的应变时间)。

注意

有关 Azure VM 的详细信息,请查看虚拟机文档

DNS 服务器配置了区域范围和 DNS 策略,这样在每天下午 5 点到晚上 9 点之间,30% 的查询会发送到 Azure 中运行的 Web 服务器的实例。

下图描绘了此方案。

DNS Policy for time of day responses

使用 Azure 云应用服务器进行基于时间的 DNS 响应的工作原理

本文演示如何配置 DNS 服务器来使用两个不同的应用程序服务器 IP 地址回答 DNS 查询 - 一个 Web 服务器位于西雅图,另一个位于 Azure 数据中心。

配置基于西雅图下午 6 点到晚上 9 点的高峰时段的新 DNS 策略后,DNS 服务器会将 70% 的 DNS 响应发送到包含西雅图 Web 服务器 IP 地址的客户端,将 30% 的 DNS 响应发送到包含 Azure Web 服务器 IP 地址的客户端,从而将客户端流量定向到新的 Azure Web 服务器,并防止西雅图 Web 服务器过载。

在一天中的所有其他时间,将进行正常的查询处理,并从默认区域范围发送响应,其中包含本地数据中心内 Web 服务器的记录。

Azure 记录上 10 分钟的生存时间 (TTL) 可确保 LDNS 缓存中的该记录在从 Azure 中移除 VM 之前过期。 这种缩放的优点之一是可将 DNS 数据保留在本地,并根据需要继续向 Azure 横向扩展。

如果配置 DNS 策略来使用 Azure 应用服务器基于时间进行智能 DNS 响应

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

注意

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

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

重要

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

创建区域范围

区域范围是区域的唯一实例。 一个 DNS 区域可以有多个区域范围,且每个区域范围都包含自己的一组 DNS 记录。 同一记录可以存在于具有不同 IP 地址或相同 IP 地址的多个范围中。

注意

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

可使用以下示例命令创建一个区域范围来托管 Azure 记录。

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

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

将记录添加到区域范围

下一步是将代表 Web 服务器主机的记录添加到区域范围中。

在 AzureZoneScope 中,www.contosogiftservices.com 记录添加了 IP 地址 192.68.31.44,该地址位于 Azure 公有云。

同样,在默认区域范围 (contosogiftservices.com) 中,(www.contosogiftservices.com) 记录添加了在西雅图本地数据中心运行的 Web 服务器的 IP 地址 192.68.30.2。

在下面的第二个 cmdlet 中,不包括 –ZoneScope 参数。 因此,记录将添加到默认的 ZoneScope 中。

此外,Azure VM 记录的 TTL 保留为 600 秒(10 分钟),这样 LDNS 就不会将它缓存更长时间 - 超时缓存会干扰负载均衡。 此外,在应急情况下可额外使用 Azure VM 一小时,以确保即使是具有缓冲记录的客户端也能够解析。

Add-DnsServerResourceRecord -ZoneName "contosogiftservices.com" -A -Name "www" -IPv4Address "192.68.31.44" -ZoneScope "AzureZoneScope" –TimeToLive 600

Add-DnsServerResourceRecord -ZoneName "contosogiftservices.com" -A -Name "www" -IPv4Address "192.68.30.2"

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

创建 DNS 策略

创建区域范围后,可创建 DNS 策略,用于跨这些范围分发传入查询,这会发生以下情况。

  1. 从每天下午 6 点到晚上 9 点,30% 的客户端在 DNS 响应中接收 Azure 数据中心内 Web 服务器的 IP 地址,70% 的客户端接收西雅图本地 Web 服务器的 IP 地址。
  2. 在其他所有时间,所有客户端都会收到西雅图本地 Web 服务器的 IP 地址。

一天中的时间必须用 DNS 服务器的本地时间表示。

可使用以下示例命令来创建 DNS 策略。

Add-DnsServerQueryResolutionPolicy -Name "Contoso6To9Policy" -Action ALLOW -ZoneScope "contosogiftservices.com,7;AzureZoneScope,3" –TimeOfDay “EQ,18:00-21:00” -ZoneName "contosogiftservices.com" –ProcessingOrder 1

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

现在,DNS 服务器配置了所需的 DNS 策略,可基于时间将流量重定向到 Azure Web 服务器。

请注意表达式:

-ZoneScope "contosogiftservices.com,7;AzureZoneScope,3" –TimeOfDay “EQ,18:00-21:00”

此表达式使用 ZoneScope 和权重的组合来配置 DNS 服务器,该组合指示 DNS 服务器在 70% 的时间发送西雅图 Web 服务器的 IP 地址,在 30% 的时间发送 Azure Web 服务器的 IP 地址。

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