实现高可用性和可伸缩性 - ARR 和硬件负载均衡器

作者:Won Yoo

实现高可用性和可伸缩性:
Microsoft IIS 7.0 及更高版本的应用程序请求路由(ARR)和硬件负载均衡器。

Microsoft Corporation F5
作者:王耀 作者:瑞安·科罗克
发布时间: 2008年11月13日

摘要

本文档提供了有关如何将应用程序请求路由(ARR)与硬件负载均衡器一起使用以实现高可用性和可伸缩性的说明性指南。 本文档使用 F5 BIG-IP 负载均衡器来说明 ARR 与硬件负载均衡器之间的工作关系。

概述

MICROSOFT IIS 7.0 及更高版本的应用程序请求路由(ARR)是基于代理的路由模块,它基于 HTTP 标头、服务器变量和负载均衡算法将 HTTP 请求转发到内容服务器。 下图演示了典型的 ARR 部署:

典型的 R R 部署示意图。R R 为内容服务器提供高可用性和可伸缩性。

虽然 ARR 为内容服务器提供高可用性和可伸缩性,但总体部署并非高度可用或可缩放,因为:

  • ARR 是单一故障点。
  • 内容服务器的可伸缩性受一个 ARR 服务器的最大容量限制。

为了克服这些挑战,管理员可以考虑将多个 ARR 服务器与硬件负载均衡器(如 F5 BIG-IP)配合使用。 ARR 可以部署在主动/被动模式下,以便仅实现高可用性或主动/主动模式以实现高可用性和可伸缩性。 本白皮书介绍了如何一起部署 ARR 和 F5 BIG-IP,以实现总体高可用性和可伸缩性,从而启用核心 ARR 方案。

使用应用程序请求路由和 F5 BIG-IP

ARR 构建为基于 IIS 的模块,旨在做出第 7 层(应用程序)的路由决策。 更准确地说,ARR 依赖于另一个 IIS 模块 URL 重写来检查传入的 HTTP 请求标头和服务器变量,以便做出路由决策。 鉴于此设计,管理员可以根据应用程序级别信息编写智能路由规则,例如:

  • 主机名(HTTP_HOST):根据主机名将流量路由到不同的内容服务器。
  • 请求的资源(URL):根据文件扩展名,确定请求的资源是针对静态内容还是动态内容,并相应地路由请求。
  • 客户端信息(HTTP_USER_AGENT):根据浏览器类型和版本,将请求路由到相应的内容服务器。
  • 自定义标头(按应用程序设置为 Cookie):根据应用程序设置的 Cookie 信息(例如用户首选项或用户 ID)路由流量。

以上只是一些示例。 有关 HTTP 标头和服务器变量的完整列表,请参阅 附录 A

F5 Big-IP 的第 3 层和第 4 层功能补充了 ARR 在基于第 7 层(比如 HTTP 标头和服务器变量)做出路由决策方面的强项。 同时,ARR 本身不提供容错部署功能,并且必须依赖其他互补技术和解决方案来实现 ARR 层的高可用性,如下所示:

F5 BIG-IP 第三层和第四层功能的示意图。F5 BIG-IP 第三层和第四层增强了 ARR 的能力,以根据第七层做出路由决策。

方案 1:基于 HTTP 的路由和负载均衡

基于 HTTP 的路由和负载均衡方案可实现涉及以下三层部署体系结构:

  • 第 1 层(Web):提供处理静态内容和路由和负载均衡对第 2 层服务器的剩余动态请求的双重用途。
  • 第 2 层(应用程序):处理依赖于业务逻辑的动态内容。
  • 第 3 层(数据):存储数据。

下图演示了 3 层部署:

说明三层部署架构的示意图。它显示了将静态内容与动态内容区分开来的路由规则。

尽管上面的示例显示了一个路由规则,该规则区分静态内容与动态内容,但另一种常见方案是区分呈现请求与 Web 服务请求。

选项 1:主动/被动

在主动/被动模式下,通常有两个 ARR 服务器,其中一个服务器处理请求,而另一个服务器充当故障转移服务器。 如上所述,虽然此配置通过删除单一故障点来实现高可用性,但它不是横向扩展解决方案,因为内容服务器的聚合容量受一个 ARR 服务器的最大容量限制。

