Purpose of the post
사내 프린트 시스템을 클라우드로 이행하는 작업에 참여했을 때, IIS 서버와 Azure LB의 설정에 지식이 얕았기 때문에 테스트에서 예상과 다른 문제가 발생하여 조금 고생했습니다.
IIS 서버의 경우, 다른 팀에서 작업을 했기 때문에 어떤 설정이 되어있는지 하나씩 확인해 가며 Azure Load Balancer(LB)와 IIS의 설정이 어떻게 영향을 미치는지 알 수 있었습니다.
Azure LB Health Probe 문제와 그 해결 과정을 공유합니다.
문제 정의와 원인 분석
문제 정의
Azure 클라우드 환경에서 프린트 시스템을 위해 온프레미스 복합기가 HTTP 패킷을 송신하고, Azure LB가 이를 IIS 백엔드 서버로 부하 분산하도록 설정했습니다. 하지만 Health Probe가 백엔드 서버를 DOWN 상태로 판단하며 통신이 차단되는 문제가 발생했습니다.
Azure LB의 Health Probe 동작
Azure LB의 Health Probe는 HTTP 요청을 특정 경로로 보내고 상태 코드가 200일 경우 서버를 정상(UP)으로 간주합니다.
설정은 다음과 같았습니다:
- 감시 경로:
/
(도큐멘트 루트) - HTTP 상태 코드: 200
원인 분석
IIS 서버 설정을 확인해 본 결과:
- 도큐멘트 루트 경로가 기본값
(C:\inetpub\wwwroot)
에서 다른 경로로 변경되어 있었습니다. /
경로에 요청했을 때 반환될 파일이 IIS 기본값 도큐멘트에 설정되지 않았습니다.- 변경된 경로에는 다른 .html 파일이 존재했지만, 기본값에 의도적으로 동록하지 않았던 것 같습니다.
결론적으로, Health Probe는 /
경로에서 HTTP 요청을 시도했지만 응답을 받지 못해 DOWN 상태로 간주했습니다.
IIS 기본값: Default Document
IIS 기본값: Document Root (Physical Path)
# C:\inetpub\wwwroot\iisstart.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>IIS Windows Server</title>
<style type="text/css">
<!--
body {
color:#000000;
background-color:#0072C6;
margin:0;
}
#container {
margin-left:auto;
margin-right:auto;
text-align:center;
}
a img {
border:none;
}
-->
</style>
</head>
<body>
<div id="container">
<a href="http://go.microsoft.com/fwlink/?linkid=66138&clcid=0x409"><img src="iisstart.png" alt="IIS" width="960" height="600" /></a>
</div>
</body>
</html>
문제 상황 재현
기본값 도큐멘트에 추가되어 있던 iisstart.htm
을 temp
디렉터리에 이동시킨다.
Azure Portal 에서 Health 상태가 DOWN
으로 변경되었기 때문에 패킷은 백엔드 서버로 전송되지 않습니다.
해결 방법
Health Probe의 URL 감시 경로 수정
- 도큐멘트 루트 아래에 HTTP 200 상태 코드를 반환하는 파일을 생성합니다.
- 기본값(ex: Index.html)이 아닌 특정 파일명을 사용하려면 해당 파일명을 추가해야 합니다.
예를 들어,HealthStatus.html
이라는 파일을 생성한 경우, Azure LB의 Health Probe 감시 경로를 /HealthStatus.html로 설정합니다.
이렇게 하면 Health Probe가 정확한 경로에서 정상 상태를 감지할 수 있습니다.
TCP 포트 감시로 변경
- Health Probe의 감시 방식을 HTTP URL 대신 TCP 포트 감시로 전환합니다.
- TCP 감시는 IIS 서버의 포트가 리스닝 상태인지 확인하므로, IIS가 정상적으로 실행 중이라면 Health Probe 상태가 On(UP)으로 표시됩니다.
TCP 감시는 HTTP URL의 파일 경로 문제를 회피할 수 있는 간단하고 유효한 대안입니다.