由 IIS 团队
概述
本主题引导读者完成配置应用程序请求路由以对 HTTP 请求进行负载均衡的步骤,以实现高可用性和可伸缩性。 本演练还重点介绍了应用程序请求路由如何监视内容服务器的运行状况,并将客户端发出的请求关联到内容服务器的方式的几个核心功能。
目标
若要使用应用程序请求路由跨多个内容服务器对 HTTP 请求进行负载均衡,如下所示:
先决条件
本演练需要满足以下先决条件:
- Windows 2008(任何 SKU)或更高版本上的 IIS 7.0 或更高版本。
- Microsoft 应用程序请求路由 1.0 版及其依赖模块。
- 至少有两个包含工作站点和应用程序的内容服务器。
按照 本文档 中所述的步骤安装应用程序请求路由。
另一个先决条件是,读者已使用 “定义和配置应用程序请求路由”(ARR)服务器组中所述的步骤定义和配置了服务器场。
步骤 1 - 验证 URL 重写规则
如果已使用 定义和配置应用程序请求路由(ARR)服务器组中所述的步骤创建服务器场,则已为简单的负载均衡方案创建 URL 重写规则。
若要使用 UI 验证 URL 重写规则,请执行以下操作:
- 启动 IIS 管理器。
- 选择在“定义和配置应用程序请求路由”(ARR)服务器组中创建的服务器场 myServerFarm。
- 将显示以下图标:
- 双击 “路由规则”。
- 验证是否已选中 “使用 URL 重写检查传入请求 ”复选框。
- SSL 卸载默认处于启用状态。 启用此功能后,ARR 服务器与应用程序服务器之间的所有通信都以明文方式完成,即使对于从客户端到 ARR 服务器的 HTTPS 请求也是如此。 当 ARR 服务器和应用程序服务器都部署在受信任的网络中(例如在同一数据中心内)时,启用 SSL 卸载不会牺牲安全性。 此外,启用此功能有助于最大程度地提高应用程序服务器上的服务器资源,因为它们不必在加密和解密请求和响应时花费周期。
若要禁用 SSL 卸载,请取消选中 “启用 SSL 卸载 ”复选框,然后单击“ 应用”。 - 打开浏览器并将多个请求发送到 ARR 服务器。
- 若要验证请求是否在应用程序服务器之间均匀分配负载,请选择 myServerFarm。 双击“ 监视和管理”。
- 在仪表板视图中,验证请求是否均匀分布。
若要使用命令行验证 URL 重写规则,请执行以下操作:
使用 管理员 权限打开命令提示符。
转到
%windir%\system32\inetsrv。若要验证 URL 重写规则是否已正确创建,请输入 appcmd.exe 列表配置 -section:system.webServer/rewrite/globalRules。 它返回如下所示的 globalRules:
<system.webServer> <rewrite> <globalRules> <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" /> <conditions> </conditions> <action type="Rewrite" url="http://myServerFarm/{R:0}" /> </rule> </globalRules> </rewrite> </system.webServer>若要禁用 SSL 卸载,请先删除所有 URL 重写规则:
appcmd.exe clear config -section:system.webServer/rewrite/globalRules然后,创建 URL 重写规则以转发 HTTPS 流量。 更具体地说,对于此规则,如果传入的请求是 HTTPS,ARR 将使用 SSL 转发请求:
appcmd.exe set config -section:system.webServer/rewrite/globalRules /+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost appcmd.exe set config -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*" /commit:apphost appcmd.exe set config -section:system.webServer/rewrite/globalRules /+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTPS}',pattern='On']" /commit:apphost appcmd.exe set config -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.url:"https://myServerFarm/{R:0}" /commit:apphost最后,创建 URL 重写规则,以明文形式将 HTTP 流量转发到应用程序服务器:
appcmd.exe set config -section:system.webServer/rewrite/globalRules /+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost appcmd.exe set config -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*" /commit:apphost appcmd.exe set config -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://myServerFarm/{R:0}" /commit:apphost若要验证 URL 重写规则是否已在禁用 SSL 卸载的情况下正确创建,请输入 appcmd.exe 列表配置 -section:system.webServer/rewrite/globalRules。 它返回如以下所示的全局规则:
<system.webServer> <rewrite> <globalRules> <rule name="ARR_myServerFarm_loadbalance_SSL" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" /> <conditions> <add input="{HTTPS}" pattern="On" /> </conditions> <action type="Rewrite" url="https://myServerFarm/{R:0}" /> </rule> <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" /> <conditions> </conditions> <action type="Rewrite" url="http://myServerFarm/{R:0}" /> </rule> </globalRules> </rewrite> </system.webServer>
步骤 2 - 配置健康检查
应用程序请求路由通过两种方式监视内容服务器的运行状况:
- 通过实时流量
- 通过显式 URL 测试
默认情况下,当向应用程序请求路由发出请求时,会自动执行实时流量测试。 显式 URL 测试是可用于实时流量测试的其他测试。 在本部分中,指南将指导你配置显式 URL 测试。
要使用 UI 配置健康检查监控,请执行以下操作:
- URL 测试需要特定的 URL 进行测试。 若要满足此要求,请使用记事本创建一个名为 healthCheck.txt 的文本文件,其中包含句子“我正常”。
- 将 healthCheck.txt 文件放在应用程序服务器上。
- 通过在浏览器中打开页面来验证 healthCheck.txt 是否正确呈现。
- 在 IIS 管理器中,选择服务器场 myServerFarm。 将显示以下图标:
- 双击 健康测试。
- 输入
http://(server name or FQDN of ARR server)/healthCheck.txt为 URL 值。 - 输入 正常 作为 响应匹配 值。 响应匹配是一个可选测试,以确保响应正文包含预期的字符串。 在这种情况下,由于 healthCheck.txt 包含句子“我正常”。响应匹配将查找“正常”一词。
- 单击 “应用” 保存更改。
- 若要验证健康检查监控功能,请停止在其中一台应用程序服务器上的受监控站点。 由于 Interval (seconds) 值设置为 30 秒,因此等待 30 秒进行下一次运行状况检查。
- 等待 30 秒后,向 ARR 服务器发送多个请求。
- 若要验证所有请求是否都转到正常的服务器(s),请双击“ 监视和管理”,然后使用 F5 键刷新仪表板。 请注意,已重置运行时统计信息。 这是设计造成的。 可能需要根据需要发送其他请求并刷新仪表板。
- 健康监控也用于检测不健康的服务器何时恢复正常。 若要验证此功能,请启动在步骤 9 中停止的网站。 同样,由于 Interval (seconds) 值设置为 30 秒,因此等待 30 秒进行下一次运行状况检查。
- 等待 30 秒后,向 ARR 服务器发送多个请求。
- 若要验证请求在服务器之间均匀分布,请在 IIS 管理器中刷新仪表板。 请注意,已重置运行时统计信息。 这是设计造成的。 可能需要根据需要发送其他请求并刷新仪表板。
使用命令行配置健康检查监控:
使用 管理员 权限打开命令提示符。
转到
%windir%\system32\inetsrv。若要设置 URL 为
http://(server name or FQDN of ARR server)/healthCheck.txt,并将 “I am healthy.” 设为要匹配的字符串,请输入:appcmd.exe set config -section:webFarms /[name='myServerFarm1'].applicationRequestRouting.healthCheck.url:"http://(server name or FQDN of ARR server)/healthCheck.txt " /[name='myServerFarm1'].applicationRequestRouting.healthCheck.responseMatch:"I am healthy." /commit:apphost
步骤 3 - 配置客户端关联性
应用程序请求路由提供客户端相关性功能,用于在客户端会话期间将客户端映射到应用程序请求路由后面的内容服务器。 启用此功能后,负载均衡算法仅应用于来自客户端的第一个请求。 从该时间点开始,来自同一客户端的所有后续请求将在客户端会话期间路由到同一内容服务器。 如果内容服务器上的应用程序是有状态的,并且客户端的请求必须路由到同一内容服务器,因为会话管理不是集中的,则此功能非常有用。
若要使用 UI 配置客户端关联,请执行以下操作:
- 启动 IIS 管理器。
- 选择在“定义和配置应用程序请求路由”(ARR)服务器组中创建的服务器场 myServerFarm。
- 将显示以下图标:
- 双击 “服务器亲和性”。
- 若要启用客户端相关性,请选中 “客户端关联 ”复选框,然后单击“ 应用”。
应用程序请求路由使用 Cookie 来启用客户端相关性。 Cookie 名称将用于在客户端上设置 Cookie。 也就是说,客户端必须接受 Cookie 才能使会话保持正常运行。 - 若要验证客户端相关性的功能,请向 ARR 服务器发送多个请求。 刷新 IIS 管理器中的仪表板(监视和管理)。 确认只有与客户端具有关联的一个应用程序服务器的运行时统计信息发生了更改。 可能需要根据需要发送其他请求并刷新仪表板。
使用命令行配置客户端相关性:
使用 管理员 权限打开命令提示符。
转到
%windir%\system32\inetsrv。若要启用客户端关联,请输入:
appcmd.exe set config -section:webFarms /[name='myServerFarm1'].applicationRequestRouting.affinity.useCookie:"True" /commit:apphost
步骤 4 - 禁止新连接
禁止服务器上的新连接是将服务器从服务器场环境中取出的一种正常方式。 当客户端关联功能正在使用时,它更有意义,因为不允许新连接时,应用程序请求路由将遵循现有会话。 也就是说,当客户端关联到不允许新连接的服务器时,客户端将继续路由到同一台服务器,因此不会对客户端造成任何影响。 但是,不会将任何新客户端路由到不允许新连接的服务器。
使用 UI 禁止新连接:
- 使用上述步骤 3 中的设置,确定客户端关联到的服务器。
- 选择在“定义和配置应用程序请求路由”(ARR)服务器组中创建的服务器场 myServerFarm。
- 将显示以下图标:
- 双击“ 监视和管理”。
- 选择与您的客户端相关联的服务器。 在 “操作 ”窗格中,单击“ 禁止新建连接”。
- 在确认对话框中,单击“ 是”。
- 若要验证来自客户端的请求是否继续路由到关联服务器,该服务器现在禁止新连接,请向 ARR 服务器发送多个请求。 刷新 IIS 管理器中的仪表板。 验证运行时统计信息是否仅针对客户端关联的服务器进行更改。 可能需要根据需要发送其他请求并刷新仪表板。
- 若要验证新客户端是否未路由到不允许新连接的服务器,请关闭并重启浏览器,删除应用程序请求路由设置的 Cookie。
- 向 ARR 服务器发送多个请求。 刷新 IIS 管理器中的仪表板。 仅验证运行时统计信息是否对可用的服务器发生变化。 更具体地说,验证不允许新连接的服务器的运行时统计信息未被更改。 可能需要根据需要发送其他请求并刷新仪表板。
总结
现在,已成功为应用程序请求路由配置许多设置,以便横向扩展和均匀分配负载。 有关使用应用程序请求路由的更高级路由功能,请参阅 使用应用程序请求路由。