L7 Health Check

1.Health Check 설정 (TCP 80 만 확인)

TCP 80번 포트로 Active Health Check를 수행하고 있습니다.

TCP Health Check만 사용하는 경우에는 IIS 장애를 완전히 감지하지 못하는 상황이 발생할 수 있습니다.

현재 설정의 의미

현재는 다음과 같이 설정되어 있습니다.

  • Health Check : TCP
  • Port : 80

TCP Health Check는 일반적으로 다음만 확인합니다.

L7  ---> TCP SYN ---> Server:80

연결 성공  → 정상(act)
연결 실패  → 비정상(down)

즉,

  • TCP 포트가 열려 있으면 정상
  • TCP 포트가 닫혀 있으면 비정상

으로 판단합니다.

2.Real Server Health Check Status (Passive Health Check)

Active Check만으로도 정상 동작에는 문제가 없습니다. Active Health Check는 주기적으로 서버에 연결을 시도해 상태를 확인하고, Passive Health Check는 실제 사용자 요청을 관찰하여 오류를 감지하는 방식입니다.

응용

TCP Health Check는 포트 수준의 생존 여부만 확인하는 표준적인 설정입니다.

다만 웹 애플리케이션의 정상 동작까지 보장하려면 HTTP Health Check(예: /health 또는 /)로 변경하는 것이 권장됩니다. 이렇게 하면 IIS가 실행 중이더라도 애플리케이션이 응답하지 않는 상황까지 감지하여 해당 서버를 서비스에서 제외할 수 있습니다.

가장 좋은 방법은 전용 Health Check 페이지 만들기

방법 1 (권장) : /health 페이지 생성

예를 들어

http://10.0.0.11/health

접속 시

OK

또는

Healthy

만 리턴하도록 합니다.

ASP.NET (.NET Framework)

Health.aspx

<%@ Page Language="C#" %>
<%
Response.ContentType="text/plain";
Response.Write("OK");
Response.End();
%>

또는

Health.ashx

public class Health : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        context.Response.Write("OK");
    }

    public bool IsReusable => true;
}

방법 2

기존 페이지

/

또는

/ViewTest.asmx

를 검사하도록 합니다.

예)

GET /ViewTest.asmx HTTP/1.1

정상이라면

HTTP/1.1 200 OK

를 받습니다.

단점은

  • DB 접속이 느리면
  • IIS가 느리면
  • 응답시간 증가

Health Check까지 느려질 수 있습니다.


PAS-K 설정

Health Check Type을

현재

TCP

에서

HTTP

로 변경합니다.

예)

Type          HTTP

Method        GET

Port          80

URI           /health

Expected Code 200

Expected Text OK

또는

URI /

Expected Code 200

만 확인해도 됩니다.


동작 방식

현재(TCP)

PAS-K
   │
TCP SYN
   │
Server

TCP만 연결되면

Alive

로 판단합니다.


HTTP 방식

PAS-K
      │
GET /health
      │
HTTP/1.1 200 OK

OK

이렇게 실제 웹 요청을 수행합니다.

따라서

  • IIS 중지
  • ASP.NET 오류
  • 500 Error
  • 503 Error
  • Application Pool Stop

모두 감지할 수 있습니다.


가장 좋은 Health Check 페이지

가능하면 아래 정도만 검사하는 것이 좋습니다.

public void ProcessRequest(HttpContext context)
{
    try
    {
        // DB 연결 확인 (선택)
        // Cache 확인 (선택)

        context.Response.StatusCode = 200;
        context.Response.Write("OK");
    }
    catch
    {
        context.Response.StatusCode = 503;
        context.Response.Write("FAIL");
    }
}

이렇게 하면

  • IIS 실행 여부
  • ASP.NET 실행 여부
  • (선택) DB 연결 여부

까지 확인할 수 있어 단순 TCP Health Check보다 훨씬 정확하게 장애를 감지할 수 있습니다.


환경(.NET Framework 4.6.1 ASMX)에서는

현재 ViewTest.asmx와 같은 Web Service를 운영 중이므로 다음 순서를 권장드립니다.

  1. Health.ashx 또는 Health.aspx를 추가합니다.
  2. 항상 HTTP 200 + “OK”만 반환하도록 구현합니다.
  3. PAS-K Health Check를 TCP → HTTP(GET /health)로 변경합니다.
  4. Health Check Interval은 5초, Timeout은 3초, Fail Count는 3회 정도로 설정하면 일반적으로 15~20초 내에 장애 서버를 서비스에서 제외할 수 있습니다.

기존 URL(예: /, /ViewTest.asmx)에 HTTP GET을 보내고 응답 코드(200 OK)를 확인하도록 PAS-K를 설정하는 것입니다.

PAS-K에서는 Health Check를 TCP에서 HTTP로 변경하고 URL을 지정하면 됩니다. PAS-K는 HTTP Health Check를 지원합니다.

1. Health Check 생성

예를 들어 아래와 같이 설정합니다.

항목
TypeHTTP
Port80
MethodGET
URI/ViewTest.asmx
Expected Status200
Interval5초
Timeout3초
Retry(Fail Count)3

또는

Type        : HTTP
Method      : GET
Port        : 80
URI         : /
Expect Code : 200

2. Service에 적용

현재는

Service
   ↓
Health Check ID : 1
Type : TCP

으로 되어 있으므로

Service
   ↓
Health Check ID : 2
Type : HTTP

로 변경하면 됩니다.


3. 실제 PAS-K가 보내는 요청

예를 들어 URI를 /ViewTest.asmx로 지정하면 PAS-K는 내부적으로 다음과 같은 요청을 보냅니다.

GET /ViewTest.asmx HTTP/1.1
Host: 10.10.10.20
Connection: Close

정상이면

HTTP/1.1 200 OK

를 받고 서버를 Alive로 판단합니다.


GUI에서는 어디서 설정하나?

PAS-K GUI 버전에 따라 메뉴 이름은 조금 다르지만 일반적으로

SLB
 └── Health Check
       ├── Add
       ├── Type : HTTP
       ├── Port : 80
       ├── URI : /ViewTest.asmx
       └── Apply

순서로 생성한 후,

SLB
 └── Virtual Service
       └── Health Check = 새로 만든 HTTP Health Check

로 연결합니다.


하지만 /ViewTest.asmx를 권장하지 않는 이유

ViewTest.asmx는 실제 업무용 Web Service입니다.

Health Check가 5초마다 실행된다면

  • 하루 약 17,000회 이상 요청
  • IIS 로그 증가
  • 불필요한 Web Service 호출

이 발생합니다.

그래서 운영 환경에서는

/health

또는

/Health.aspx

처럼 가벼운 전용 Health Check 페이지를 사용하는 것이 일반적입니다. 이 페이지는 단순히 200 OK만 반환하거나, 필요하면 DB 연결까지 확인하도록 구현할 수 있어 성능과 장애 감지 측면에서 더 적합합니다.