在此设置中,由于两个 ARR 服务器的配置方式相同,因此使用共享配置。 F5 BIG-IP 已配置,以便将所有请求路由到主动 ARR 服务器,并且仅在必要时将请求路由到被动 ARR 服务器。

除了 ARR 中的主机名关联功能之外,两个 ARR 服务器之间没有必须共享的运行时状态信息。 因此,对于此方案,ARR 服务器和 F5 BIG-IP 上都不需要特殊配置。 即使你在 ARR 中使用服务器相关性功能,当 F5 BIG-IP 将请求路由到以前被动但现在处于活动状态的服务器时,将通过请求标头中的 cookie 向被动服务器提供关联状态信息。

ARR 版本 1 版本完全支持此方案。

ARR 配置

步骤 1:在两个 ARR 服务器上启用共享配置。

  • 按照 本文档 中的步骤在 IIS 中设置共享配置。

步骤 2:使用 ARR 配置 3 层部署体系结构。

  • 按照 本文档 中的步骤在 3 层部署体系结构中配置 ARR。

  • 在高级别上,上述文档描述了:

    • 如何使静态内容在 ARR 服务器上可用。
    • 如何为静态内容编写 URL 重写规则,以便直接从 ARR 服务器提供这些规则。
    • 如何为动态内容编写 URL 重写规则,以便将其转发到应用程序服务器。

F5 BIG-IP 配置

在此方案中,你将创建一个虚拟服务器,该服务器将负载均衡到由两台(或更多)ARR服务器组成的池中。 选择的负载均衡方法应将所有流量发送到主 ARR 服务器,直到它变得不可用。 此时,BIG-IP LTM 应将所有流量发送到辅助 ARR 服务器。

步骤 1:配置 ARR 服务器的池。

  • 在“本地流量”部分中,单击“Pools”。 然后单击“创建”按钮创建池。
  • 任何唯一名称都适用于池;该示例使用ARR_Pool。
  • 在健康监视器方面,可以使用自定义 HTTP 监视器或默认 HTTP 监视器。
  • 可以将负载均衡方法设置为轮循机制。 在此方案中,由于只有主动和被动 ARR 服务器,因此不使用负载均衡。
  • 请务必启用优先级组激活。 这会配置 BIG-IP,以将流量发送到具有最高优先级值的服务器。 当这些服务器不可用时,BIG-IP 将流量发送到具有下一个最高优先级值的 ARR 服务器。
  • 在此方案中,10.0.0.1 的 ARR 服务器优先级值为 1,10.0.0.2 的优先级值为 2。 所有流量将发送到 10.0.0.2,直到出现故障,然后将流量发送到 10.0.0.1。

Big-IP 网页的屏幕截图。在“活动”下的“运行状况监视器”框中,突出显示了 HTTP。在“新建成员”框中,A R R 服务器优先级值为 10.0.0.1。

步骤 2:配置 ARR 服务器的池。

  • 在“本地流量”部分中,单击“虚拟服务器”。 然后单击“创建”按钮创建虚拟服务器。
  • 任何唯一名称都适用于虚拟服务器;该示例使用ARR_VS。
  • 对于目标地址,可以使用用户将其浏览器指向的 IP 地址。 在此特定示例中,我们使用 65.197.145.23。 对于服务端口,我们使用“80”。
  • 对于“虚拟服务器类型”部分,有多个选项。 由于依赖于 ARR 进行路由,因此可以选择性能 HTTP,这是针对最佳性能而设计的。
  • 对于默认池,请选择在步骤 1 中创建的池。

F5 BIG-IP 页面的屏幕截图。在“名称”框中写入 A R R 下划线 V S。

  • 此时,您应该能够连接到此虚拟服务器,该连接请求将被转发到相应的 ARR 服务器。

选项 2:活动/活动

在主动/主动模式下,可以有两台或更多个 ARR 服务器。 此配置可实现高可用性和可伸缩性,这与 Active/Pass 模式不同,后者仅实现高可用性。 如前所述,由于以相同的方式配置了多个 ARR 服务器,因此使用共享配置。 F5 BIG-IP 配置为对所有可用和正常的 ARR 服务器对传入请求进行负载均衡,后者反过来又将请求转发到内容服务器。 无论是否在 F5 BIG-IP 上使用服务器相关性功能,ARR 服务器上都不需要特殊配置。 ARR 服务器使用共享配置,以确保它们的配置方式相同。 其次,由于 ARR 使用客户端 Cookie 来存储服务器相关性信息供自己使用,因此,此信息按请求提供,因此可在 ARR 服务器中使用。 ARR 版本 1 版本完全支持此方案。

