对 ARR 2.0 或更高版本中的缓存项进行故障排除

适用于: Internet 信息服务

概述

在本演练中,可以了解如何在请求通过 ARR 传递并发送到下一层服务器时跟踪该请求,并查看可获取的信息,以确定请求的发送位置以及从何处提供请求。

此疑难解答中使用的工具

了解场的体系结构

第一步是了解环境的体系结构,包括以下内容。

  • ARR 场拓扑 (服务器数、路由配置方式、其他设备)
  • URL 重写规则到位

在本演练中,可以使用以下配置来跟踪请求。

关系图显示了子节点、父节点和源服务器,其箭头指示缓存未命中数和请求。

磁盘缓存配置

以下代码片段演示配置了最大大小为 100 GB 的本地驱动器。

<diskCache> 
<driveLocation path="E:\temp$\arrcache" maxUsage="100" />            
</diskCache>

全局缓存控制规则

当不存在缓存控制指令时,此规则定义为缓存 60 分钟。

<rule name="ARR_CacheControl_b5aec65d-6327-407f-a28c-b34e48c5cda2" enabled="true" patternSyntax="Wildcard"> 
     <match url="*" />     
       <serverVariables>        
         <set name="ARR_CACHE_CONTROL_OVERRIDE" value="0,max-age=3600" />         
       </serverVariables>
</rule>

制定数据收集计划

