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

作者:Won Yoo

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

Microsoft Corporation F5
作者:Won Yoo 作者:Ryan Korock
发布时间:2008 年 11 月 13 日

摘要

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

概述

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

Diagram of a typical A R R deployment. A R R provides high availability and scalability for the content servers.

虽然 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 层的高可用性,如下所示:

Diagram of F five Big dash I P layer three and four functionality. F five Big dash I P layer three and layer four compliment A R R strength in making routing decisions based on layer seven.

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

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

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

下图演示了这 3 层部署:

Diagram illustrating the three tier deployment. It shows a routing rule that differentiates the static content form the dynamic content.

尽管上面的示例显示的路由规则可区分静态内容与动态内容,但另一种常见方案是区分表示层请求与 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 服务器池。

  • 在“本地流量”部分,单击“池”。 然后,单击“创建”按钮以创建池。
  • 任何唯一名称都适用于池;该示例使用的是 ARR_Pool。
  • 对于 Health Monitor,可使用自定义 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。

Screenshot of the Big dash I P web page. In the Health Monitors box under Active, h t t p is highlighted. In the New Members box, the A R R server priority value is ten dot zero dot zero dot one.

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

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

Screenshot of the F five Big I P page. In the Name box A R R underscore V S is written.

  • 此时,应能够连接到此虚拟服务器,该虚拟服务器将发送到相应的 ARR 服务器。

选项 2:主动/主动

在主动/主动模式下,可以有两台或更多台 ARR 服务器。 此配置可同时实现高可用性和可伸缩性,这与主动/被动模式不同,后者仅可实现高可用性。 如前所述,由于以相同的方式配置了多台 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 服务器池。

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

Screenshot of the F five Big I P web page. In the Load Balancing Method box, Fastest Application is chosen.

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

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

Screenshot of the F five Big I P web page. In the Default Pool box, the pool created in Step one, the A R R pool, is selected.

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

此方案利用 ARR 中的主机名关联功能,使共享主机部署能够实现以下目标:

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

有关共享主机和 ARR 的详细信息,请参阅这篇文档。

下图演示了使用 ARR 的共享主机环境:Diagram of the shared hosting environment using A R R.

选项 1:主动/被动

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

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

ARR 中的主机名关联功能根据主机名将请求关联到特定服务器(或 RC 中的一组服务器)。 主机名与内容服务器之间的关联映射的运行时状态信息存储在 ARR 服务器实例的内存中。 在 ARR 版本 1 发行版中,ARR 利用适用于 IIS 的 Microsoft External Cache 在多台 ARR 服务器之间共享和维护此运行时状态。 有关此方案的详细信息,请参阅这篇文档。

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

ARR 配置

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

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

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

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

  • 概括而言,上述文档描述了:

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

步骤 3:启用并配置 External Cache。

  • 按照这篇文档中的步骤启用并配置 External Cache,以便与 ARR 配合使用。

F5 BIG-IP 配置

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

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

  • 在“本地流量”部分,单击“池”。 然后,单击“创建”按钮以创建池。
  • 任何唯一名称都适用于池;该示例使用的是 ARR_Pool。 - 对于 Health Monitor,可以使用自定义 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。

Screenshot of the Big I P web site. In the name box is A R R underscore pool. In the Local Traffic pane, Pools is selected.

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

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

Screenshot of the F five web page. In the Default Pool box, A R R pool is selected. In the Local Traffic pane, Virtual Servers is selected.

  • 此时,应能够连接到此虚拟服务器,该虚拟服务器将发送到相应的 ARR 服务器。

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

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

如前所述,主机名与内容服务器之间的关联映射的运行时状态信息存储在 ARR 服务器实例的内存中。 为了在多台 ARR 服务器之间共享此信息,将使用适用于 IIS 的 Microsoft External Cache。 有关 External Cache 的详细信息,请参阅这篇文档。

ARR 配置

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

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

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

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

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

  • 概括而言,上述文档描述了:

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

步骤 3:启用并配置 External Cache。

  • 按照这篇文档中的步骤启用并配置 External Cache,以便与 ARR 配合使用。

F5 BIG-IP 配置

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

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

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

Screenshot of the F five web page. In the Local Traffic box, Pools is selected. In the Load Balancing Method box, Fastest application is selected.

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

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

Screenshot of the F five web page. In the Local Traffic box, Virtual Servers is selected. In the Default Pool box, A R R Pool is selected.

总结

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

附录

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

ALL_HTTP ALL_RAW APPL_MD_PATH
APPL_PHYSICAL_PATH CERT_COOKIE CERT_FLAGS
CERT_ISSUER 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
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