实现高可用性和可伸缩性 - ARR 和 NLB

作者:Won Yoo

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

Microsoft Corporation
作者:Ahmed Bisht、Won Yoo
发布时间:2008 年 11 月 13 日

摘要

本文档提供有关如何将应用程序请求路由 (ARR) 与网络负载均衡 (NLB) 配合使用以实现高可用性和可伸缩性的说明性指南。

概述

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

Diagram showing the A R R forwarding H T T P requests.

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

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

为了克服这些挑战,管理员可以考虑使用多台具有网络负载均衡 (NLB) 功能的 ARR 服务器。 ARR 可以在主动/被动模式下部署,以便仅实现高可用性,也可以在主动/主动模式下部署,以实现高可用性和可伸缩性。 本白皮书介绍了如何一起部署 ARR 和 NLB,在实现总体高可用性和可伸缩性的同时实现核心 ARR 方案。 NLB 适用于 Windows Server 2008 的所有 SKU。

使用应用程序请求路由和网络负载均衡

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

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

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

由于 NLB 在第 3 层做出路由决策,因此应用程序特定的信息(如 HTTP 头和服务器变量)不能用于提供基于应用程序级别的路由。 同时,ARR 本身不提供容错部署功能,必须依赖其他互补技术和解决方案来实现 ARR 层的高可用性。 NLB 在网络堆栈上的不同级别运行,在部署 ARR 的同一服务器上启用:

Digram showing connections between A R R 1 and 2 and content servers.

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

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

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

下图演示了 3 层部署:

Diagram showing the content flow between A R R and content servers in each tier.

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

选项 1:主动/被动

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

在此设置中,由于两台 ARR 服务器的配置方式相同,因此使用共享配置。 首先,在两台服务器上安装 ARR,然后创建 NLB 群集。 NLB 群集配置为仅接受其中一个群集节点上的流量。 这可以通过配置具有单个主机筛选模式的群集端口规则来实现。 接受流量的节点由 NLB 群集节点的主机优先级设置确定。 有关更多详细信息,请参阅 NLB 配置

除 ARR 中的主机名关联功能之外,两台 ARR 服务器之间没有必须共享的运行时状态信息。 因此,在此方案中,ARR 或 NLB 都不需要进行特殊配置。 即使在 ARR 中使用服务器关联功能,关联状态信息也会通过请求头中的 Cookie 提供给被动服务器。

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

ARR 配置

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

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

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

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

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

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

NLB 配置

NLB 配置分为以下步骤:

  1. 在所有 ARR 服务器上安装 NLB 功能。
  2. 为 ARR 创建 NLB 群集。
  3. 为主动/被动部署配置 NLB。

在所有 ARR 服务器上安装 NLB 功能

  1. 打开 “服务器管理器”
    Screenshot of the Server Manager window showing details in the main pane.
  2. 展开“功能”
  3. 单击“添加功能”。
  4. 在“添加功能向导”中,选择“网络负载均衡”
    Screenshot of the Add Features Wizard window showing features in the main pane.
  5. 单击“安装”,确认 NLB 功能的安装
    Screenshot of the Add Features Wizard window showing the Confirm Installation Selections in the main pane.
  6. 验证是否已成功安装 NLB 功能。
    Screenshot of the Add Features Wizard window showing the Installation Results page in the main pane.
  7. 在所有 ARR 服务器上重复上述步骤。

