Service Fabric 프로브

이 문서를 진행하기 전에 Service Fabric 애플리케이션 모델Service Fabric 호스팅 모델을 숙지하세요. 이 문서에서는 매니페스트 파일을 사용하여 활동성 및 준비 상태 프로브를 정의하는 방법에 대한 개요를 제공합니다.

활동성 프로브

버전 7.1부터 Azure Service Fabric은 컨테이너화 및 컨테이너화되지 않은 애플리케이션에 대한 활동성 프로브 메커니즘을 지원합니다. 활동성 프로브는 코드 패키지의 활동성을 보고하는 데 도움이 되며, 신속하게 응답하지 않으면 다시 시작됩니다.

준비 상태 프로브

8.2부터 준비 프로브도 지원됩니다. 준비 상태 프로브는 코드 패키지가 트래픽을 수락할 준비가 되었는지 여부를 결정하는 데 사용됩니다. 예를 들어 컨테이너가 요청을 처리하는 데 시간이 오래 걸리거나 요청 큐가 가득 차면 코드 패키지가 더 이상 트래픽을 수락할 수 없으므로 코드 패키지에 도달하는 엔드포인트가 제거됩니다.

준비 프로브의 동작은 다음과 같습니다.

  1. 컨테이너/코드 패키지 인스턴스가 시작됩니다.
  2. 엔드포인트는 즉시 게시됩니다.
  3. 준비 프로브 실행 시작
  4. 준비 프로브가 결국 실패 임계값에 도달하고 엔드포인트가 제거되어 사용할 수 없게 됩니다.
  5. 인스턴스가 결국 준비됩니다.
  6. 준비 프로브는 인스턴스가 준비됨을 확인하고 엔드포인트를 다시 게시합니다.
  7. 요청을 처리할 준비가 되었으므로 요청이 다시 라우팅되고 성공합니다.

비고

준비 상태 프로브의 경우 코드 패키지가 다시 시작되지 않고 엔드포인트만 게시되지 않으므로 복제본/파티션 집합이 영향을 받지 않습니다.

의미론

코드 패키지당 하나의 활동성 및 하나의 준비 상태 프로브만 지정할 수 있으며 다음 필드를 사용하여 동작을 제어할 수 있습니다.

  • type: 프로브 유형이 활동성인지 준비 상태인지를 지정하는 데 사용됩니다. 지원되는 값은 활동성 또는 준비 상태입니다.

  • initialDelaySeconds: 컨테이너가 시작된 후 프로브 실행을 시작하는 초기 지연 시간(초)입니다. 지원되는 값은 int입니다. 기본값은 0이고 최소값은 0입니다.

  • timeoutSeconds: 프로브가 성공적으로 완료되지 않은 경우 실패한 것으로 간주하는 기간(초)입니다. 지원되는 값은 int입니다. 기본값은 1이고 최소값은 1입니다.

  • periodSeconds: 프로브의 빈도를 지정하는 기간(초)입니다. 지원되는 값은 int입니다. 기본값은 10이고 최소값은 1입니다.

  • failureThreshold: 이 값에 도달하면 컨테이너가 다시 시작됩니다. 지원되는 값은 int입니다. 기본값은 3이고 최소값은 1입니다.

  • successThreshold: 실패할 경우 프로브가 성공한 것으로 간주되려면 이 값에 대해 성공적으로 실행되어야 합니다. 지원되는 값은 int입니다. 기본값은 1이고 최소값은 1입니다.

한 번에 하나의 컨테이너에 하나의 프로브가 있을 수 있습니다. timeoutSeconds에 설정된 시간이 지나면 프로브가 완료되지 않으므로 기다렸다가 failureThreshold에 대한 시간을 카운트합니다.

