nginx로 Load Balancing하기

sieun·2022년 3월 16일
2
post-thumbnail

개요

e-commerce 대용량 서버프로젝트는 서버의 성능을 높이는 방법으로 스케일 아웃(Scale-out)방식을 사용하기로 했습니디다. nginx를 사용해 로드밸런싱을 진행하여 스케일 아웃을 실제로 구현해보려고 합니다.


로드밸런서

: 서버에 가해지는 부하를 분산해주는 장치

로드밸런서는 클라이언트와 서버 풀 사이에 위치하여 부하가 한 쪽의 서버로 집중되지 않도록 트래픽을 관리해줍니다. 그 결과 각각의 서버가 최적의 성능을 보일 수 있도록 만들 수 있습니다.

스케일아웃(Scale-out) 방식으로 서버를 확장하려는 이유는 다수의 처리를 동시 병행적으로 실시하기 위함입니다. 때문에 하나의 서버에 부하가 집중되지 않도록 분배하는 로드밸런싱이 필요한 것 입니다. 이러한 로드밸런싱을 nginx를 통해서 진행해보려고 합니다.


nginx

nginx는 경량 웹 서버로 트래픽이 많은 웹사이트를 위해 비동기 이벤트 기반구조로 되어있습니다.

nginx는 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고, Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 합니다


구현 과정

생성한 nginx서버에 접속하여 다음과 같이 진행하였습니다.

# 저장소 추가 - nginx.repo 파일
sudo vi /etc/yum.repos.d/nginx.repo
# 다음과 같이 설정
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
# nginx 설치
sudo yum install -y nginx
vim /etc/nginx/nginx.conf 

초록색 네모 부분을 확인하여 똑같은 위치인 cd /etc/nginx/conf.d 로 이동합니다.

sudo vim default.conf
# 로드밸런싱 설정하기
upstream myapp1 {
    server 118.67.128.203:8080;
    server 27.96.135.51:8080;
}

server {
    listen 8080;

    location / {
        proxy_pass http://myapp1;
    }
}

default.conf파일의 설정한 내용을 보면 upstream 방식으로 2개의 서버를 설정하였습니다. 그래서 8080포트(nginx)로 요청이 들어오면 두개의 서버에 분산하게 됩니다.

분산 알고리즘을 설정하지 않으면 default값인 라운드 로빈 방식이 적용됩니다.


후기

스케일 아웃이 어려운 작업일 것 같다 막연하게 생각해왔는데, 생각보다 편리하게 설정할 수 있었습니다. 다만, 로드밸런싱 방법은 다양하고 아직 nginx의 이해 정도가 얕기 때문에 디벨롭이 필요할 것 같습니다.


Reference

https://www.nginx.com/blog/scaling-web-applications-nginx-part-load-balancing/
https://www.digitalocean.com/community/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching

profile
열심히 공부중입니다😇

0개의 댓글