고가용성 웹 서버 구축은 현대 애플리케이션에서 필수적인 요소입니다. 오늘은 Nginx를 사용하여 고가용성을 제공하는 웹 서버를 설정하는 간단한 미니 프로젝트를 진행해보겠습니다. 이 프로젝트는 두 개의 Nginx 인스턴스를 로드밸런싱하여 장애 조치(failover) 및 부하 분산(load balancing)을 구현하는 데 중점을 둡니다.
프로젝트 진행 환경
이번 프로젝트에서는 다음과 같은 환경을 설정할 것입니다.
- 운영 체제: Ubuntu 20.04 LTS
- 웹 서버: Nginx
- 로드밸런서: Nginx
- 서버 수: 2대의 Nginx 서버와 1대의 로드밸런서
각 서버는 서로 다른 IP 주소를 가질 것이며, 로드밸런서는 클라이언트의 요청을 두 개의 Nginx 서버에 분산합니다. 이를 통해 하나의 서버에 장애가 발생하더라도 서비스가 계속 제공될 수 있도록 합니다.
서버 준비
- 서버 설치
- Nginx 웹 페이지 설정
- 로드밸런서 Nginx 설정
- Nginx 재시작
- 각 서버의 상태를 확인하는 스크립트를 작성합니다.
- 스크립트를 실행 가능한 상태로 만들고 주기적으로 실행하도록 설정합니다.
각 서버에 SSH로 접속한 후, Nginx를 설치합니다.
sudo apt update
sudo apt install nginx -y
서버의 기본 HTML 파일을 수정하여 각 Nginx 서버에서 다른 내용을 표시하도록 합니다.
- 서버 1 (IP: 192.168.1.101)
echo "<h1>Server 1 - Healthy</h1>" | sudo tee /var/www/html/index.html
- 서버 2 (IP: 192.168.1.102)
echo "<h1>Server 2 - Healthy</h1>" | sudo tee /var/www/html/index.html
로드밸런서 설정
로드밸런서 역할을 할 Nginx 서버에 접속하여 설정 파일을 수정합니다.
sudo nano /etc/nginx/sites-available/default
기본 설정 파일을 다음과 같이 수정합니다.
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
위의 설정에서 upstream 블록은 두 개의 Nginx 서버를 정의하고, proxy_pass 지시어는 클라이언트의 요청을 이 서버들로 분산합니다.
설정 변경 후, Nginx를 재시작하여 변경사항을 적용합니다.
sudo systemctl restart nginx
모니터링 설정
고가용성을 보장하기 위해 각 서버의 상태를 모니터링할 수 있는 도구를 설정하는 것이 중요합니다. 여기서는 간단한 curl 명령어를 사용하여 서버의 상태를 확인하는 방법을 소개합니다.
#!/bin/bash
SERVER_1="http://192.168.1.101"
SERVER_2="http://192.168.1.102"
for SERVER in $SERVER_1 $SERVER_2; do
HTTP_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $SERVER)
if [ $HTTP_RESPONSE -eq 200 ]; then
echo "$SERVER is up"
else
echo "$SERVER is down"
fi
done
이 스크립트는 각 서버의 HTTP 상태 코드를 확인하고, 서버가 정상인지 여부를 출력합니다.
chmod +x check_servers.sh
이후 cron을 사용하여 주기적으로 이 스크립트를 실행할 수 있습니다.
crontab -e
다음 줄을 추가하여 5분마다 스크립트를 실행하도록 설정합니다.
/5 * /path/to/check_servers.sh >> /path/to/logfile.log
마무리
이번 포스트에서는 Nginx를 활용하여 고가용성 웹 서버를 구축하는 방법을 살펴보았습니다. 로드밸런서를 설정하고, 각 서버의 상태를 모니터링하는 방법까지 알아보았습니다. 이러한 설정을 통해 서비스의 지속성을 높이고, 장애 발생 시 신속하게 대처할 수 있는 시스템을 구축할 수 있습니다. 여러분의 프로젝트에 많은 도움이 되기를 바랍니다.