다음을 통해 공유


Microsoft Azure 클래식 VM(가상 머신) 아키텍처의 워크플로

Important

이제 Cloud Services(클래식)는 2024년 9월 1일부터 모든 고객에게 더 이상 사용되지 않습니다. 기존 실행 중인 배포는 Microsoft에서 중지 및 종료되며 데이터는 2024년 10월부터 영구적으로 손실됩니다. 새 배포에서는 새로운 Azure Resource Manager 기반 배포 모델인 Azure Cloud Services(추가 지원)를 사용해야 합니다.

본 문서에서는 가상 머신 등의 Azure 리소스를 배포하거나 업데이트할 때 발생하는 워크플로 프로세스에 대한 개요를 제공합니다.

참고 항목

Azure에는 리소스를 만들고 사용하기 위한 Resource Manager 및 클래식이라는 두 가지 배포 모델이 있습니다. 이 문서에서는 클래식 배포 모델 사용에 대해 설명합니다.

다음 다이어그램은 Azure 리소스 아키텍처를 제공합니다.

<alt Azure 워크플로 이미지>

워크플로 기본 사항

A. RDFE / FFE는 사용자와 패브릭 간의 통신 경로입니다. RDFE(RedDog 프런트 엔드)는 Visual Studio, Azure MMC 등과 같은 클래식 배포 모델 API 및 관리 포털의 프런트 엔드인 퍼블릭 API입니다. 사용자의 요청은 모두 RDFE를 거쳐 전달됩니다. FFE(패브릭 프런트 엔드)는 RDFE에서 오는 요청을 패브릭 명령으로 변환하는 계층입니다. RDFE의 요청은 모두 FFE를 거쳐 패브릭 컨트롤러에 도달합니다.

B. 패브릭 컨트롤러는 데이터 센터 내의 모든 리소스를 유지하고 모니터링하는 일을 담당합니다. 패브릭 컨트롤러는 게스트 OS 버전, 서비스 패키지, 서비스 구성, 서비스 상태 등의 정보를 전송하는 패브릭 OS 상의 패브릭 호스트 에이전트와 통신합니다.

C. 호스트 에이전트는 호스트 OS에 상주하며 게스트 OS를 설정하는 역할을 합니다. 또한 게스트 에이전트(WindowsAzureGuestAgent)와 통신하여 역할을 의도한 목표 상태로 업데이트하고 게스트 에이전트와 하트비트 검사를 수행합니다. 호스트 에이전트는 10분 동안 하트비트 응답을 받지 못하면 게스트 OS를 다시 시작합니다.

C2. WaAppAgent는 WindowsAzureGuestAgent.exe의 설치, 구성, 업데이트를 담당합니다.

D. WindowsAzureGuestAgent는 다음 작업을 담당합니다.

  • 방화벽, ACLs, LocalStorage 리소스, 서비스 패키지 및 구성, 인증서를 포함한 게스트 OS의 구성
  • 역할이 실행되는 사용자 계정에 대한 SID를 설정합니다.
  • 패브릭에 해당 역할 상태 전달
  • 해당 역할이 목표한 상태에 도달하였는지 확인하기 위하여 WaHostBootstrapper 시작 및 모니터링

E. WaHostBootstrapper는 다음을 담당합니다.

  • 역할 구성 읽기 및 해당 역할의 구성과 실행을 위하여 적절한 작업과 프로세스를 모두 시작
  • 자식 프로세스를 모두 모니터링
  • 해당 역할 호스트 프로세스에 StatusCheck 이벤트 발생

F. 역할이 전체 IIS 웹 역할로 구성된 경우, IISConfigurator가 실행됩니다. 다음의 역할을 담당합니다.

  • 표준 IIS 서비스 시작
  • 웹 구성의 다시 쓰기 모듈 구성
  • 서비스 모델에 구성된 역할에 대한 AppPool 설정
  • IIS 로깅이 DiagnosticStore LocalStorage 폴더를 가리키도록 설정
  • 권한 및 ACLs 구성
  • 웹사이트의 위치는 %roleroot%:\sitesroot\0이며 AppPool은 이 위치를 가리켜 IIS를 실행합니다.

