实现高可用性和可伸缩性 - 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 部署:
虽然 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 的同一服务器上启用:
方案 1:基于 HTTP 的路由和负载均衡
基于 HTTP 的路由和负载均衡方案可实现涉及以下三层部署体系结构:
- 第 1 层 (Web):提供双重用途,可处理静态内容,还可将剩余动态请求路由到第 2 层服务器,并实现负载均衡。
- 第 2 层(应用程序):处理依赖于业务逻辑的动态内容。
- 第 3 层(数据):存储数据。
下图演示了 3 层部署:
尽管上面的示例显示的路由规则可区分静态内容与动态内容,但另一种常见方案是区分表示层请求与 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 配置分为以下步骤:
- 在所有 ARR 服务器上安装 NLB 功能。
- 为 ARR 创建 NLB 群集。
- 为主动/被动部署配置 NLB。
- 打开 “服务器管理器” 。
- 展开“功能”。
- 单击“添加功能”。
- 在“添加功能向导”中,选择“网络负载均衡”。
- 单击“安装”,确认 NLB 功能的安装。
- 验证是否已成功安装 NLB 功能。
- 在所有 ARR 服务器上重复上述步骤。
- 验证 NLB 是否已安装在 ARR 服务器的所有实例上。
- 转到“启动”>“所有程序”>“管理工具”,并打开“网络负载均衡管理器”。
- 右键单击“网络负载均衡群集”,然后选择“新建群集”。
- 在“新建群集”对话框中的“主机”文本框中,键入其中一台 ARR 服务器的服务器地址。 如果有多个接口,请键入要创建 NLB 群集的服务器地址。
- 在主动/被动模式(NLB 中的单主机模式)下,优先级确定故障转移的发生顺序。 默认情况下,优先级为 1 的服务器是活动节点。
- 需要群集 IP(虚拟 IP 地址)。 单击“添加”。这是客户端将与之通信的 IP 地址。
- 键入虚拟 IP 地址,然后单击“确定”。
- 单击 “下一步” 。
- 接受默认值。 有关更多详细信息,请参阅附录。
- 单击“完成”以完成 NLB 群集的创建。
- 创建 NLB 群集后,可以向群集添加其他成员。 在所有其他成员服务器上的执行剩余步骤。 在网络负载均衡管理器中,右键单击新选择的群集,然后选择“将主机添加到群集”。
- 键入要添加的成员的服务器地址。 如果有多个接口,请选择 NLB 群集应使用的接口。
- 请注意,群集中的成员服务器之间的优先级分配是互斥且唯一的。 在主动/被动模式(NLB 中的单主机模式)下,优先级确定故障转移顺序。
- 单击“完成”,将成员服务器添加到群集。
- “网络负载均衡管理器”应如下所示:
- 若要为主动/被动部署配置 NLB,请在“网络负载均衡管理器”中右键单击群集,然后选择“群集属性”。 单击“端口规则”选项卡。单击“编辑”。
- 选择“单一主机”,然后单击“确定”。
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 配置分为以下步骤:
- 在所有 ARR 服务器上安装 NLB 功能。
- 为 ARR 创建 NLB 群集。
- 为主动/主动部署配置 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,请在“网络负载均衡管理器”中,右键单击群集,然后选择“群集属性”。 单击“端口规则”选项卡。单击“编辑”。
- 选择“多台主机”。 对于“相关性”设置,请选择“无”。 如上所述,建议不要在 NLB 中使用相关性,因为这样会使负载分布更加均匀。
NLB 已成功配置为在主动/主动模式下与 ARR 一起工作。
方案 2:使用主机名相关性的共享主机
此方案利用 ARR 中的主机名关联功能,使共享主机部署能够实现以下目标:
- 减少传统共享主机部署所涉及的手动管理和维护。
- 最大程度地利用现有服务器资源,同时确保所有服务器资源均得到均衡利用。
- 轻松横向扩展环境。
- 创造商机以销售其他容量。
有关共享主机和 ARR 的详细信息,请参阅这篇文档。
下图演示了使用 ARR 的共享主机环境:
选项 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 配置分为以下步骤:
- 安装 NLB 功能。
- 为 ARR 创建 NLB 群集。
- 为主动/被动部署配置 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 配置分为以下步骤:
- 安装 NLB 功能。
- 为 ARR 创建 NLB 群集。
- 为主动/主动部署配置 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 |
NLB 服务器核心说明:
- 安装 NLB 功能:
https://download.microsoft.com/download/6/3/5/6350896f-1e08-440b-9f24-d50f5e9b2390/ServerCoredeepdive.ppt
- 安装 NLB 功能:
NLB 和 SSL:
其他 NLB 链接:
- https://technet.microsoft.com/library/cc782694.aspx
- https://technet.microsoft.com/library/cc778263.aspx
https://support.microsoft.com/kb/323437
https://support.microsoft.com/kb/890159
- https://blogs.msdn.com/clustering