ARR 配置

主动/主动的 ARR 配置与主动/被动的 ARR 配置相同。 主要区别在于如何配置 F5。

步骤 1:在两个 ARR 服务器上启用共享配置。

  • 按照 本文档 中的步骤在 IIS 中设置共享配置。

步骤 2:使用 ARR 配置 3 层部署体系结构。

  • 按照 本文档 中的步骤在 3 层部署体系结构中配置 ARR。

  • 在高级别上,上述文档描述了:

    • 如何使静态内容在 ARR 服务器上可用。
    • 如何为静态内容编写 URL 重写规则,以便直接从 ARR 服务器提供这些规则。
    • 如何为动态内容编写 URL 重写规则,以便将其转发到应用程序服务器。

F5 BIG-IP 配置

在此方案中,所有可用的 ARR 服务器都被视为活动服务器,适合负载均衡流量。 使用 BIG-IP LTM 来确定 ARR 前端的运行状况和性能,并将流量定向到性能最佳的前端。

步骤 1:配置 ARR 服务器的池。

  • 在“本地流量”部分中,单击“Pools”。 然后单击“创建”按钮创建池。
  • 任何唯一名称都适用于池;示例使用ARR_Pool。 - 对于运行状况监视器,可以使用自定义 HTTP 监视器或默认 HTTP 监视器。 - 由于有多个 ARR 服务器要将流量分发到其中,需要选择最符合需求的负载均衡方法。 假设所有 ARR 服务器都具有类似的硬件特征,动态负载均衡方法(如最快、观察到的或预测的)将为你提供基于性能的分布。

F5 BIG-IP 网页的屏幕截图。在“负载均衡方法”框中,选择最快的应用。

步骤 2:配置虚拟服务器。

  • 在“本地流量”部分中,单击“虚拟服务器”。 然后单击“创建”按钮创建虚拟服务器。
  • 任何唯一名称都适用于虚拟服务器;该示例使用ARR_VS。 - 对于目标,你可以使用用户将浏览器指向的IP地址。 在此特定示例中,我们使用 65.197.145.23。 对于服务端口,我们使用“80”。 - 对于“虚拟服务器类型”部分,有多个选项。 由于依赖于 ARR 进行路由,因此可以选择性能 HTTP,这是针对最佳性能而设计的。 - 对于默认池,请选择在步骤 1 中创建的池。

F5 Big IP 网页的屏幕截图。在“默认池”框中,选择在步骤一中创建的池,即 A R R 池。

方案 2:使用主机名相关性共享托管

此方案利用 ARR 中的主机名关联功能启用共享托管部署,

  • 减少传统共享托管部署所涉及的手动管理和维护。
  • 最大程度地利用现有服务器资源,同时确保所有服务器资源均得到均匀利用。
  • 轻松横向扩展环境。
  • 创造商机以销售其他容量。

有关共享托管和 ARR 的详细信息,请参阅 本文档

下图演示了使用 ARR 的共享托管环境:使用 ARR 的共享托管环境的示意图。

选项 1:主动/被动

如前所述,在主动/被动模式下,通常有两个 ARR 服务器,其中一个服务器处理请求,而另一个服务器充当故障转移服务器。 虽然此配置通过删除单一故障点来实现高可用性,但它不是横向扩展解决方案,因为内容服务器的聚合容量受一个 ARR 服务器的最大容量限制。

在此设置中,由于两个 ARR 服务器的配置方式相同,因此使用共享配置。 F5 BIG-IP 配置为将所有请求路由到主动 ARR 服务器,并且仅在必要时将请求路由到被动 ARR 服务器。

ARR 中的主机名关联功能根据主机名将请求关联到特定服务器(或 RC 中的一组服务器)。 主机名与内容服务器之间的关联映射的运行时状态信息存储在 ARR 服务器的实例中的内存中。 在 ARR 1.0 版本中,ARR 利用 Microsoft 外部缓存来在多个 ARR 服务器之间共享和维护此运行时的状态。 本文档提供了有关此方案的详细信息。

