先日の環境を元に、NodeJSアプリの負荷分散管理アプリケーションのpm2を入れて、Nginxから分散をしてみようと思います。
先日の環境に関しては以下のURLを。
Windows10にVagrant入れて、CentOS7.1入れた話
CentOS7.1にNginx+NodeJS(nvm)環境の導入(Vagrant環境下)
環境
一応現状の環境について書いておきます。
- Vagrant 1.7.4
- CentOS 7.1
- Nginx 1.8.0
- NodeJS 0.12.7
- Express 4
pm2のインストール
$ npm install -g pm2
動かすための準備
この前のプロジェクトに移動して、process.jsonを作ります。
$ cd hoge
$ vi process.json
{
"name": "hoge-app",
"script": "bin/www",
"watch": "../",
"exec_mode": "fork",
"instances": 2,
"env": {
"NODE_DEBUG" : "http,net"
}
}
今回、express4の雛形で作ったので、process.jsonの指定が少し面倒でした。
インスタンス数は0(CPU数に依存)でも良いのですが、今回はプロセス数を指定しておきます。
また、このままpm2をstartさせるとportが同じになってしまうので修正します。
$ vi bin/www
var port = normalizePort(process.env.PORT || '3000');
↓
var port = normalizePort((process.env.PORT || 6001) + parseInt(process.env.NODE_APP_INSTANCE || 0));
起動
これで、あとは起動しましょう。
$ pm2 start process.json
ポートが使われているか確認する。
$ netstat -anp | grep "node"
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 :::6001 :::* LISTEN 21018/node /home/va
tcp6 0 0 :::6002 :::* LISTEN 21019/node /home/va
...
問題なく起動していますね。良かった。
nginxの設定を修正
では、nginxのnode.confを触ります。node.confは前回の記事で作ってます。
$ sudo vi /etc/nginx/conf.d/node.conf
upstream io_nodes {
- ip_hash; # クライアントは同じサーバーに接されることを保証
+ # ip_hash; # クライアントは同じサーバーに接されることを保証
server 127.0.0.1:6001;
+ server 127.0.0.1:6002;
}
あえてip_hashは消しておきます。(確認をしたいので)
nginxをリロード。
sudo nginx -s reload
あとはブラウザでリロードなりして、pm2のlogを追います。
$ pm2 logs
追ってみるとわかりますが、hoge-app-0とhoge-app-1にアクセスしていることがわかりますね。
これでロードバランサの機能が動いていることが確認できました!
最後に
実際に稼働させる際は、ip_hashのコメントアウトは外しておきましょう。
ではではー。