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를 운영 중이므로 다음 순서를 권장드립니다.
- Health.ashx 또는 Health.aspx를 추가합니다.
- 항상 HTTP 200 + “OK”만 반환하도록 구현합니다.
- PAS-K Health Check를 TCP → HTTP(GET /health)로 변경합니다.
- 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 생성
예를 들어 아래와 같이 설정합니다.
| 항목 | 값 |
|---|---|
| Type | HTTP |
| Port | 80 |
| Method | GET |
| URI | /ViewTest.asmx |
| Expected Status | 200 |
| Interval | 5초 |
| Timeout | 3초 |
| 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 연결까지 확인하도록 구현할 수 있어 성능과 장애 감지 측면에서 더 적합합니다.