ARR 版本 1 版本完全支持此方案。

ARR 配置

步骤 1:在两个 ARR 服务器上启用共享配置。

  • 按照 本文档 中的步骤在 IIS 中设置共享配置。

步骤 2:使用 ARR 配置 3 层部署体系结构。

  • 按照 本文档 中的步骤在 3 层部署体系结构中配置 ARR。

  • 在高级别上,上述文档描述了:

    • 如何使静态内容在 ARR 服务器上可用。
    • 如何为静态内容编写 URL 重写规则,以便直接从 ARR 服务器提供这些规则。
    • 如何为动态内容编写 URL 重写规则,以便将其转发到应用程序服务器。

步骤 3:启用和配置外部缓存。

  • 按照 本文档 中的步骤启用和配置要用于 ARR 的外部缓存。

F5 BIG-IP 配置

在此方案中,你将创建一个虚拟服务器,该服务器将负载均衡到由两台(或更多)ARR服务器组成的池中。 选择的负载均衡方法应将所有流量发送到主 ARR 服务器,直到它变得不可用。 此时,BIG-IP LTM 应将所有流量发送到辅助 ARR 服务器。

步骤 1:配置 ARR 服务器的池。

  • 在“本地流量”部分中,单击“Pools”。 然后单击“创建”按钮创建池。
  • 任何唯一名称都适用于池;该示例使用ARR_Pool。 - 对于运行状况监视器,可以使用自定义 HTTP 监视器或默认 HTTP 监视器。 - 可以将负载均衡方法设置为轮循机制。 在此方案中,由于只有主动和被动 ARR 服务器,因此不使用负载均衡。 - 请务必启用优先组激活。 这会配置 BIG-IP,以将流量发送到具有最高优先级值的服务器。 当这些服务器不可用时,BIG-IP 将流量发送到具有下一个最高优先级值的 ARR 服务器。 - 在此方案中,10.0.0.1 的 ARR 服务器优先级值为 1,10.0.0.2 的优先级值为 2。 所有流量将发送到 10.0.0.2,直到出现故障,然后将流量发送到 10.0.0.1。

Big I P 网站的屏幕截图。在名称框中,是 R R 下划线池。在“本地流量”窗格中,已选择“池”。

步骤 2:配置虚拟服务器。

  • 在“本地流量”部分中,单击“虚拟服务器”。 然后单击“创建”按钮创建虚拟服务器。
  • 任何唯一名称都适用于虚拟服务器;该示例使用ARR_VS。 - 对于目标,你可以使用用户将浏览器指向的IP地址。 在本例中,我们使用。 对于服务端口,我们使用“80”。 - 对于“虚拟服务器类型”部分,有多个选项。 由于依赖于 ARR 进行路由,因此可以选择性能 HTTP,这是针对最佳性能而设计的。 - 对于默认池,请选择在步骤 1 中创建的池。

F5网页的屏幕截图。在“默认池”框中,已选择 A R R 池。在“本地流量”窗格中,已选择“虚拟服务器”。

  • 此时,您应该能够连接到此虚拟服务器,该连接请求将被转发到相应的 ARR 服务器。

选项 2:ARR 中的活动/活动

在主动/主动模式下,可以有两台或更多个 ARR 服务器。 此配置可实现高可用性和可伸缩性,这与 Active/Pass 模式不同,后者仅实现高可用性。 由于以相同的方式配置了多个 ARR 服务器,因此使用共享配置。 F5 BIG-IP 配置为对所有可用和正常的 ARR 服务器对传入请求进行负载均衡,后者反过来又将请求转发到内容服务器。

如前所述,主机名与内容服务器之间的关联映射的运行时状态信息存储在 ARR 服务器的实例中的内存中。 若要在多个 ARR 服务器之间共享此信息,请使用 Microsoft IIS 的外部缓存。 有关外部缓存的详细信息,请参阅 本文档

ARR 配置

主动/主动的 ARR 配置与主动/被动的 ARR 配置相同。 主要区别在于如何配置 F5。

步骤 1:在两个 ARR 服务器上启用共享配置。

  • 按照 本文档 中的步骤在 IIS 中设置共享配置。

