실무를 진행하면서 트래픽이 몰리면서 서버가 죽는 케이스가 종종 발생한다. 이를 방지하기 위해 로드 밸런싱을 해주는데, 현재 Azure Function을 이용해 특정 서버의 상태를 확인, 해당 서버가 죽었을 경우 standby 서버로 트래픽을 전달하게끔 하려고 하는데, 이를 위해서 Azure Function을 조사한 사항을 정리하려고 한다.
Azure Function은 서버리스 컴퓨팅 서비스로, 사용자가 직접 서버를 관리할 필요 없이 이벤트에 의해 트리거되는 코드를 실행할 수 있게 해줍니다. 이를 통해 개발자는 인프라 관리에 대한 부담 없이 비즈니스 로직에 집중할 수 있습니다. Azure Function은 다양한 언어를 지원하며, HTTP 요청, 타이머, 데이터베이스 변경, 메시지 큐 등 다양한 이벤트 소스에 의해 트리거될 수 있습니다.
아래는 Azure Function을 설정하고 구성하는 단계별 가이드입니다.
• Azure 포털에 접속하여 계정으로 로그인합니다.
• “리소스 만들기”를 클릭합니다.
• “Function App”을 검색하고 “만들기”를 클릭합니다.
• 구독: 사용 중인 구독을 선택합니다.
• 리소스 그룹: 새 리소스 그룹을 생성하거나 기존 리소스 그룹을 선택합니다.
• Function App 이름: 전 세계적으로 고유한 이름을 입력합니다.
• 런타임 스택: “Python”을 선택합니다.
• 지역: 가까운 지역을 선택합니다.
• 설정을 완료한 후 “검토 + 만들기”를 클릭하고, “만들기”를 클릭합니다.
• 생성된 리소스 그룹으로 이동하여 Function App을 클릭합니다.
• “Functions”에서 “추가”를 클릭합니다.
• “Timer trigger” 템플릿을 선택합니다.
• 타이머를 설정합니다 (예: 매 분마다 실행되도록 0 /1 * * * 설정).
• “만들기”를 클릭합니다.
Azure Function이 활성 서버의 상태를 확인하고, 활성 서버가 다운되었을 경우 스탠바이 서버로 트래픽을 리디렉션하는 코드를 작성합니다.
import logging
import socket
import azure.functions as func
def main(mytimer: func.TimerRequest) -> None:
active_server_ip = "xxx"
active_port = 11600
standby_server_ip = "xxx"
standby_port = 11601
is_active_up = check_server(active_server_ip, active_port)
if not is_active_up:
logging.info("Active server is down. Redirecting traffic to standby server.")
redirect_to_standby(standby_server_ip, standby_port)
else:
logging.info("Active server is running.")
def check_server(ip, port):
try:
with socket.create_connection((ip, port), timeout=5):
return True
except socket.error:
return False
def redirect_to_standby(ip, port):
logging.info(f"Redirecting traffic to standby server at {ip}:{port}.")
# 여기서 트래픽을 리디렉션하는 로직을 구현합니다.
# 예를 들어, DNS 레코드를 업데이트하거나 로드 밸런서 API에 요청을 보냅니다.
logging.info(f"Traffic should now be redirected to {ip}:{port}.")
• Azure 포털에서 생성한 Function으로 이동합니다.
• “Code + Test”를 클릭합니다.
• 기존 코드를 모두 삭제합니다.
• 위의 코드를 복사하여 붙여넣습니다.
• “저장”을 클릭합니다.
• 함수 아래의 “Integration”을 클릭합니다.
• 타이머 스케줄이 올바르게 설정되어 있는지 확인합니다 (예: 0 /1 * * *).
• Azure VM에 SSH로 접속합니다.
• lrs-active 컨테이너를 중지하여 장애를 시뮬레이션합니다:
docker stop lrs-active
• Azure 포털에서 Function App으로 이동합니다.
• “모니터”를 클릭하여 로그를 확인하고, 함수가 활성 서버의 다운 여부를 감지하고 스탠바이 서버로 트래픽을 리디렉션하는지 확인합니다.
• 스탠바이 서버가 트래픽을 처리하는지 확인합니다.
• curl을 사용하여 스탠바이 서버를 테스트합니다:
curl http://40.82.152.74:11601
위의 단계를 통해 Azure Function을 설정하고, 활성 서버가 다운되었을 때 스탠바이 서버로 트래픽을 리디렉션하는 자동화된 시스템을 구축할 수 있습니다. 이를 통해 애플리케이션의 고가용성을 보장할 수 있습니다.