(1). 환경 설정
서버1 192.168.5.101 부하 분산기
서버2 192.168.5.102 서비스 노드 1
서버3 192.168.5.103 서비스 노드 2
(2). Nginx 부하 분산 전략
Nginx는 upstream 블록에서 정의된 서버 리스트로부터 요청을 처리할 서버를 선택합니다. 기본적인 upstream 구성은 다음과 같습니다:
upstream [서버그룹이름]{
server [IP주소]:[포트번호];
server [IP주소]:[포트번호];
...
}
위 설정 후, 특정 요청을 해당 서버 그룹으로 리버스 프록시하기 위한 위치 지정은 아래와 같습니다:
location / {
proxy_pass http://[서버그룹이름];
}
Nginx의 upstream 모듈은 기본적으로 6가지 부하 분산 알고리즘을 지원합니다: round-robin (기본), weight (가중치), ip_hash (IP 기반), least_conn (최소 연결), fair (응답 시간), url_hash (URL 기반).
- Round Robin
기본 방식으로 각 요청이 시간 순서대로 다른 서버로 전달됩니다.
- Weight
가중치 기반 방식으로 각 서버에 대한 요청 비율을 조절할 수 있습니다:
upstream [서버그룹이름]{
server [IP주소]:[포트번호] weight=3;
server [IP주소]:[포트번호];
...
}
가중치 값이 높을수록 더 많은 요청을 받습니다.
- IP Hash
클라이언트 IP 주소를 기반으로 고정된 서버에 요청을 보내는 방법입니다:
upstream [서버그룹이름]{
ip_hash;
server [IP주소]:[포트번호];
...
}
동일한 클라이언트 요청은 항상 같은 서버로 이동하여 세션 문제를 해결합니다.
- Least Conn
현재 가장 적은 연결 수를 가진 서버에게 요청을 보냅니다:
upstream [서버그룹이름]{
least_conn;
server [IP주소]:[포트번호];
...
}
- Fair
서버 응답 시간에 따라 요청을 분배합니다:
upstream [서버그룹이름]{
fair;
server [IP주소]:[포트번호];
...
}
- URL Hash
특정 URL에 대해 동일한 서버에 요청을 보내도록 합니다:
upstream [서버그룹이름]{
hash $request_uri;
server [IP주소]:[포트번호];
...
}
(3). 실험
- 부하 분산기 서버1에서 Nginx 설치
필요한 의존성 패키지를 설치하고 Nginx 소스 코드를 컴파일 및 설치합니다:
[root@서버1 ~]# yum -y install gcc pcre-devel zlib-devel openssl-devel
[root@서버1 ~]# tar xvf nginx-1.14.1.tar.gz -C /usr/local/src/
[root@서버1 ~]# cd /usr/local/src/nginx-1.14.1/
[root@서버1 nginx-1.14.1]# ./configure --prefix=/usr/local/nginx
[root@서버1 nginx-1.14.1]# make && make install
Nginx 사용자 생성 및 시작 스크립트 추가:
[root@서버1 nginx-1.14.1]# useradd -r -s /sbin/nologin nginx
[root@서버1 nginx-1.14.1]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
[root@서버1 nginx-1.14.1]# chmod +x /etc/rc.d/rc.local
- 서비스 노드 2와 3에 웹 애플리케이션 배포:
[root@서버2 ~]# yum -y install httpd
[root@서버2 ~]# echo "서버2" > /var/www/html/index.html
[root@서버2 ~]# systemctl start httpd.service
[root@서버3 ~]# yum -y install httpd
[root@서버3 ~]# echo "서버3" > /var/www/html/index.html
[root@서버3 ~]# systemctl start httpd.service
- 테스트
각 페이지 유형(html, php 등)에 대해 정상 작동 여부를 확인합니다.