步骤 2:使用 ARR 配置 3 层部署体系结构。

  • 按照 本文档 中的步骤在 3 层部署体系结构中配置 ARR。

  • 在高级别上,上述文档描述了:

    • 如何使静态内容在 ARR 服务器上可用。
    • 如何为静态内容编写 URL 重写规则,以便直接从 ARR 服务器提供这些规则。
    • 如何为动态内容编写 URL 重写规则,以便将其转发到应用程序服务器。

步骤 3:启用和配置外部缓存。

  • 按照 本文档 中的步骤启用和配置要用于 ARR 的外部缓存。

F5 BIG-IP 配置

在此方案中,所有可用的 ARR 服务器都被视为活动服务器,适合负载均衡流量。 使用 BIG-IP LTM 来确定 ARR 前端的运行状况和性能,并将流量定向到性能最佳的前端。

步骤 1:配置 ARR 服务器的池。

  • 在“本地流量”部分中,单击“Pools”。 然后单击“创建”按钮创建池。
  • 任何唯一名称都适用于池;该示例使用ARR_Pool。 - 对于运行状况监视器,可以使用自定义 HTTP 监视器或默认 HTTP 监视器。 - 由于有多个 ARR 服务器要将流量分发到其中,需要选择最符合需求的负载均衡方法。 假设所有 ARR 服务器都具有类似的硬件特征,动态负载均衡方法(如最快、观察到的或预测的)将为你提供基于性能的分布。

F5 网页的屏幕截图。在“本地流量”框中,已选择“池”。在“负载均衡方法”框中,已选择最快的应用。

步骤 2:配置虚拟服务器。

  • 在“本地流量”部分中,单击“虚拟服务器”。 然后单击“创建”按钮创建虚拟服务器。
  • 任何唯一名称都适用于虚拟服务器;该示例使用ARR_VS。 - 对于目标,你可以使用用户将浏览器指向的IP地址。 在本例中,我们使用。 对于服务端口,我们使用“80”。 - 对于“虚拟服务器类型”部分,有多个选项。 由于依赖于 ARR 进行路由,因此可以选择性能 HTTP,这是针对最佳性能而设计的。 - 对于默认池,请选择在步骤 1 中创建的池。

F5网页的屏幕截图。在“本地流量”框中,已选择“虚拟服务器”。在“默认池”框中,已选择 A R R 池。

总结

在此白皮书中,审查了两个主要 ARR 方案,通过部署多个 ARR 服务器并使用 F5 BIG-IP 来实现高可用性和可伸缩性。

附录

附录 A:用于编写路由决策规则的所有可用 HTTP 标头和服务器变量。

ALL_HTTP ALL_RAW APPL_MD_PATH
APPL_PHYSICAL_PATH CERT_COOKIE CERT_FLAGS
证书颁发者 CERT_KEYSIZE CERT_SECRETKEYSIZE
CERT_SERIALNUMBER CERT_SERVER_ISSUER 服务器证书主题 (CERT_SERVER_SUBJECT)
CERT_SUBJECT CONTENT_LENGTH CONTENT_TYPE
DOCUMENT_ROOT GATEWAY_INTERFACE HTTP_ACCEPT
HTTP_ACCEPT_ENCODING HTTP_ACCEPT_LANGUAGE HTTP_CONNECTION
HTTP_CONTENT_LENGTH HTTP_HOST HTTP_IF_MODIFIED_SINCE
HTTP_IF_NONE_MATCH HTTP_REFERER HTTP_UA_CPU (用户代理 CPU)
HTTP_USER_AGENT HTTPS HTTPS_KEYSIZE
HTTPS_SECRETKEYSIZE HTTPS_SERVER_ISSUER HTTPS_SERVER_SUBJECT
INSTANCE_ID INSTANCE_META_PATH LOCAL_ADDR
PATH_INFO PATH_TRANSLATED QUERY_STRING
REMOTE_ADDR 远程主机 (REMOTE_HOST) REMOTE_PORT
REMOTE_USER REQUEST_FILENAME REQUEST_METHOD
REQUEST_URI SCRIPT_FILENAME SCRIPT_NAME
SERVER_ADDR SERVER_NAME SERVER_PORT
SERVER_PORT_SECURE SERVER_PROTOCOL SERVER_SOFTWARE
URL