오늘 카페에서 PM2
와 Nginx
를 이용한
로드밸런싱에 관한 여러 블로그 포스팅을 보았는데
대부분 Docker
를 사용하지 않고 로드밸런싱을 하는 글이었다.
관련 포스팅들을 쭉 읽고
쉘 스크립트
를 이용하여 pm2로 3000, 3001, 3002, 3003
4개의 포트를 열어 Nginx conf
설정을 하고
...
upstream backend {
server server:3000;
server server:3001;
server server:3002;
server server:3003;
keepalive 32;
}
...
Docker
로 실행을 하니 계속 오류가 발생했다.
해서 생각하니 컨테이너
와 PM2
간 포트충돌로 인해 그런거라 어림짐작을 하는데
Docker-compose
로 Scale up 하는 방법을 사용해보았다.
Docker 실행 명령어는 간단하다.
Docker-compose up --build -d --scale server=4
-d는 백그라운드, --scale은
compose
내컨테이너
이름으로
server
를 여러 개 켜주는 것이다.
--scale
옵션을 통해 한 컨테이너를 여러개를 실행 시키기 위해선compose.yml
내 container_name
과 ports
app_1 app_2 app_3 app_4
를 각자 실행 시켜주는 것과 같다!$ docker run -d -p 80:3000 --name app_1 server
$ docker run -d -p 80:3000 --name app_2 server
$ docker run -d -p 80:3000 --name app_3 server
$ docker run -d -p 80:3000 --name app_4 server
위의
server
는 docker 이미지 이름이므로 따로 빌드하자!
upstream app {
server stackfolio-server_server_1:3000;
server stackfolio-server_server_2:3000;
server stackfolio-server_server_3:3000;
server stackfolio-server_server_4:3000;
// weight 옵션을 통해 부하 조절이 가능하다.
//server stackfolio-server_server_3:3000 weight=2;
//server stackfolio-server_server_4:3000 weight=1;
}
PM2
와 Nginx
만으로 로드밸런싱 했을 때와 비슷하게
nginx.conf
파일을 위와 같이 수정해주면 된다.
위의 conf
를 보면 server_1:3000
과 같이 포트 번호도 같이 명시되어 있는데
여기서의 포트는 Node 서버가 구동되는 포트번호이니 헷갈리지 말자!
compose.yml의 환경변수에
PORT=3000
설정되어 있다.
https://maximorlov.com/from-pm2-to-docker-cluster-mode/
PM2
로 포트 여러 개 열어 놓고 쓰는게 멋져보여 구현 해보려 했는데
어쩌다 보니 도커를 이용해 로드밸런싱을 하게되었다..얼떨떨
생각해보니 CPU 인스턴스 개수를 임의로 입력해준 것이라
자동으로 인스턴스 최대만큼 스케일링 하려면 쿠버네티스를 사용해야 할 것 같다.
다음엔 쿠버네티스를 이용한 관련 포스팅을 해봐야겠다.
ec2 우분투에 배포된 상황에서
위의 내용으로 스케일링을 할 경우
처음에는 잘 돌아가다 에러가 발생하기 시작했다.
쿠버네티스 쓰자..