G. 롤 모델은 시작 작업을 정의하고 WaHostBootstrapper는 이 작업을 시작합니다. 백그라운드 비동기로 시작 작업을 실행하도록 구성할 수 있으며 호스트 부트스트래퍼는 시작 작업을 시작한 다음 다른 시작 작업으로 이어갑니다. 시작 작업은 단순(기본) 모드에서 실행되도록 구성할 수도 있습니다. 단순 모드에서 호스트 부트스트래퍼는 시작 작업이 완료되고 성공(0) 종료 코드가 반환될 때까지 기다린 후 다음 시작 작업을 진행합니다.

H. 이러한 작업은 SDK의 일부이며 역할 서비스 정의(.csdef)에서는 플러그인으로 정의됩니다. 시작 작업으로 확장할 때, DiagnosticsAgentRemoteAccessAgent는 각자 일반적인 시작 작업 하나와 /blockStartup 매개 변수가 있는 시작 작업 하나로 이루어진 시작 작업 두 개를 정의한다는 점에서 고유합니다. 정상적인 시작 작업은 역할 자체가 실행되는 동안 백그라운드에서 실행될 수 있도록 백그라운드 시작 작업으로 정의됩니다. /blockStartup 시작 작업은 단순 시작 작업으로 정의되어, 계속하기 전에 종료될 때까지 WaHostBootstrapper가 기다리도록 합니다. /blockStartup 작업은 일반 작업이 초기화 될 때까지 기다렸다가 종료되어 호스트 부트스트래퍼가 계속할 수 있게 합니다. 이 프로세스는 역할 프로세스가 시작되기 전에 진단 및 RDP 액세스를 구성할 수 있도록 수행되며, 이는 /blockStartup 작업을 통해 수행됩니다. 이 프로세스를 통해 호스트 부트스트래퍼가 시작 작업을 완료한 후에도 진단 및 RDP 액세스가 계속 실행될 수 있으며, 이는 일반 작업을 통해 수행됩니다.

I. WaWorkerHost는 일반 작업자 역할에 대한 표준 호스트 프로세스입니다. 이 호스트 프로세스는 역할의 DLL과 진입점 코드(예: OnStart 및 Run)를 모두 호스트합니다.

J. WaIISHost는 전체 IIS를 사용하는 웹 역할의 역할 진입점 코드에 대한 호스트 프로세스입니다. 해당 프로세스는 RoleEntryPoint 클래스를 사용하고 이 클래스에서 코드(OnStart, Run, OnStop)를 실행하는 것으로 확인된 첫 번째 DLL을 로드합니다. RoleEntryPoint 클래스에서 만들어지는 RoleEnvironment 이벤트(StatusCheck나 Changed 등)는 모두 해당 프로세스에서 발생합니다.

K. W3WP는 역할이 전체 IIS를 사용하도록 구성된 경우 사용되는 표준 IIS 작업자 프로세스입니다. 이 프로세스는 IISConfigurator에서 구성된 AppPool을 실행합니다. 여기에서 만들어지는 RoleEnvironment 이벤트(StatusCheck나 Changed 등)는 모두 해당 프로세스에서 발생합니다. 두 프로세스 모두에서 이벤트를 구독하는 경우 RoleEnvironment 이벤트는 두 위치(WaIISHost와 w3wp.exe)에서 모두 발생합니다.