为 ARR 创建 NLB 群集

  1. 验证 NLB 是否已安装在 ARR 服务器的所有实例上。
  2. 转到“启动”>“所有程序”>“管理工具”,并打开“网络负载均衡管理器”
    Screenshot of the Network Load Balancing Manager window with Network Load Balancing Clusters highlighted.
  3. 右键单击“网络负载均衡群集”,然后选择“新建群集”
    Screenshot of the New Cluster dialog.
  4. 在“新建群集”对话框中的“主机”文本框中,键入其中一台 ARR 服务器的服务器地址。 如果有多个接口,请键入要创建 NLB 群集的服务器地址。
    Screenshot of the New Cluster dialog showing an I P address in the host input box.
  5. 在主动/被动模式(NLB 中的单主机模式)下,优先级确定故障转移的发生顺序。 默认情况下,优先级为 1 的服务器是活动节点。
    Screenshot of the New Cluster Host Parameters dialog with default settings.
  6. 需要群集 IP(虚拟 IP 地址)。 单击“添加”。这是客户端将与之通信的 IP 地址。
    Screenshot of the New Cluster Cluster I P Addresses dialog.
  7. 键入虚拟 IP 地址,然后单击“确定”
    Screenshot of the Add I P Address dialog
  8. 单击 “下一步”
    Screenshot of the Cluster I P Addresses dialog showing an I P address and subnet mask.
  9. 接受默认值。 有关更多详细信息,请参阅附录
    Screenshot of the Cluster Parameters dialog showing default parameters.
  10. 单击“完成”以完成 NLB 群集的创建
    Screenshot of the Port Rules dialog
  11. 创建 NLB 群集后,可以向群集添加其他成员。 在所有其他成员服务器上的执行剩余步骤。 在网络负载均衡管理器中,右键单击新选择的群集,然后选择“将主机添加到群集”
    Screenshot of the Add Host to Cluster dialog.
  12. 键入要添加的成员的服务器地址。 如果有多个接口,请选择 NLB 群集应使用的接口。
    Screenshot of the Connect dialog. There is an I P address in the host input box.
  13. 请注意,群集中的成员服务器之间的优先级分配是互斥且唯一的。 在主动/被动模式(NLB 中的单主机模式)下,优先级确定故障转移顺序。
    Screenshot of the Host Parameters dialog. Priority is set to 2.
  14. 单击“完成”,将成员服务器添加到群集
    Screenshot of the Port Rules dialog. The Finish button is selected.
  15. “网络负载均衡管理器”应如下所示
    Screenshot of the Network Load Balancing Manager window.

为主动/被动部署配置 NLB

  1. 若要为主动/被动部署配置 NLB,请在“网络负载均衡管理器”中右键单击群集,然后选择“群集属性”。 单击“端口规则”选项卡。单击“编辑”
    Screenshot of the Properties dialog with the Port Rules tab selected.
  2. 选择“单一主机”,然后单击“确定”
    Screenshot of the Add/Edit Port Rule dialog. Single host is selected in the Filtering mode section.

NLB 已成功配置为在主动/被动模式下与 ARR 一起工作。

选项 2:主动/主动

在主动/主动模式下,可以有两台或更多台 ARR 服务器。 此配置可同时实现高可用性和可伸缩性,这与主动/被动模式不同,后者仅可实现高可用性。

如前所述,由于以相同的方式配置了多台 ARR 服务器,因此使用的是共享配置。 主要区别在于 NLB 的配置方式。 为了同时利用所有 ARR 服务器,NLB 群集端口规则配置为多主机模式。

无论是否在 NLB 上启用关联功能,ARR 服务器上都不需要进行特殊配置。 首先,ARR 服务器使用一个共享配置,因此它们的配置方式相同。 其次,由于 ARR 使用客户端 Cookie 来存储服务器相关性信息供自己使用,因此该信息可根据请求提供,因此可以跨 ARR 服务器使用。 对于 NLB,建议将相关性设置为“无”,因为这样会使负载分布更加均匀。

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

ARR 配置

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

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

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

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

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

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

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

NLB 配置

NLB 配置分为以下步骤:

  1. 在所有 ARR 服务器上安装 NLB 功能。
  2. 为 ARR 创建 NLB 群集。
  3. 为主动/主动部署配置 NLB。