本部分将指导你完成通过 ARR 传输的缓存命中和未命中的流量,并确定可用于调查请求的任何工具或日志。 以下步骤概述了以前未使用作为参考提供的配置和每个步骤中使用的工具缓存的内容的请求流。

  • 在内存中或子节点) 上的磁盘上, (本地找不到请求的内容。

    • FREB 日志
    • IIS 内置日志记录
    • 网络监视器
  • 请求将转发到下一层缓存节点 (父节点) 。

    • FREB 日志
    • IIS 高级日志记录模块
    • IIS 内置日志记录
    • 网络监视器
  • 在下一层缓存节点 (在内存中和磁盘) 上都找不到请求的内容。 根据缓存层次结构,尽可能多次重复第 2 点。

  • 请求将转发到源服务器。

    • FREB 日志
    • IIS 内置日志记录
    • 网络监视器

收集数据

在内存和磁盘 (本地找不到请求的内容)

在这里,可以识别 IIS 日志或 FREB 日志中的缓存命中或未命中。 FREB 日志提供了其他详细信息,例如请求的路由位置,如果有多个下层服务器,这一点很重要。

IIS 日志条目 - 可在 cs-uri-query 字段中找到以下条目,用于标识缓存命中或未命中以及请求的 GUID,这些条目可用于标识下级服务器上的请求。

X-ARR-CACHE-HIT=0
0 =  Cache miss, 1 = Cache hit
X-ARR-LOG-ID=62a3161c-b4f5-408e-9ce7-55d25c018aea
Guid identifying this request. This can be used to track as the request is passed to Parent nodes.

FREB 日志条目 - 缓存未命中项找到 ARR_DISK_CACHE_GET_FAILED

类型 条目 详细信息
r ARR_DISK_CACHE_GET_FAILED警告 FilePath=“\?\C:\ARRCache\localhost\iisstart.htm.full”, ErrorCode=“系统找不到指定的文件。 (0x80070002) “, IsRangeEntry=”false“, RangeOffset=”0“, RangeSegmentSize=”0”

标识请求路由到的服务器。 观察发送到服务器 的请求,该服务器 W2K8WEBSERVER2将是用于数据评审的下一级服务器。

类型 条目 详细信息
ARR_SERVER_ROUTED RoutingReason=“LoadBalancing”, Server=“W2K8WEBSERVER2”, State=“Active”, TotalRequests=“8”, FailedRequests=“0”, CurrentRequests=“1”, BytesSent=“1127”, BytesReceived=“6441379”, ResponseTime=“31351”

以下标头将添加到转发请求中。 如果某些名称与默认名称(如 、 和 X-ARR-LOG-IDX-Forwarded-For不同,X-ARR-ClientCert则已在服务器场代理设置中自定义名称。

标头 详细信息
GENERAL_SET_REQUEST_HEADER HeaderName=“Max-Forwards”, HeaderValue=“10”, Replace=“true”
GENERAL_SET_REQUEST_HEADER HeaderName=“X-Forwarded-For”, HeaderValue=“127.0.0.1:62489”, Replace=“true”
GENERAL_SET_REQUEST_HEADER HeaderName=“X-ARR-SSL”, HeaderValue=“”, Replace=“true”
GENERAL_SET_REQUEST_HEADER HeaderName=“X-ARR-ClientCert”, HeaderValue=“”, Replace=“true”
GENERAL_SET_REQUEST_HEADER HeaderName=“X-ARR-LOG-ID”, HeaderValue=“fe9d20da-a571-4451-8ef3-0e7faf1a463a”, Replace=“true”

请求转发到下一层缓存节点 (父节点)

在上一步中,已将此服务器标识为 W2K8WEBSERVER2。 在此步骤中,可以检查此服务器上的以下数据。 可以使用多个数据点。 使用 X-ARR-LOG-ID,可以确定请求是否已到达此服务器。

FREB 日志 - 请求可以通过从子节点发送的 标识 X-ARR-LOG-IDfe9d20da-a571-4451-8ef3-0e7faf1a463a已在上一步中标识。

标头 详细信息
GENERAL_REQUEST_HEADERS Headers=“Connection: Keep-Alive 接受: */* 主机:localhost Max-Forwards: 10 X-Original-URL: /iisstart.htm X-Forwarded-For: 127.0.0 0.1:62489 X-ARR-LOG-ID:fe9d20da-a571-4451-8ef3-0e7faf1a463a

IIS 高级日志记录模块 - 通过使用高级日志记录,可以基于标头X-Forwarded-For添加自定义日志记录字段,X-ARR-LOG-ID然后使用筛选仅记录存在这些标头时。

#Software: IIS Advanced Logging Module
#Version: 1.0
#Start-Date: 2009-10-16 18:42:51.494
#Filter: ((ARRLogID isPresent ) || (xforward isPresent ))
#Fields:  date time cs-uri-stem cs-uri-query s-contentpath sc-status s-computername cs(Referer) sc-win32-status sc-bytes cs-bytes X-ARR-LOG-ID X-Forwarded-For
2009-10-16 18:51:29.983 /iisstart.htm - "C:\inetpub\wwwroot\iisstart.htm" 200 "W2K8WEBSERVER2" - 0 1680 219 "fe9d20da-a571-4451-8ef3-0e7faf1a463a" "127.0.0.1:62489"

网络监视器 - 若要跟踪特定请求, X-ARR-LOG-ID 请使用跟踪标识 和 X-Forwarded-For

ARR 帮助程序 - 此模块将 X-Forwarded-For 标头添加到 C-IP 字段,并将 X-ARR-LOG-ID 标头添加到 cs-uri-query 默认 IIS 日志的 字段中。

注意

Microsoft 目前不支持 ArrHelper。

对多个缓存级别重复步骤 1 和 2

如果服务器父节点W2K8WEBSERVER2设置了 ARR 和缓存功能,则可能需要检查 IISLOGS 或 FREB,以查看是否存在缓存“命中”或“未命中”,并根据该缓存的入口状态决定在何处继续。

请求转发到源服务器

此步骤可被视为普通 HTTPS 请求,并可以使用以下工具进行跟踪:

  • 网络监视器 - 捕获源服务器上的跟踪,以验证请求的接收情况。
  • IIS 日志 - 检查 IIS 日志中要跟踪的内容的 HTTP 响应代码。
  • IIS FREB 日志 - 如果在网络跟踪中找到请求,并且 HTTP 响应代码不是 200,则可能需要再次使用 FREB 来排查问题。

排查缓存故障

检查 Cache-Control 标头

验证从客户端收到的 Cache-Control 标头。 这可以与检查缓存控制规则一起完成,因为可以将标头配置为替代标头。

查看 ARR 中的 Cache-Control 规则

检查 ARR 中的缓存控制规则以验证是否启用了 ARR 缓存。

验证 HTTP.SYS 设置

有关内核中 HTTP.sys 不缓存内容的原因的详细信息,请参阅 HTTP.sys 不缓存内容的实例

磁盘缓存失败

当发生磁盘故障时,ARR 会将事件记录到应用程序事件日志,并将磁盘标记为不正常。

Log Name: Application 
Source: Application Request Routing 
Date: 11/2/2009 5:26:59 PM 
Event ID: 1006 
Task Category: None 
Level: Warning 
Keywords: Classic 
User: N/A 
Computer: 
Description: Drive with path '\?\E:\temp$\arrcache\' is being marked unhealthy. The data contains the error code. 
Event Xml: 

更多信息