캐시 항목 ARR V2 문제 해결

작성자 : 푸르바 조시

이 문제 해결사에서 사용되는 도구:

  • ARR 도우미
  • FREB(실패한 요청 추적)
  • IIS 고급 로깅
  • 네트워크 모니터

이 자료는 정보 제공 목적으로만 제공됩니다. Microsoft는 어떠한 명시적 또는 묵시적 보증도 하지 않습니다.

개요

이 연습에서는 ARR을 통과하고 다음 계층 서버로 전송되는 요청을 추적하고 수집할 수 있는 데이터를 검사하여 요청이 전송된 위치와 궁극적으로 제공된 위치를 식별합니다.

팜의 아키텍처 이해

첫 번째 단계는 다음을 포함하여 환경의 아키텍처를 이해하는 것입니다. 이에 대한 지식이 없으면 문제 해결 시 모든 종류의 논리적 작업 계획을 고안하는 것은 불가능합니다.

  • ARR 팜 토폴로지(서버 수, 라우팅 구성 방법, 기타 디바이스)
  • URL 다시 쓰기 규칙 사용

이 연습에서는 다음 구성을 사용합니다.

다이어그램은 캐시 누락 및 요청을 나타내는 화살표가 있는 자식 노드, 부모 노드 및 원본 서버를 보여 줍니다.

디스크 캐시 구성:

최대 크기가 100GB로 구성된 로컬 드라이브 1개.

<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 있습니다.

Type 입력 세부 정보
r ARR_DISK_CACHE_GET_FAILED 경고 FilePath="\?\C:\ARRCache\localhost\iisstart.htm.full", ErrorCode="시스템에서 지정된 파일을 찾을 수 없습니다. (0x80070002)", IsRangeEntry="false", RangeOffset="0", RangeSegmentSize="0"

요청이 라우팅되는 서버를 식별합니다. 여기서는 W2K8WEBSERVER2 서버로 전송되는 요청을 볼 수 있으므로 데이터 검토를 위한 다음 수준 서버가 될 것임을 알 수 있습니다.

Type 입력 세부 정보
i ARR_SERVER_ROUTED RoutingReason="LoadBalancing", Server="W2K8WEBSERVER2", State="Active", TotalRequests="8", FailedRequests="0", CurrentRequests="1", BytesSent="1127", BytesReceived="6441379", ResponseTime="31351"

전달 요청에 다음 헤더가 추가됩니다. 일부 이름이 기본 X-Forwarded-For, X-ARR-ClientCert 및 X-ARR-LOG-ID와 다른 경우 서버 팜 프록시 설정에서 사용자 지정되었을 수 있습니다.

헤더 세부 정보
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-ID 로 요청을 식별할 수 있습니다. 마지막 단계에서 이를 "fe9d20da-a571-4451-8ef3-0e7faf1a463a" 로 식별했습니다.

헤더 세부 정보
GENERAL_REQUEST_HEADERS Headers="Connection: Keep-Alive Accept: */* Host: localhost Max-Forwards: 10 X-Original-URL: /iisstart.htm X-Forwarded-For: 127.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 도우미: 이 모듈은 C-IP 필드에 X-Forwarded-For를 추가하고 X-ARR-LOG-ID를 기본 IIS 로그의 cs-uri-query 필드에 추가합니다.

참고

ArrHelper는 현재 Microsoft에서 지원되지 않습니다.

여러 수준의 캐시에 대해 1단계와 2단계를 반복합니다.

서버 부모 노드 W2K8WEBSERVER2도 ARR 및 캐싱 기능으로 구성된 경우 IISLOGS/FREB를 다시 확인하여 캐시 적중/누락이 있는지 확인하고 해당 결과에 따라 어디로 가야 하는지 확인합니다.

요청이 원본 서버로 전달됩니다.

이 단계는 일반적인 http/s 요청으로 처리할 수 있으며 다음 도구를 사용하여 추적할 수 있습니다.

  • 네트워크 모니터: 원본 서버에서 추적을 캡처하여 요청 수신 확인
  • IIS 로그: 추적 중인 콘텐츠에 대한 HTTP 응답 코드에 대한 IIS 로그 확인
  • IIS FREB 로그: 요청이 네트워크 추적에서 발견되었고 Http 응답 코드가 200이 아닌 경우 FREBagain 을 사용하여 문제를 해결할 수 있습니다.

캐시 오류 문제 해결

Cache-Control 헤더 확인

클라이언트에서 받은 Cache-Control 헤더를 확인합니다. 이 작업은 헤더를 재정의하도록 구성할 수 있으므로 캐시 제어 규칙을 확인하는 것과 함께 수행할 수 있습니다.

ARR에서 Cache-Control 규칙 검토

ARR의 캐시 제어 규칙을 확인하여 ARR 캐싱이 사용되는지 확인합니다.

HTTP.SYS 설정 확인

여기에 커널의 HTTP.sys 콘텐츠가 캐시되지 않는 이유 확인

디스크 캐시 오류

Arr은 디스크 오류가 발생할 때 애플리케이션 이벤트 로그에 이벤트를 기록하고 디스크를 비정상으로 표시합니다.

로그 이름: 애플리케이션
원본: 애플리케이션 요청 라우팅
날짜: 2009년 11월 2일 오후 5:26:59
이벤트 ID: 1006
작업 범주: 없음
수준: 경고
키워드: 클래식
사용자: N/A
컴퓨터:
설명: 경로가 '\?\E:\temp$\arrcache'인 드라이브가 비정상으로 표시됩니다. 데이터에 오류 코드가 포함되어 있습니다.
이벤트 Xml:

기타 리소스