워크플로 프로세스

  1. 사용자는 리소스로 하여금 구성 변경 중단이나 진행 등을 전달하면서 ".cspkg" 및 ".cscfg" 파일 업로드 등의 요청을 합니다. Azure Portal이나 Visual Studio Publish 기능과 같은 클래식 배포 모델 API를 사용하는 도구를 통해 요청할 수 있습니다. 이러한 요청은 RDFE에 전달되어 구독 관련 작업을 모두 수행한 뒤 해당 요청을 FFE에 전달합니다. 워크플로의 나머지 단계는 새로운 패키지를 배포하여 시작하는 것입니다.
  2. FFE는 선호도 그룹이나 지리적 위치 및 컴퓨터 가용성 등과 같이 패브릭에서 전달되는 입력 등의 사용자 지정 입력에 기초하여 올바른 컴퓨터 풀을 찾고 해당 컴퓨터 풀의 마스터 패브릭 컨트롤러와 통신합니다.
  3. 패브릭 컨트롤러는 CPU 코어를 사용할 수 있거나 새로운 호스트를 스핀업하는 호스트를 찾습니다. 서비스 패키지 및 구성은 해당 호스트로 복사되며 패브릭 컨트롤러는 호스트 OS 상에서 해당 호스트 에이전트와 통신하여 해당 패키지(구성 DIP, 포트, 게스트 OS 등)를 배포합니다.
  4. 호스트 에이전트는 게스트 OS를 시작하고 게스트 에이전트(WindowsAzureGuestAgent)와 통신합니다. 호스트는 역할이 목표 상태를 향하여 작동하고 있는지를 확인하기 위하여 게스트에 하트비트를 보냅니다.
  5. WindowsAzureGuestAgent는 게스트 OS(방화벽, ACL, LocalStorage 등)를 설정하고 새로운 XML 구성을 c:\Config에 복사한 다음, WaHostBootstrapper 프로세스를 시작합니다.
  6. 전체 IIS 웹 역할의 경우, WaHostBootstrapper는 IISConfigurator를 시작하여 IIS에서 시작된 웹 역할에 대한 기존 AppPools를 삭제하도록 지시합니다.
  7. WaHostBootstrapper는 E:\RoleModel.xml에서 시작 작업을 읽고 시작 작업을 실행 시작합니다. WaHostBootstrapper는 모든 단순한 시작 작업이 완료되고 성공 메시지를 반환할 때까지 기다립니다.
  8. 전체 IIS 웹 역할의 경우, WaHostBootstrapper는 IISConfigurator가 IIS AppPool을 구성하도록 지시하고, <index>가 0부터 시작하여 서비스가 거부된 <Sites> 요소의 수에 도달하는 인덱스인 E:\Sitesroot\<index>로 사이트를 가리키도록 합니다.
  9. WaHostBootstrapper는 역할 형식에 따라 호스트 프로세스를 시작합니다.
    1. 작업자 역할: WaWorkerHost.exe가 시작합니다. WaHostBootstrapper는 OnStart() 메서드를 실행합니다. 반환 후, WaHostBootstrapper는 Run() 메서드 실행을 시작한 다음, 역할을 준비로 표시하면서 부하 분산 장치 순환에 배치합니다(InputEndpoints가 정의된 경우). 이후, WaHostBootsrapper는 해당 역할 상태를 확인하는 루프로 이동합니다.
    2. 전체 IIS 웹 역할: aIISHost가 시작합니다. WaHostBootstrapper는 OnStart() 메서드를 실행합니다. 반환 후에는 Run() 메서드 실행을 시작한 다음, 역할을 준비로 표시하면서 부하 분산 장치 순환에 배치합니다. 이후, WaHostBootsrapper는 해당 역할 상태를 확인하는 루프로 이동합니다.
  10. 전체 IIS 웹 역할에 들어오는 웹 요청은 온-프레미스 IIS 환경에서와 마찬가지로 IIS가 W3WP 프로세스를 트리거하고 해당 요청을 처리하도록 유도합니다.

로그 파일 위치

WindowsAzureGuestAgent

  • C:\Logs\AppAgentRuntime.Log.
    시작, 중지, 새로운 설정 등을 포함하는 서비스 관련 변경 사항이 들어 있는 로그입니다. 서비스가 변경되지 않으면 해당 로그 파일에 상당한 시간 간격이 생길 것으로 예상할 수 있습니다.
  • C:\Logs\WaAppAgent.Log.
    상태 업데이트와 하트비트 알림이 들어 있는 로그이며, 2~3초마다 업데이트됩니다. 이 로그에는 인스턴스 상태에 대한 이전 정보가 포함되어 있으며 인스턴스가 준비 상태가 아니었던 시기를 알려 줍니다.

WaHostBootstrapper

C:\Resources\Directory\<deploymentID>.<role>.DiagnosticStore\WaHostBootstrapper.log

WaIISHost

C:\Resources\Directory\<deploymentID>.<role>\WaIISHost.log

IISConfigurator

C:\Resources\Directory\<deploymentID>.<role>\IISConfigurator.log

IIS 로그

C:\Resources\Directory\<guid>.<role>.DiagnosticStore\LogFiles\W3SVC1

Windows 이벤트 로그

D:\Windows\System32\Winevt\Logs