• pm2를 활용한 클러스터링 :: 마이구미
    Nodejs 2016. 7. 26. 10:50
    반응형

    이번 글에서는 pm2를 활용해 클러스터링을 해보자.

    먼저, 이전에 작성한 글을 읽어보고 오는 것이 좋다.

    죽지 않고 유지하는 pm2 사용법을 알아보자


    일단 모듈을 설치하자.


    npm install cluster

    npm install http

    npm install os


    기본적인 클러스터 예제이다.


    var cluster = require('cluster'); var http = require('http'); var os = require('os'); var numCPUs = os.cpus().length; if (cluster.isMaster) { // Master: // Let's fork as many workers as you have CPU cores console.log(numCPUs); for (var i = 0; i < numCPUs-1; ++i) { cluster.fork(); console.log('fork'); } } else { // Worker: // Let's spawn a HTTP server // (Workers can share any TCP connection. // In this case its a HTTP server) console.log('else'); http.createServer(function(req, res) { res.writeHead(200); res.end("hello world"); }).listen(8181); }


    위의 예제를 실행해보면 아래와 같은 형태로 나온다.


    4 // cpu갯수

    fork

    fork

    fork

    fork

    else

    else

    else

    else


    현재 CPU 개수를 아래의 명령어로 확인할 수 있다.


    grep -c processor /proc/cpuinfo


    출력 결과는 cpu 갯수만큼 fork와 else가 나온다.

    cpu가 1개이면 1, fork, else 이런식으로 말이다.


    노드를 통해 스크립트 파일 실행 시 처음에는 기본적으로 마스터가 된다.

    for문을 통해 새로운 Worker들을 생성하게 된다. ( Worker는 instance라고 보면 된다)


    그렇다면, 잘 만들어졌는지 확인해보자.


    ps -aux | grep node


    위 명령어를 통해 확인해보면 CPU 갯수만큼 생성되어있는 걸 알 수 있다.



    ps -aux 예



    잘 만들어졌다.

    node는 자체적으로 로드밸런싱을 균등하게 해주기 때문에 더욱 좋다. (node 0.12버전 이후)

    로드밸런싱이란 간단히 적절하게 분산처리해주는 기능이라고 보면 된다.


    이번 주제는 pm2를 보자.

    다른 모듈 필요없이 pm2만으로 클러스터링이 가능하다.


    pm2 start <filename> -i 0 <n>


    pm2의 기존 start 명령어에서 -i 옵션을 달아주면 된다.

    뒤에 숫자를 통해 갯수를 지정할 수 있다.

    0으로 지정하면 cpu 최대 갯수로 생성되게 된다.


    var http = require('http'); http.createServer(function(req, res) { res.writeHead(200); res.end("hello world"); }).listen(8181);


    pm2


    pm2



    또한 확장 또는 삭제를 통해 제어할 수 있다.


    pm2 scale <appname> <n>


    pm2 scale test +3 // 3개 더 생성

    pm2 scale test 2 // 2개로 생성 ( 현재 4개라면 2개 삭제됨 )


    마지막으로 모니터링 기능을 통해 확인하자.


    pm2 monit

    pm2 monit



    참고한 자료

    https://keymetrics.io/2015/03/26/pm2-clustering-made-easy/

    반응형

    댓글

Designed by Tistory.