또한 Service Fabric은 DeployedServicePackage에서 다음 프로브 상태 보고서를 생성합니다.

  • OK: successThreshold에서 설정된 값에 대해 프로브가 성공합니다.

  • Error: 컨테이너를 다시 시작하기 전 failureCount == failureThreshold입니다.

  • Warning:

    • 프로브가 실패하고 failureCount<failureThreshold를 초과합니다. 이 상태 보고서는 failureCountfailureThreshold 또는 successThreshold 에 설정된 값에 도달할 때까지 유지 됩니다.
    • 실패 후 성공하면 경고 상태는 유지되지만, 연속 성공 횟수가 업데이트됩니다.

프로브 지정

ServiceManifestImport 아래의 ApplicationManifest.xml 파일에서 프로브를 지정할 수 있습니다.

프로브는 다음 중 한 가지일 수 있습니다.

  • HTTP
  • TCP
  • Exec

HTTP 프로브

HTTP 프로브의 경우 Service Fabric은 지정한 포트 및 경로에 HTTP 요청을 보냅니다. 200보다 크거나 같고 400보다 작은 반환 코드는 성공을 나타냅니다.

HTTP 활동성 프로브를 지정하는 방법의 예는 다음과 같습니다.

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <HttpGet Path="/" Port="8081" Scheme="http">
              <HttpHeader Name="Foo" Value="Val"/>
              <HttpHeader Name="Bar" Value="val1"/>
            </HttpGet>
          </Probe>
        </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

HTTP 프로브에는 설정할 수 있는 추가 속성이 있습니다.

  • path: HTTP 요청에 사용할 경로입니다.

  • port: 프로브에 사용할 포트입니다. 이 속성은 필수입니다. 범위는 1에서 65535까지입니다.

  • scheme: 코드 패키지에 연결하는 데 사용할 체계입니다. 이 속성을 HTTPS로 설정하면 인증서 확인을 건너뜁니다. 기본 설정은 HTTP입니다.

  • httpHeader: 요청에 설정할 헤더입니다. 여러 헤더를 지정할 수 있습니다.

  • host: 연결할 호스트 IP 주소입니다.

비고

컨테이너화되지 않은 애플리케이션에는 포트가 지원되지 않습니다. 이 시나리오에서는 EndpointRef="EndpointName" 특성을 사용합니다. 'EndpointName'을 ServiceManifest.xml정의된 엔드포인트의 이름으로 바꿉다.

HTTP 엔드포인트 EndpointRef를 사용할 때, scheme 속성은 HTTP가 기본값이므로 선택적입니다. HTTPS 엔드포인트를 사용하는 경우, EndpointRef에 대해 scheme 속성을 "https"로 명시적으로 설정해야 합니다.

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Readiness" FailureThreshold="10" SuccessThreshold="2" InitialDelaySeconds="600" PeriodSeconds="60" TimeoutSeconds="20">
            <HttpGet Path="/" EndpointRef="ServiceEndpoint" Scheme="https">
            </HttpGet>
          </Probe>
        </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

비고

Service Fabric HTTPS 프로브는 TLS 핸드셰이크 중에 클라이언트 인증서 인증을 지원하지 않습니다. 핸드셰이크 프로세스에 대한 자세한 내용은 TLS 핸드셰이크 프로토콜을 참조하세요.

TCP 프로브

TCP 프로브의 경우 Service Fabric은 지정된 포트를 사용하여 컨테이너에서 소켓을 열려고 합니다. 연결을 설정할 수 있는 경우 프로브는 성공한 것으로 간주됩니다. 다음은 TCP 소켓을 사용하는 프로브를 지정하는 방법의 예입니다.

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <TcpSocket Port="8081"/>
          </Probe>
        </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

Exec 프로브

이 프로브는 컨테이너에 exec 명령을 실행하고 명령이 완료될 때까지 기다립니다.

비고

Exec 명령은 쉼표로 구분된 문자열을 사용합니다. 다음 예제의 명령은 Linux 컨테이너에 대해 작동합니다. Windows 컨테이너를 검색하려는 경우 cmd를 사용합니다.

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <Exec>
              <Command>ping,-c,2,localhost</Command>
            </Exec>
          </Probe>        
       </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

다음 단계

관련 정보는 다음 문서를 참조하세요.