네트워크 기반 로드 밸런싱
Node.js 애플리케이션의 성능을 극대화하고, 고가용성을 확보하기 위해서는 서버 간의 트래픽을 효율적으로 분배하는 네트워크 기반 로드 밸런싱이 필요합니다. 이 섹션에서는 PM2와 외부 로드 밸런서를 활용한 네트워크 기반 로드 밸런싱을 설정하고 관리하는 방법을 다룹니다.
1. 네트워크 기반 로드 밸런싱의 필요성
PM2는 단일 서버 내에서 여러 프로세스를 관리하고 로드를 분산하는 데 탁월하지만, 대규모 애플리케이션이나 여러 서버에 걸친 분산 시스템에서는 네트워크 기반 로드 밸런서가 필요합니다. 이 로드 밸런서는 다음과 같은 기능을 제공합니다:
- 서버 간 트래픽 분산: 여러 서버에 걸쳐 트래픽을 균등하게 분배하여, 특정 서버의 과부하를 방지합니다.
- 고가용성: 서버 중 하나가 실패하더라도 나머지 서버가 계속해서 요청을 처리할 수 있도록 지원합니다.
- 자동 확장: 트래픽 증가 시, 동적으로 서버를 추가하여 처리 용량을 확장할 수 있습니다.
2. 외부 로드 밸런서의 역할
외부 로드 밸런서는 클라이언트 요청을 여러 서버에 분산시키는 중요한 역할을 합니다. 이 중 대표적인 로드 밸런서로는 HAProxy와 NGINX가 있습니다. 이들은 다음과 같은 특징을 가지고 있습니다:
- HAProxy: 고성능 로드 밸런서로, 대규모 트래픽을 처리하는 데 최적화되어 있습니다. 간단한 설정으로 다수의 서버 간에 트래픽을 효율적으로 분배할 수 있습니다.
- NGINX: 웹 서버 및 리버스 프록시 역할을 동시에 수행하며, 로드 밸런싱 기능을 내장하고 있습니다. HTTP 및 TCP 트래픽 모두를 처리할 수 있어 다양한 환경에서 유연하게 사용됩니다.
3. HAProxy를 이용한 로드 밸런싱 설정
HAProxy를 활용하여 네트워크 기반 로드 밸런싱을 설정하는 방법을 설명합니다. 이 예제에서는 두 개의 Node.js 서버에 트래픽을 분산하는 설정을 다룹니다.
3.1 HAProxy 설치
먼저 HAProxy를 서버에 설치합니다. Ubuntu 시스템에서 HAProxy를 설치하려면 다음 명령어를 사용하세요.
sudo apt-get update
sudo apt-get install haproxy
설치가 완료되면, HAProxy 설정 파일을 편집하여 로드 밸런싱 규칙을 정의합니다.
3.2 HAProxy 설정 파일 편집
설정 파일은 일반적으로 /etc/haproxy/haproxy.cfg에 위치합니다. 이 파일을 열어 다음과 같이 설정을 추가합니다.
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
server server1 192.168.1.101:3000 check
server server2 192.168.1.102:3000 check
- frontend http_front: 클라이언트 요청을 수신하는 프론트엔드 설정입니다. 포트 80에서 요청을 수신하며, http_back 백엔드로 트래픽을 전달합니다.
- backend http_back: 백엔드 서버 간에 트래픽을 분산하는 설정입니다. roundrobin 방식으로 요청을 순차적으로 각 서버에 분배하며, 192.168.1.101:3000과 192.168.1.102:3000 서버가 요청을 처리합니다.
3.3 HAProxy 서비스 재시작
설정을 완료한 후 HAProxy 서비스를 재시작하여 설정을 적용합니다.
sudo service haproxy restart
이제 HAProxy는 두 개의 Node.js 서버 간에 트래픽을 분산하게 됩니다.
4. NGINX를 이용한 로드 밸런싱 설정
NGINX를 사용하여 로드 밸런싱을 설정하는 방법도 많이 사용됩니다. 다음은 NGINX를 이용한 기본적인 로드 밸런싱 설정 예제입니다.
4.1 NGINX 설치
NGINX는 다양한 운영 체제에서 사용할 수 있으며, Ubuntu 시스템에서는 다음 명령어로 설치할 수 있습니다.
sudo apt-get update
sudo apt-get install nginx
4.2 NGINX 설정 파일 편집
NGINX 설정 파일은 /etc/nginx/nginx.conf 또는 /etc/nginx/sites-available/default에 위치합니다. 이 파일을 열어 다음과 같이 설정합니다.
http {
upstream nodejs_servers {
server 192.168.1.101:3000;
server 192.168.1.102:3000;
}
server {
listen 80;
location / {
proxy_pass http://nodejs_servers;
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 nodejs_servers: Node.js 서버의 IP와 포트를 정의하고, 이들 간에 트래픽을 분산합니다.
- server: 클라이언트 요청을 수신하고, upstream 블록에 정의된 서버로 요청을 전달합니다.
4.3 NGINX 서비스 재시작
NGINX 설정을 저장한 후, 다음 명령어로 NGINX를 재시작하여 설정을 적용합니다.
sudo service nginx restart
이제 NGINX는 클라이언트의 요청을 두 개의 Node.js 서버에 균등하게 분산하게 됩니다.
5. 네트워크 기반 로드 밸런싱의 장점
네트워크 기반 로드 밸런싱을 사용하면 다음과 같은 이점을 누릴 수 있습니다:
- 트래픽 관리: 다수의 서버에 트래픽을 분산시켜 특정 서버의 과부하를 방지하고, 전체 시스템의 응답 속도를 향상시킵니다.
- 고가용성: 특정 서버가 다운되더라도 다른 서버가 요청을 처리할 수 있어, 서비스의 가용성을 보장합니다.
- 확장성: 트래픽이 증가할 때 손쉽게 서버를 추가하여 처리 용량을 확장할 수 있습니다.
다음 글에서는 pm2에 고급 기능에 대해서 더 알아보겠습니다.
다음글: https://johnny-developer-story.tistory.com/34
'서버 > Node.js' 카테고리의 다른 글
[Node.js] Random Access File 대해서 알아보자 (5) | 2024.10.29 |
---|---|
PM2와 Node.js Cluster: 효율적인 프로세스 관리 가이드(5): PM2와 Redis를 활용한 클러스터 간 세션 관리 (2) | 2024.09.01 |
PM2와 Node.js Cluster: 효율적인 프로세스 관리 가이드(2): PM2 로드 밸런싱 (0) | 2024.09.01 |
PM2와 Node.js Cluster: 효율적인 프로세스 관리 가이드(4): PM2를 사용한 Node.js 클러스터링 설정 - 고급 기능 및 관리 (0) | 2024.09.01 |
PM2와 Node.js Cluster: 효율적인 프로세스 관리 가이드(1): PM2를 사용한 Node.js 클러스터링 설정 (0) | 2024.08.27 |