在所有 ARR 服务器上安装 NLB 功能:[此处]有文档记录 (achieving-high-availability-and-scalability-arr-and-nlb.md#install NLB)。

为 ARR 创建 NLB 群集:[此处]有文档记录 (achieving-high-availability-and-scalability-arr-and-nlb.md#create nlb)。

为主动/主动部署配置 NLB。

  1. 要为主动/主动部署配置 NLB,请在“网络负载均衡管理器”中,右键单击群集,然后选择“群集属性”。 单击“端口规则”选项卡。单击“编辑”
    Screenshot of the Properties dialog.
  2. 选择“多台主机”。 对于“相关性”设置,请选择“无”。 如上所述,建议不要在 NLB 中使用相关性,因为这样会使负载分布更加均匀。
    Screenshot of the Add/Edit Port Rule dialog. Multiple host is selected in the Filtering mode section.

NLB 已成功配置为在主动/主动模式下与 ARR 一起工作。

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

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

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

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

下图演示了使用 ARR 的共享主机环境:

Diagram showing the flow of requests and responses.

选项 1:主动/被动

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

在此设置中,由于两台 ARR 服务器的配置方式相同,因此使用共享配置。 NLB 群集配置为仅接受其中一个群集节点上的流量。 这可以通过配置具有单个主机筛选模式的群集规则来实现。 接受流量的节点由 NLB 群集节点的主机优先级设置确定。 有关更多详细信息,请参阅 NLB 配置

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

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

ARR 配置

步骤 1:为具有主机名相关性的共享主机配置 ARR。

  • 按照这篇文档中的步骤在 ARR 中为共享主机配置主机名关联功能。

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

  • 按照这篇文档的步骤启用并配置 External Cache。

NLB 配置

NLB 配置分为以下步骤:

  1. 安装 NLB 功能。
  2. 为 ARR 创建 NLB 群集。
  3. 为主动/被动部署配置 NLB。

安装 NLB 功能:[此处]有文档记录 (achieving-high-availability-and-scalability-arr-and-nlb.md#Install NLB features)。

为 ARR 创建 NLB 群集:[此处]有文档记录 (achieving-high-availability-and-scalability-arr-and-nlb.md#Create NLB cluster for ARR)。

为主动/被动部署配置 NLB:[此处]有文档记录 (achieving-high-availability-and-scalability-arr-and-nlb.md#Configure NLB for active/passive)。

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

在主动/主动模式下,可以有两台或更多台 ARR 服务器。 此配置可同时实现高可用性和可伸缩性,这与主动/被动模式不同,后者仅可实现高可用性。 由于以相同的方式配置了多台 ARR 服务器,因此使用的是共享配置。 为了同时利用所有 ARR 服务器,NLB 配置为多主机模式。 如前所述,主机名与内容服务器之间的关联映射的运行时状态信息存储在 ARR 服务器实例的内存中。 为了在多台 ARR 服务器之间共享此信息,将使用适用于 IIS 的 Microsoft External Cache。 有关 External Cache 的详细信息,请参阅本文档。

ARR 配置

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

步骤 1:为具有主机名相关性的共享主机配置 ARR。

  • 按照这篇文档中的步骤在 ARR 中为共享主机配置主机名关联功能。

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

  • 按照这篇文档的步骤启用并配置 External Cache。

NLB 配置

NLB 配置分为以下步骤:

  1. 安装 NLB 功能。
  2. 为 ARR 创建 NLB 群集。
  3. 为主动/主动部署配置 NLB。

安装 NLB 功能:[此处]有文档记录 (achieving-high-availability-and-scalability-arr-and-nlb.md#Install NLB features)。

为 ARR 创建 NLB 群集:[此处]有文档记录 (achieving-high-availability-and-scalability-arr-and-nlb.md#Create NLB cluster for ARR)。

为主动/主动部署配置 NLB:[此处]有文档记录 (achieving-high-availability-and-scalability-arr-and-nlb.md#Configure NLB for active/active)。 建议不要在此 ARR 方案中使用 NLB 中的相关性。

总结

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

附录

附录 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

附录 B:其他 NLB 文档