로드 밸런싱을 어떻게 해야할까?

00_8_3·2021년 4월 18일
0
post-thumbnail

로드밸런싱 구현 방법?

오늘 카페에서 PM2Nginx를 이용한
로드밸런싱에 관한 여러 블로그 포스팅을 보았는데

대부분 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-compose up 설정

Docker 실행 명령어는 간단하다.
Docker-compose up --build -d --scale server=4

-d는 백그라운드, --scale은 compose컨테이너 이름으로
server를 여러 개 켜주는 것이다.

한 가지 알아야 할 것

  • 1
    --scale 옵션을 통해 한 컨테이너를 여러개를 실행 시키기 위해선
    compose.ymlcontainer_nameports
    옵션을 사용하면 안된다.
    도커콤포즈 옵션 설명
  • 2
    docker-compose로 스케일업 하는것은
    아래와 같이 docker 커멘드로
    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 이미지 이름이므로 따로 빌드하자!

성공 터미널 화면

마지막 Nginx을 이용한 로드밸런싱

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;
  }

PM2Nginx만으로 로드밸런싱 했을 때와 비슷하게
nginx.conf 파일을 위와 같이 수정해주면 된다.

compose "ports" 옵션은 꺼져있는데?

위의 conf를 보면 server_1:3000과 같이 포트 번호도 같이 명시되어 있는데

여기서의 포트는 Node 서버가 구동되는 포트번호이니 헷갈리지 말자!

compose.yml의 환경변수에 PORT=3000 설정되어 있다.

참고

https://maximorlov.com/from-pm2-to-docker-cluster-mode/

마침

PM2로 포트 여러 개 열어 놓고 쓰는게 멋져보여 구현 해보려 했는데
어쩌다 보니 도커를 이용해 로드밸런싱을 하게되었다..얼떨떨

생각해보니 CPU 인스턴스 개수를 임의로 입력해준 것이라
자동으로 인스턴스 최대만큼 스케일링 하려면 쿠버네티스를 사용해야 할 것 같다.
다음엔 쿠버네티스를 이용한 관련 포스팅을 해봐야겠다.

추가

ec2 우분투에 배포된 상황에서
위의 내용으로 스케일링을 할 경우
처음에는 잘 돌아가다 에러가 발생하기 시작했다.

쿠버네티스 쓰자..

0개의 댓글